Поделиться через


Метод CustomFields.UpdateCustomFields2

Создание, изменение или удаление корпоративных настраиваемых полей, где находятся формул в виде зависит от языка.

Пространство имен:  WebSvcCustomFields
Сборка:  ProjectServerServices (в ProjectServerServices.dll)

Синтаксис

'Декларация
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/CustomFields/UpdateCustomFields2", RequestNamespace := "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/",  _
    ResponseNamespace := "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/",  _
    Use := SoapBindingUse.Literal, ParameterStyle := SoapParameterStyle.Wrapped)> _
Public Sub UpdateCustomFields2 ( _
    cfds As CustomFieldDataSet, _
    validateOnly As Boolean, _
    autoCheckIn As Boolean _
)
'Применение
Dim instance As CustomFields
Dim cfds As CustomFieldDataSet
Dim validateOnly As Boolean
Dim autoCheckIn As Boolean

instance.UpdateCustomFields2(cfds, validateOnly, _
    autoCheckIn)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/CustomFields/UpdateCustomFields2", RequestNamespace = "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/", 
    ResponseNamespace = "https://schemas.microsoft.com/office/project/server/webservices/CustomFields/", 
    Use = SoapBindingUse.Literal, ParameterStyle = SoapParameterStyle.Wrapped)]
public void UpdateCustomFields2(
    CustomFieldDataSet cfds,
    bool validateOnly,
    bool autoCheckIn
)

Параметры

  • validateOnly
    Тип: System.Boolean

    Если trueпроверки CustomFieldDataSet.

  • autoCheckIn
    Тип: System.Boolean

    Если true, возврат настраиваемого поля после их обновления.

Замечания

Новый метод в Project Server 2010. UpdateCustomFields2 создает настраиваемые поля, если CustomFieldDataSet включает в себя новые настраиваемые поля, изменяет существующие настраиваемые поля и удаление настраиваемых полей, не входящих в CustomFieldDataSet.

Формулы в CustomFieldDataSet , которые используются для вычисления настраиваемых полей или графические индикаторы могут быть написаны в формате языкового стандарта, указанного в панели управления язык и региональные стандарты компьютера с Project Server. Метод UpdateCustomFields2 сохраняет формулы в виде зависящего от языка. Для сравнения метод UpdateCustomFields сохраняет формулы независимо от языкового стандарта формат.

Предупреждение

Метод UpdateCustomFields и метод UpdateCustomFields2 , а также Project Web App все позволяют создать проект корпоративное настраиваемое поле типа флаг и задать настраиваемое поле должно быть управляются рабочего процесса. Тем не менее рабочих процессов Project Server не может управлять настраиваемые поля флага. Не следует устанавливать project настраиваемых полей типа флаг для элемента управления рабочего процесса.

Разрешения Project Server

Разрешение

Описание

ManageEnterpriseCustomFields

Позволяет пользователям изменять определения корпоративных настраиваемых полей и значения таблицы подстановки. Глобальное разрешение.

Если пользователь не является извлекать настраиваемые поля, UpdateCustomFields2 также требуются разрешения администратора для принудительного возврата.

Примеры

В следующем примере используется ReadCustomFieldsByMdPropUids и ReadCustomFieldsByMdPropUids2 для чтения настраиваемого поля и затем записывает содержимое customFieldDSCustomFieldDataSet.xml и CustomFieldDataSet2.xml, соответственно. За исключением MD_PROP_FORMULAдва метода возвращают те же данные.

For more information, including a procedure that shows how to use Project Web App and Project профессиональный 2010 with the same formula, see Using Formulas and Graphical Indicators with Custom Fields.

Поля MD_PROP_FORMULA , возвращаемый ReadCustomFieldsByMdPropUids зависит от языковой стандарт (язык сервера и установка Project) и — это показано в следующем коде.

<MD_PROP_FORMULA>Switch(Not ([MSPJ188743724] &gt;= #01/01/1984# And [MSPJ188743724] &lt; #01/01/2050#), 
"No Baseline", ([MSPJ188743685] + 1) / ([MSPJ188743686] + 1) &gt; 1.2, "Overbudget by 20% or more", 
([MSPJ188743685] + 1) / ([MSPJ188743686] + 1) &gt; 1, "Overbudget", True, "Under budget")</MD_PROP_FORMULA>

Поля MD_PROP_FORMULA , возвращаемый ReadCustomFieldsByMdPropUids2 (как показано в следующем коде) не зависит от языкового стандарта. Это работает так же, как на другой язык установки. По этой причине метод ReadCustomFieldsByMdPropUids2 предпочтительнее метода ReadCustomFieldsByMdPropUids .

<MD_PROP_FORMULA><MD_PROP_FORMULA>Switch(Not ([Baseline Estimated Finish] &gt;= #1/1/1984# And [Baseline Estimated Finish] &lt; #1/1/2050#), 
"No Baseline", ([Cost] + 1) / ([Baseline Cost] + 1) &gt; 1.2, "Overbudget by 20% or more", 
([Cost] + 1) / ([Baseline Cost] + 1) &gt; 1, "Overbudget", True, "Under budget")</MD_PROP_FORMULA>

Кроме того в примере показано изменение формулы и вызывает метод UpdateCustomFields2 для обновления настраиваемого поля и затем записывает обновленный набор данных UpdatedCustomFieldData.xml

Он вызывает CheckInCustomFields для проверки в настраиваемого поля после изменения и вызывает CheckOutCustomFields для извлечения настраиваемых полей, прежде чем изменять их.

The example uses the SvcCustomFields namespace in the ProjectServerServices.dll proxy assembly. The ConfigClientEndpoints method and the SetClientEndpoints method use an app.config file for setting the WCF binding, behavior, and endpoint. For information about creating a PSI proxy assembly and an app.config file, see Необходимые условия для примеров кода на основе WCF в Project 2013.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.ServiceModel;

namespace Microsoft.SDK.Project.Samples.TestCustomFields
{
    class CustomFields
    {
        private static SvcCustomFields.CustomFieldsClient customFieldClient;
        private static SvcResource.ResourceClient resourceClient;
        private const string RES_ENDPOINT = "basicHttp_Resource";
        private const string CUST_ENDPOINT = "basicHttp_CustomFields";
        private const string OUTPUT_FILES = @"C:\Projects\Samples\Output\";
        private static string outFilePathCustomFields;
        private static string outFilePathCustomFields2;
        private static string outFilePathCustomFields3;

        static void Main(string[] args)
        {
            try
            {
                Guid[] customFieldID = new Guid[1];
                customFieldID[0] = new Guid("4bfa524a-ce48-4a31-a2d6-5e8baa6c9d29");

                ConfigClientEndpoints(CUST_ENDPOINT);
                SetClientEndpoints(RES_ENDPOINT);

                // If directory does not exist, create it.
                if (!Directory.Exists(OUTPUT_FILES))
                {
                    Directory.CreateDirectory(OUTPUT_FILES);
                }

                // Assign the path where the output XML file will be saved.
                outFilePathCustomFields = OUTPUT_FILES + "CustomFieldData.xml";
                outFilePathCustomFields2 = OUTPUT_FILES + "CustomFieldData2.xml";
                outFilePathCustomFields3 = OUTPUT_FILES + "UpdatedCustomFieldData.xml";

                // Create a custom fields dataset. 
                SvcCustomFields.CustomFieldDataSet customFieldDS =
                    new SvcCustomFields.CustomFieldDataSet();

                // Read the custom fields data by using ReadCustomFieldsByMdPropUids.
                customFieldDS = customFieldClient.ReadCustomFieldsByMdPropUids(
                    new Guid[] { customFieldID[0] }, false);

                // Write the dataset to an XML file.
                customFieldDS.WriteXml(outFilePathCustomFields);
                Console.WriteLine("\nSee XML output of the CustomFieldDataSet at {0}",
                    outFilePathCustomFields);

                // Read the custom fields data by using ReadCustomFieldsByMdPropUids2.
                customFieldDS = customFieldClient.ReadCustomFieldsByMdPropUids2(
                    new Guid[] { customFieldID[0] }, false);

                // Write the dataset to an XML file.
                customFieldDS.WriteXml(outFilePathCustomFields2);

                bool checkedOut = false;

                // Get the ID of the user.
                Guid me = resourceClient.GetCurrentUserUid();

                // Check whether the custom field to be updated is checked out.
                foreach (SvcCustomFields.CustomFieldDataSet.CustomFieldsRow custRow in customFieldDS.CustomFields)
                {
                    if (custRow.MD_PROP_UID.ToString() == customFieldID[0].ToString())
                    {
                        if (custRow.IsNull("MD_PROP_CHECKOUTBY"))    // If the custom field is not checked out.
                        {
                            // Check out the custom field.
                            customFieldClient.CheckOutCustomFields(new Guid[] { custRow.MD_PROP_UID });
                            checkedOut = true;
                            Console.WriteLine("Custom field checked out.....");
                            break;
                        }
                        else
                        {
                            // Check whether the custom field is checked out by you.
                            if (custRow.MD_PROP_CHECKOUTBY == me)
                            {
                                checkedOut = true;
                                Console.WriteLine("The custom field is already checked out by you");
                                break;
                            }
                            else
                            {
                                // The custom field is checked out by some other user.
                                checkedOut = false;
                                Console.WriteLine("This custom field has already been checked out");
                                Console.ReadLine();
                                break;
                            }
                        }
                    }
                }
                if (checkedOut)
                {
                    // Modify the formula field of the custom field.
                    // Type the following statement in a single line.
                    customFieldDS.CustomFields[0].MD_PROP_FORMULA =
                        "Switch(Not ([Baseline Estimated Finish] >= #1/1/1984# And [Baseline Estimated Finish] < #1/1/2050#), 
                        \"No Baseline\", ([Cost] + 1) / ([Baseline Cost] + 1) > 1.5, \"Overbudget by 50% or more\", 
                            ([Cost] + 1) / ([Baseline Cost] + 1) > 1, \"Overbudget\", True, \"Under budget\")";

                    // Update the dataset.
                    customFieldClient.UpdateCustomFields2(customFieldDS, false, false);
                    customFieldDS.WriteXml(outFilePathCustomFields3);

                    // Write the custom field data to an XML file.
                    Console.WriteLine("\nSee XML output of the CustomFieldDataSet at {0}",
                        outFilePathCustomFields3);

                    // Check in the custom field.
                    customFieldClient.CheckInCustomFields(new Guid[] { customFieldID[0] }, false);
                }
            }
            catch (CommunicationException e)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("\n***System.ServiceModel.CommunicationException:");
                Console.WriteLine(e.ToString());
                Console.ResetColor();
            }
            finally
            {
                Console.Write("\r\n\r\nPress any key....");
                Console.ReadKey();
            }
        }
        
        // Configure the custom field client endpoints.
        public static void ConfigClientEndpoints(string endpt)
        {
            customFieldClient = new SvcCustomFields.CustomFieldsClient(endpt);
        }
        // Configure the resource client endpoints.
        public static void SetClientEndpoints(string ept)
        {
            resourceClient = new SvcResource.ResourceClient(ept);
        }

    }
}

Обновленный набор данных с помощью измененной формулы MD_PROP_FORMULAзаписывается в UpdatedCustomFieldData.xml и показано в следующем примере кода.

<?xml version="1.0" standalone="yes"?>
<CustomFieldDataSet xmlns="https://schemas.microsoft.com/office/project/server/webservices/CustomFieldDataSet/">
<CustomFields>
<MD_PROP_UID>4bfa524a-ce48-4a31-a2d6-5e8baa6c9d29</MD_PROP_UID>
<MD_PROP_ID>188776464</MD_PROP_ID>
<MD_PROP_UID_SECONDARY>64546b89-9a2a-49d8-b3ce-190119a3c562</MD_PROP_UID_SECONDARY> <MD_PROP_ID_SECONDARY>255885317</MD_PROP_ID_SECONDARY>
<MD_ENT_TYPE_UID>ebad93e7-2149-410d-9a39-a8680738329d</MD_ENT_TYPE_UID>
<MD_PROP_NAME>Budget Indicator</MD_PROP_NAME>
<MD_PROP_IS_WORKFLOW_CONTROLLED>false</MD_PROP_IS_WORKFLOW_CONTROLLED>
<MD_PROP_IS_REQUIRED>false</MD_PROP_IS_REQUIRED>
<MD_AGGREGATION_TYPE_ENUM>9</MD_AGGREGATION_TYPE_ENUM>
<MD_PROP_TYPE_ENUM>21</MD_PROP_TYPE_ENUM>
<MD_PROP_IS_MULTILINE_TEXT>false</MD_PROP_IS_MULTILINE_TEXT>
<MD_PROP_DESCRIPTION>Test for graphical indicator example in SDK</MD_PROP_DESCRIPTION>
<MD_PROP_MAX_VALUES>1</MD_PROP_MAX_VALUES>
<MD_PROP_FORMULA>Switch(Not ([Baseline Estimated Finish] &gt;= #1/1/1984# And [Baseline Estimated Finish] &lt; #1/1/2050#), 
"No Baseline", ([Cost] + 1) / ([Baseline Cost] + 1) &gt; 1.5, "Overbudget by 50% or more", 
([Cost] + 1) / ([Baseline Cost] + 1) &gt; 1, "Overbudget", True, "Under budget")</MD_PROP_FORMULA>
<MD_PROP_GRAPHICAL_INDICATOR>[[==No baseline][5]][[==Overbudget by 50% or more][3]]
[[==Overbudget][2]][[==Under budget][1]]</MD_PROP_GRAPHICAL_INDICATOR>
<MD_PROP_SUMM_GRAPHICAL_INDICATOR>[[==No baseline][5]][[==Overbudget by 50% or more][3]]
[[==Overbudget][2]][[==Under budget][1]]</MD_PROP_SUMM_GRAPHICAL_INDICATOR>
<MD_PROP_PROJ_SUMM_GRAPHICAL_INDICATOR>[[==No baseline][5]][[==Overbudget by 50% or more][3]]
[[==Overbudget][2]][[==Under budget][1]]</MD_PROP_PROJ_SUMM_GRAPHICAL_INDICATOR>
<MD_PROP_GRAPHICAL_INDICATOR_TOOLTIP>false</MD_PROP_GRAPHICAL_INDICATOR_TOOLTIP>
<MD_PROP_ROLLDOWN_TO_ASSN>false</MD_PROP_ROLLDOWN_TO_ASSN>
<MD_PROP_COPY_ON_REASSIGNMENT>false</MD_PROP_COPY_ON_REASSIGNMENT>
<MD_PROP_CHECKOUTDATE>2010-02-08T10:57:21.21-08:00</MD_PROP_CHECKOUTDATE>
<MOD_DATE>2010-02-08T11:12:40.78-08:00</MOD_DATE>
</CustomFields>
</CustomFieldDataSet>

См. также

Справочные материалы

CustomFields класс

Элементы CustomFields

Пространство имен WebSvcCustomFields

UpdateCustomFields(CustomFieldDataSet, Boolean, Boolean)