I
have lately been working on an App for Project Server Online and in this App I
included an App part. An App part to be included on a PDP-page, which to me
seems to be the purpose of an App part in a Project Server App. The data
entered in this App part should update the current project.
To find out how to do that also when the project manager had checked out the project turned out not to be easy at all. But in the following I will show sample
code on how to write back to Project Server from a App part.
First
I start getting all the project custom fields.
projContext = PS.ProjectContext.get_current();
customFields = projContext.get_customFields();
projContext.load(customFields);
// Run the request on the server.
projContext.executeQueryAsync(getCFComplete, getCFFailed);
projContext.executeQueryAsync(getCFComplete, getCFFailed);
function getCFFailed(sender, args) {
alert("");
}
alert("");
}
function getCFComplete(response) {
var cfEnumerator =
customFields.getEnumerator();
// Save the details of each CF for
later
while (cfEnumerator.moveNext()) {
var cf = cfEnumerator.get_current();
customFieldData.push({
Id: cf.get_id(),
Name: cf.get_name(),
InternalName: cf.get_internalName()
});
}
// Now get all projects
GetProjects();
}
var cfEnumerator = customFields.getEnumerator();
// Save the details of each CF for later
while (cfEnumerator.moveNext()) {
var cf = cfEnumerator.get_current();
customFieldData.push({
Id: cf.get_id(),
Name: cf.get_name(),
InternalName: cf.get_internalName()
});
}
// Now get all projects
GetProjects();
}
Now
we have all the custom fields and is ready to get all the projects.
function GetProjects() {
projects =
projContext.get_projects();
projContext.load(projects,
"Include( Name, CreatedDate, Id, IsCheckedOut )");
projContext.executeQueryAsync(updateProject,
getCFFailed);
}
projects = projContext.get_projects();
projContext.load(projects, "Include( Name, CreatedDate, Id, IsCheckedOut )");
projContext.executeQueryAsync(updateProject, getCFFailed);
}
In
the following function, I have chosen a specific project to update and a
specific custom field.
function updateProject() {
var projectId =
"b028d0ef-b597-e311-a659-00155d786a13";
var projectEnumerator =
projects.getEnumerator();
var project;
while (projectEnumerator.moveNext())
{
var
proj = projectEnumerator.get_current();
if
(proj.get_id() == projectId) {
project = proj;
}
}
var isCheckOut =
project.get_isCheckedOut();
var checkInAgain = false;
var draftProject;
if (isCheckOut) {
draftProject =
project.get_draft();
} else {
draftProject =
project.checkOut();
checkInAgain = true;
}
var fieldName = "DemoTest";
var projectId = "b028d0ef-b597-e311-a659-00155d786a13";
var projectEnumerator = projects.getEnumerator();
var project;
while (projectEnumerator.moveNext()) {
var proj = projectEnumerator.get_current();
if (proj.get_id() == projectId) {
project = proj;
}
}
var isCheckOut = project.get_isCheckedOut();
var checkInAgain = false;
var draftProject;
if (isCheckOut) {
draftProject = project.get_draft();
} else {
draftProject = project.checkOut();
checkInAgain = true;
}
var fieldName = "DemoTest";
var publishJob = draftProject.publish(checkInAgain);
//Monitor the job
projContext.waitForQueueAsync(publishJob,
30, function(response) {
if
(response !== 4) {
alert(response);
//Monitor the job
projContext.waitForQueueAsync(publishJob, 30, function(response) {
if (response !== 4) {
alert(response);
}
});
}
That’s
it. J