Я пытаюсь установить настраиваемое поле проекта предприятия в событии OnCreating получателя событий в Project Server 2013 на месте. Когда я отлаживаю код, все выглядит правильно, но поле всегда пусто после создания проекта.
Я нашел, как настроить корпоративное настраиваемое поле из некоторых других сообщений. Я пытался использовать другие события, такие как OnCreated, но проект извлечен, поэтому я не могу обновить проект.
public override void OnCreating(PSContextInfo contextInfo, ProjectPreEventArgs e)
{
string projectName = e.ProjectName;
Guid projectUid = e.ProjectGuid;
PROJECT_SERVER_URI = (new SPSite(contextInfo.SiteGuid)).Url;
ClientContext ctx = new ClientContext(PROJECT_SERVER_URI);
//retrieve and increment the number
int newProjectID = GetNextProjectID(ctx);
// get the project data set
ProjectDataSet projectDS = e.ProjectDataSet;
// set the id of the enterprise custom field
var projectIDCol = new Guid("a644279e-5c62-e711-943c-00155d00d20a");
bool fieldNotFound = true;
// look in each custom field for the enterprise field
foreach (ProjectCustomFieldsRow row in projectDS.ProjectCustomFields)
{
if (row.MD_PROP_UID.Equals(projectIDCol))
{
// update the field with my value
row.NUM_VALUE = newProjectID;
fieldNotFound = false;
break;
}
}
if (fieldNotFound)
{
// the field was not found so manually add it
var newRow = projectDS.ProjectCustomFields.NewProjectCustomFieldsRow();
// clear the values
newRow.SetDATE_VALUENull();
newRow.SetTEXT_VALUENull();
newRow.SetNUM_VALUENull();
// set the field properties
newRow.CUSTOM_FIELD_UID = Guid.NewGuid();
newRow.MD_PROP_UID = projectIDCol;
newRow.PROJ_UID = projectUid;
newRow.FIELD_TYPE_ENUM = 15;
newRow.NUM_VALUE = newProjectID;
// add the custom field to the custom fields
projectDS.ProjectCustomFields.AddProjectCustomFieldsRow(newRow);
}
e.Cancel = false;
// pass the objects to the base implementation
base.OnCreating(contextInfo, e);
}
Ожидаемый результат - проект создан с заполненным пользовательским полем предприятия, но поле предприятия пусто.