Partager via


CustomFields.ReadCustomFieldsByMdPropUids2 - Méthode

Obtient les définitions de champ personnalisé en fonction des autorisations globales pour les identificateurs uniques de champ personnalisé spécifié, où les formules sont dans un format dépendant de la langue.

Espace de noms :  WebSvcCustomFields
Assembly :  ProjectServerServices (dans ProjectServerServices.dll)

Syntaxe

'Déclaration
<SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/CustomFields/ReadCustomFieldsByMdPropUids2", 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 Function ReadCustomFieldsByMdPropUids2 ( _
    md_prop_uids As Guid(), _
    autoCheckOut As Boolean _
) As CustomFieldDataSet
'Utilisation
Dim instance As CustomFields
Dim md_prop_uids As Guid()
Dim autoCheckOut As Boolean
Dim returnValue As CustomFieldDataSet

returnValue = instance.ReadCustomFieldsByMdPropUids2(md_prop_uids, _
    autoCheckOut)
[SoapDocumentMethodAttribute("https://schemas.microsoft.com/office/project/server/webservices/CustomFields/ReadCustomFieldsByMdPropUids2", 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 CustomFieldDataSet ReadCustomFieldsByMdPropUids2(
    Guid[] md_prop_uids,
    bool autoCheckOut
)

Paramètres

  • md_prop_uids
    Type : []

    Tableau de GUID de champ personnalisé

  • autoCheckOut
    Type : System.Boolean

    Si true, les champs personnalisés pour la modification d'extraction.

Valeur renvoyée

Type : WebSvcCustomFields.CustomFieldDataSet

Remarques

Une nouvelle méthode dans Project Server 2010. Si un champ personnalisé ou un indicateur graphique est calculé par une formule, la méthode ReadCustomFieldsByMdPropUids2 convertit des formules dans les renvoyé CustomFieldDataSet dans un format qui varie selon les paramètres régionaux spécifiés dans le panneau Options régionales et linguistiques de l'ordinateur qui exécute Project Server. Comparativement, la méthode ReadCustomFieldsByMdPropUids renvoie une CustomFieldDataSet où les formules sont indépendants des paramètres régionaux.

Autorisations Project Server

Autorisation

Description

LogOnToProjectServerFromProjectProfessional

Permet à un utilisateur de charger le modèle global d'entreprise. Autorisation globale.

ManageEnterpriseCustomFields

Permet à un utilisateur de modifier les définitions des champs personnalisés d'entreprise et les valeurs de table de choix. Autorisation globale.

ManageUsersAndGroups

Permet à un utilisateur de modifier les définitions des champs personnalisés d'entreprise et les valeurs de table de choix. Autorisation globale.

NewProject

Permet à un utilisateur Ajouter un nouveau projet à la base de données Project Server. Autorisation globale.

ViewResourceCenter

Autorise un utilisateur à accéder au centre de ressources et d'afficher des données d'allocation de ressources. Autorisation globale.

ViewResourcePlan

Permet à un utilisateur d'accéder à la page Plan de ressources. Autorisation globale.

ManagePortfolioAnalyses

Permet à un utilisateur de créer des analyses de portefeuilles. Autorisation globale.

Exemples

L'exemple suivant utilise ReadCustomFieldsByMdPropUids et ReadCustomFieldsByMdPropUids2 pour lire un champ personnalisé, puis écrit le contenu de customFieldDSCustomFieldDataSet.xml et CustomFieldDataSet2.xml, respectivement. À l'exception de MD_PROP_FORMULA, les deux méthodes retournent les mêmes données.

For more information, including a procedure that shows how to use Project Web App and Project Professionnel 2010 with the same formula, see Using Formulas and Graphical Indicators with Custom Fields.

Le champ de formule MD_PROP_FORMULA retourné par ReadCustomFieldsByMdPropUids dépend de paramètres régionaux (langue du serveur et l'installation de Project) et est tel qu'indiqué dans le code suivant.

<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>

Le champ de formule MD_PROP_FORMULA retourné par ReadCustomFieldsByMdPropUids2 (comme illustré dans le code suivant) est indépendant des paramètres régionaux. Il fonctionne de la même manière sur les installations de langue différente. Pour cette raison, la méthode ReadCustomFieldsByMdPropUids2 est préférée via la méthode 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>

En outre, l'exemple modifie la formule et appelle la méthode UpdateCustomFields2 pour mettre à jour le champ personnalisé et UpdatedCustomFieldData.xml puis écrit le groupe de données mis à jour

Il appelle le CheckInCustomFields à vérifier dans le champ personnalisé après la modification et appelle la CheckOutCustomFields pour extraire les champs personnalisés avant de les modifier.

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 Prerequisites for WCF-Based Code Samples.

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);
        }

    }
}

Le jeu de données mis à jour, avec le champ de formule modifiée MD_PROP_FORMULA, est écrit dans UpdatedCustomFieldData.xml et tel qu'indiqué dans le code suivant.

<?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>

Voir aussi

Référence

CustomFields classe

CustomFields - Membres

WebSvcCustomFields - Espace de noms

ReadCustomFieldsByMdPropUids([], Boolean)