Freigeben über


PublishedProject.FieldValues-Eigenschaft

Ruft die benutzerdefinierten Feldwerte für das veröffentlichte Projekt ab.

Namespace:  Microsoft.ProjectServer.Client
Assembly:  Microsoft.ProjectServer.Client (in Microsoft.ProjectServer.Client.dll)

Syntax

'Declaration
Public ReadOnly Property FieldValues As Dictionary(Of String, Object)
    Get
'Usage
Dim instance As PublishedProject
Dim value As Dictionary(Of String, Object)

value = instance.FieldValues
public Dictionary<string, Object> FieldValues { get; }

Eigenschaftswert

Typ: System.Collections.Generic.Dictionary<String, Object>
Eine Reihe von Schlüssel-Wert-Paare für die Werte für benutzerdefinierte Felder, wobei der Schlüssel ist der Name des internen benutzerdefinierten Felds und der Wert ist der Wert des benutzerdefinierten Felds oder den internen Namen einer Nachschlagetabelleneintrags.

Beispiele

Im folgenden Codebeispiel wird fragt jedes veröffentlichten Enterprise-Projekt für die Auflistung von benutzerdefinierten Feldern. Die GUID und Namen des Projekts, Name und Wert jedes benutzerdefinierten Felds und den internen Namen jedes benutzerdefinierten Felds im Projekt als Schlüssel im Schlüssel-Wert-Paar aufgeführt. Wenn das benutzerdefinierte Feld eine Nachschlagetabelle verwendet wird, enthält das Element FieldValues der interne Name des Nachschlagetabelleneintrags. Wenn das benutzerdefinierte Feld eine mehrwertige Textfeld ist, enthält das Beispiel Wert und interne Name des einzelnen Nachschlagetabelleneintrags für das benutzerdefinierte Feld in das Projekt. Wenn das benutzerdefinierte Feld eine Nachschlagetabelle nicht verwendet wird, ist der Wert einfach der Wert des benutzerdefinierten Felds.

Der interne Name eines benutzerdefinierten Felds ist eine Zeichenfolge mit dem Wert "Custom_ [GUID]", beispielsweise Custom_9d77d62aa92e4d40adc8446c90eb7456. Der interne Name des ein Nachschlagetabelleneintrags ist eine Zeichenfolge mit dem Wert "Entry_ [GUID]", beispielsweise Entry_4a2750309d91e21193f90021704e28a0.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.ProjectServer.Client;

namespace GetProjectFieldValues
{
    class Program
    {
        private const string pwaPath = "https://ServerName/pwa";    // Change the path for Project Web App.

        // Set the Project Server client context.
        private static ProjectContext projContext;

        static void Main(string[] args)
        {
            projContext = new ProjectContext(pwaPath);

            // Get the list of published projects in Project Web App.
            projContext.Load(projContext.Projects);
            projContext.ExecuteQuery();

            Console.WriteLine("\t\tProject ID\t     :\tProject name");

            if (projContext.Projects.Count > 0)
            {
                for (int i = 0; i < projContext.Projects.Count; i++)
                {
                    var pubProj = projContext.Projects[i].IncludeCustomFields;
                    projContext.Load(pubProj);
                    projContext.Load(pubProj.CustomFields);
                    projContext.ExecuteQuery();

                    Console.WriteLine("\n{0} :\t{1}", pubProj.Id.ToString(), pubProj.Name);
                    int numCFs = pubProj.CustomFields.Count;
                    Console.WriteLine("Number of custom fields: {0}", numCFs.ToString());

                    Dictionary<string, object> projDict = pubProj.FieldValues;

                    // Variables to compare with custom field types:
                    string textValue = "";                  // TEXT - no lookup table
                    String[] lutTextValues = { "" };        // TEXT - lookup table
                    DateTime dateValue = DateTime.MinValue; // DATE - no lookup table

                    foreach (KeyValuePair<string, object> kvp in projDict)
                    {
                        object oVal = kvp.Value;
                        string keyStr = kvp.Key;

                        var projCFs = projContext.LoadQuery(pubProj.CustomFields
                            .Where(cf => cf.InternalName == keyStr));
                        projContext.ExecuteQuery();

                        Console.WriteLine("\n    Custom field: '{0}'; FieldType = {1};\n\tInternalName = {2}",
                            projCFs.First().Name, projCFs.First().FieldType.ToString(), keyStr);

                        // Check whether the custom field is a simple text field.
                        if (object.ReferenceEquals(oVal.GetType(), textValue.GetType()))
                        {
                            textValue = (string)oVal;
                            Console.WriteLine("\tSingle-line string value = {0}", textValue.ToString());
                        }
                        // Check whether the custom field is a text (or multivalue text) field from a lookup table.
                        else if (object.ReferenceEquals(oVal.GetType(), lutTextValues.GetType()))
                        {
                            projContext.Load(projCFs.First().LookupTable);
                            projContext.ExecuteQuery();
                            string lutName = projCFs.First().LookupTable.Name;

                            Console.WriteLine("\tLookup table: {0}", lutName);

                            var luts = projContext.LoadQuery(projContext.LookupTables
                                .Where(lut => lut.Name == lutName));
                            projContext.ExecuteQuery();

                            lutTextValues = (string[])oVal;

                            for (var j = 0; j < lutTextValues.Count(); j++)
                            {
                                var entries = projContext.LoadQuery(luts.First().Entries
                                    .Where(e => e.InternalName == lutTextValues[j]));
                                projContext.ExecuteQuery();
                                Console.WriteLine("\t    Entry({0}): String value = {1};\n\t\t  InternalName = {2}",
                                    j, entries.First().FullValue, lutTextValues[j]);
                            }
                        }
                        // Check whether the custom field is a date.
                        else if (object.ReferenceEquals(oVal.GetType(), dateValue.GetType()))
                        {
                            dateValue = (DateTime)oVal;

                            Console.WriteLine("\tDate value = {0}", dateValue.ToString());
                        }
                        // Add other cases for cost, duration, flag, and number custom fields,
                        // with and without lookup tables.
                    }
                }
            }
            Console.Write("\nPress any key to exit: ");
            Console.ReadKey(false);
        }
    }
}

Ein Projekt mit dem Namen TestProject9 verfügt beispielsweise über einen benutzerdefinierten Feldwert Projektabteilungen, ein benutzerdefiniertes mehrwertige Text-Feld mit drei Nachschlagetabellenwerte Eintrag, ein benutzerdefiniertes Feld einfachen Text und ein benutzerdefiniertes Datumsfeld. Da Projektabteilungen eine integrierte GUID des benutzerdefinierten Felds, das für das benutzerdefinierte Feld Projektabteilungen in standardmäßigen Project Web App Instanzen ist 9d77d62a-a92e-4d40-adc8-446c90eb7456. Nachfolgend sehen Sie die Ausgabe des GetProjectFieldValues -Beispiel-app:

b846e947-29e0-43eb-b5c6-5ddeaf08d5c0 :  TestProject9
Number of custom fields: 4

    Custom field: 'Project Departments'; FieldType = TEXT;
        InternalName = Custom_9d77d62aa92e4d40adc8446c90eb7456
        Lookup table: Department
            Entry(0): String value = Test Dept 1;
                  InternalName = Entry_bbc07ff5b06de21193f40021704e28a0

    Custom field: 'ProjectMVText'; FieldType = TEXT;
        InternalName = Custom_9295a8759d91e21193f90021704e28a0
        Lookup table: TestTextMV
            Entry(0): String value = First.001;
                  InternalName = Entry_4a2750309d91e21193f90021704e28a0
            Entry(1): String value = Second.002;
                  InternalName = Entry_4d2750309d91e21193f90021704e28a0
            Entry(2): String value = Third;
                  InternalName = Entry_4f2750309d91e21193f90021704e28a0

    Custom field: 'Test Project Date'; FieldType = DATE;
        InternalName = Custom_37f61601a991e21193f90021704e28a0
        Date value = 3/29/2013 8:00:00 AM

    Custom field: 'Test project simple text'; FieldType = TEXT;
        InternalName = Custom_8bf7eed5cc94e21193f90021704e28a0
        Single-line string value = This is a line of text

Siehe auch

Referenz

PublishedProject Klasse

PublishedProject-Member

Microsoft.ProjectServer.Client-Namespace