Br Mil

Br Mil

  • NA
  • 1
  • 972

How do I set multiple fields with Microsoft Project PSI?

May 8 2014 1:00 PM
What modifications need to be made the following code to have it update multiple Custom Fields in one pass. I have everything working up until the point I want to start updating multiple Custom Fields. The current program I’ve put together only results in updating the first ForEach cfValueWOD Custom Field. I can get the code to update multiple fields if they already have a value but for my project these custom fields can either have an initial value or no value to start. In both cases I will need to write values to these fields. I need to complete this for a project at work very soon and I’m at a loss. Your help will be much appreciated.
 
Guid myProjectUid = new Guid("{c96bd7ea-e9d2-47ed-8819-02e4653e92a7}");
            ProjectDataSet myProject = projectSvc.ReadProject(myProjectUid, DataStoreEnum.WorkingStore);
            //indicate the custom field has been found
           bool customFieldFound = false;
            //iterate over fields and update them to the table for WO Status
            foreach (ProjectDataSet.ProjectCustomFieldsRow cfRow in myProject.ProjectCustomFields)
            {
                //if field exists update it
                if (cfRow.MD_PROP_UID == cfIdWOD)
                {
                    //update the value
                    cfRow.TEXT_VALUE = cfValueWOD;
                    customFieldFound = true;
                }
            }
            //check if the custom field has been found
            if (!customFieldFound)
            {
                //create a new row
                ProjectDataSet.ProjectCustomFieldsRow cfRowWOD =
                    myProject.ProjectCustomFields.NewProjectCustomFieldsRow();
                //Sets all values to NUll to begin
                cfRowWOD.SetDATE_VALUENull();
                cfRowWOD.SetTEXT_VALUENull();
                //General parameters
                cfRowWOD.MD_PROP_UID = cfIdWOD; //custom field ID
                cfRowWOD.CUSTOM_FIELD_UID = Guid.NewGuid();
                cfRowWOD.PROJ_UID = myProjectUid; //current project ID
                //add value
                cfRowWOD.FIELD_TYPE_ENUM = 21;
                cfRowWOD.TEXT_VALUE = Convert.ToString(cfValueWOD); //test value
                //add the row to the data set
                myProject.ProjectCustomFields.AddProjectCustomFieldsRow(cfRowWOD);
            }
            //iterate over fields and update them to the table for WO Status
            foreach (ProjectDataSet.ProjectCustomFieldsRow cfRow in myProject.ProjectCustomFields)
            {
                //if field exists update it
                if (cfRow.MD_PROP_UID == cfIdWG)
                {
                    //update the value
                    cfRow.TEXT_VALUE = cfValueWG;
                    customFieldFound = true;
                }
            }
            //check if the custom field has been found
            if (!customFieldFound)
            {
                //create a new row
                ProjectDataSet.ProjectCustomFieldsRow cfRowWG =
                    myProject.ProjectCustomFields.NewProjectCustomFieldsRow();
                //Sets all values to NUll to begin
                cfRowWG.SetDATE_VALUENull();
                cfRowWG.SetTEXT_VALUENull();
                //General parameters
                cfRowWG.MD_PROP_UID = cfIdWG; //custom field ID
                cfRowWG.CUSTOM_FIELD_UID = Guid.NewGuid();
                cfRowWG.PROJ_UID = myProjectUid; //current project ID
                //add value
                cfRowWG.FIELD_TYPE_ENUM = 21;
                cfRowWG.TEXT_VALUE = Convert.ToString(cfValueWG); //test value
                //add the row to the data set
                myProject.ProjectCustomFields.AddProjectCustomFieldsRow(cfRowWG);
            }