About Me

My photo
System Analyst,Collaboration Servers Integrate,Enterprise setup planner.

Monday, 18 April 2011

Assign or Set the values to Custom Fileds of Project Server 2010

Guid sessionGuid = Guid.NewGuid();
Guid jobGuid = Guid.NewGuid();

project.CheckOutProject(prjGuid, sessionGuid, "Checked-out:PSI");
System.Threading.Thread.Sleep(1000);
CSF_WS.CustomFieldDataSet CstmDS = CustF.ReadCustomFields(null, false);
Project_WS.ProjectDataSet tempProject;
tempProject = project.ReadProject(prjGuid, Project_WS.DataStoreEnum.WorkingStore);

// DateTime startdate = (DateTime)ds2.Tables[0].Rows[i1]["PlannedStartDate"];
DateTime startdate = DateTime.Now.AddDays(2);

tempProject.Project.Rows[0][tempProject.Project.PROJ_INFO_START_DATEColumn] = startdate;
//tempProject = ((Project_WS.ProjectDataSet)tempProject.GetChanges(DataRowState.Modified));

Project_WS.ProjectDataSet.ProjectCustomFieldsDataTable P_dt = new EPMSamples.Project_WS.ProjectDataSet.ProjectCustomFieldsDataTable();


P_dt = tempProject.ProjectCustomFields; //*****This Line Represents the Assigned fields are present in Project.


CstmDS = CustF.ReadCustomFieldsByEntity(new Guid(PSLibrary.EntityCollection.Entities.ProjectEntity.UniqueId.ToString()));


//// Code FOR NEWLY ASSIGN THE VALUES TO CUSTOM FIELD i.e SET THE VALUES TO CUSTOM FIELDS


foreach (DataRow row in CstmDS.CustomFields)
{
//This is Normal project Text field.
if ((String)row["MD_PROP_NAME"] == "Test")
{
Project_WS.ProjectDataSet.ProjectCustomFieldsRow rowProjCF = P_dt.NewProjectCustomFieldsRow();
rowProjCF.MD_PROP_UID = (Guid)row["MD_PROP_UID"];
rowProjCF.PROJ_UID = prjGuid;
rowProjCF.MD_PROP_ID = (int)row["MD_PROP_ID"];
rowProjCF.CUSTOM_FIELD_UID = Guid.NewGuid();
//rowProjCF.TEXT_VALUE = ds2.Tables[0].Rows[i1]["BusinessAreaLeader"].ToString();
rowProjCF.TEXT_VALUE = "Testing values1";

tempProject.ProjectCustomFields.AddProjectCustomFieldsRow(rowProjCF);
}

//This is field Lookup field which dont have Default value, it has Default value
if ((String)row["MD_PROP_NAME"] == "Sample Areas Impacted")
{
foreach (Project_WS.ProjectDataSet.ProjectCustomFieldsRow rowProjCF in P_dt)
{

if ((String)row["MD_PROP_NAME"] == "Sample Areas Impacted" && row["MD_PROP_UID"].ToString() == rowProjCF["MD_PROP_UID"].ToString())
{
rowProjCF.MD_PROP_UID = (Guid)rowProjCF["MD_PROP_UID"];
rowProjCF.PROJ_UID = prjGuid;
rowProjCF.MD_PROP_ID = (int)rowProjCF["MD_PROP_ID"];
rowProjCF.CODE_VALUE = GetLulupValueCode("Marketing");

}
}

}

//This is field Lookup field which dont have Default value.
if ((String)row["MD_PROP_NAME"] == "Office Division")
{

Project_WS.ProjectDataSet.ProjectCustomFieldsRow rowProjCF = P_dt.NewProjectCustomFieldsRow();
rowProjCF.MD_PROP_UID = (Guid)row["MD_PROP_UID"];
rowProjCF.PROJ_UID = prjGuid;
rowProjCF.MD_PROP_ID = (int)row["MD_PROP_ID"];
rowProjCF.CUSTOM_FIELD_UID = Guid.NewGuid();
//rowProjCF.TEXT_VALUE = ds2.Tables[0].Rows[i1]["BusinessAreaLeader"].ToString();
rowProjCF.CODE_VALUE = GetLulupValueCode("Development");
tempProject.ProjectCustomFields.AddProjectCustomFieldsRow(rowProjCF);

}


}


//END Code FOR NEWLY ASSIGN THE VALUES TO CUSTOM FIELD

trackLog(" Updating project property changes.");
MessageBox.Show("Row =" + tempProject.ProjectCustomFields.Rows.Count.ToString());
if (tempProject.ProjectCustomFields.Rows.Count > 0)
{
project.QueueUpdateProject(jobGuid, sessionGuid, tempProject, false);


Guid publishguid = Guid.NewGuid();

project.QueuePublish(publishguid, prjGuid, true, String.Empty);

this.UpdateStatus("Update In Queue.....");
//this.textBox1.Text = " Update in Queue....";
Jobstate = WaitForQueue(jobGuid);
if (Jobstate == false)
{
trackLog("Queue Job for Project Custom fields Update Failed.");
return Jobstate;
}
else
{
trackLog("Queue Job Project Custom Fields Update succeeded.");
}

//System.Threading.Thread.Sleep(9000);
}
MessageBox.Show("Updated");

trackLog(" Checking-in project.");
jobGuid = Guid.NewGuid();
project.QueueCheckInProject(jobGuid, prjGuid, true, sessionGuid, "Checking-in:PSI");
Jobstate = WaitForQueue(jobGuid);
if (Jobstate == false)
{
trackLog("Queue Job Failed to Checking-in Project .");
return Jobstate;
}
System.Threading.Thread.Sleep(9000);

}

1 comment:

  1. This was really helpful to me. I was trying to update an ECF field but found that ProjectCustomField's MD_PROP_UID did not catch 'null' ECF's for a porject. So eventually, I needed to add this to the project where this worked like a charm.

    Just a few recommendation in this post.
    Naming conventions could be improved or comments could be added while using web service params and function like P_dt, CSF_WS and how were they added, just to be user friendly. I had to refer to SDK documentation to understand the usage.But not a big deal. Infact, its always a good idea to look up documentation before implementing code.

    But overall its a really helpful post. Thank you for sharing

    ReplyDelete