Как настроить настраиваемое корпоративное поле в приемнике событий OnCreating в Project Server? - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь установить настраиваемое поле проекта предприятия в событии 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);
     }

Ожидаемый результат - проект создан с заполненным пользовательским полем предприятия, но поле предприятия пусто.

...