Compartir a través de


de la propiedad Project.CustomFields

Obtiene la colección de proyecto los campos personalizados que tienen valores establecidos para el proyecto.

Espacio de nombres:  Microsoft.ProjectServer.Client
Ensamblado:  Microsoft.ProjectServer.Client (en Microsoft.ProjectServer.Client.dll)

Sintaxis

'Declaración
<RemoteAttribute> _
Public ReadOnly Property CustomFields As CustomFieldCollection
    Get
'Uso
Dim instance As Project
Dim value As CustomFieldCollection

value = instance.CustomFields
[RemoteAttribute]
public CustomFieldCollection CustomFields { get; }

Valor de propiedad

Tipo: Microsoft.ProjectServer.Client.CustomFieldCollection
Colección de objetos CustomField .

Comentarios

La propiedad CustomFields no incluye los campos personalizados de proyectos que no tienen un valor establecido en el proyecto. Por ejemplo, si un proyecto no contiene un valor para un campo personalizado de texto de proyecto denominado SomeText, ese campo personalizado no se incluye en la colección CustomFields para ese proyecto.

Ejemplos

En el ejemplo de código siguiente se consulta cada proyecto de empresa publicado para su colección de campos personalizados. Muestra el GUID y el nombre del proyecto, el nombre y el valor de cada campo personalizado y el nombre interno de cada campo personalizado del proyecto como la clave en un par de clave y valor. Si el campo usa una tabla de consulta, el elemento FieldValues contiene el nombre interno de la entrada de la tabla de consulta. Si el campo personalizado es un campo de texto con varios valores, el ejemplo muestra el valor y el nombre interno de cada entrada de la tabla de consulta para el campo personalizado en el proyecto. Si el campo personalizado no utiliza una tabla de búsqueda, el valor es simplemente el valor del campo personalizado.

El nombre interno de un campo personalizado es una cadena con el valor "Custom_ de [GUID]", por ejemplo, Custom_9d77d62aa92e4d40adc8446c90eb7456. El nombre interno de una entrada de tabla de búsqueda es una cadena con el valor "Entry_ de [GUID]", por ejemplo, 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);
        }
    }
}

Por ejemplo, un proyecto denominado TestProject9 tiene un valor de campo personalizado de departamentos de los proyectos, un campo personalizado de texto de múltiples valores con tres valores de entrada de tabla de búsqueda, un campo de texto personalizado y un campo de fecha personalizado. Como departamentos de los proyectos es un campo personalizado incorporado, el GUID para el campo personalizado de departamentos de los proyectos de forma predeterminada en las instancias de Project Web App es 9d77d62a-a92e-4d40-adc8-446c90eb7456. A continuación es el resultado de la aplicación de ejemplo de GetProjectFieldValues :

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

Vea también

Referencia

clase Project

Miembros Project

Espacio de nombres Microsoft.ProjectServer.Client