Project.CustomFields 属性
获取项目的集合为项目设置了值的自定义字段。
命名空间: Microsoft.ProjectServer.Client
程序集: Microsoft.ProjectServer.Client(位于 Microsoft.ProjectServer.Client.dll 中)
语法
声明
<RemoteAttribute> _
Public ReadOnly Property CustomFields As CustomFieldCollection
Get
用法
Dim instance As Project
Dim value As CustomFieldCollection
value = instance.CustomFields
[RemoteAttribute]
public CustomFieldCollection CustomFields { get; }
属性值
类型:Microsoft.ProjectServer.Client.CustomFieldCollection
CustomField对象的集合。
备注
CustomFields属性不包括项目没有在项目中设置的值的自定义字段。例如,如果项目不包含名为 SomeText 的项目文本自定义字段的值,该项目的CustomFields集合中不包含该自定义字段。
示例
下面的代码示例查询其集合的自定义字段的每个已发布的企业项目。它列出为键 / 值对中的键的 GUID 和名称的项目的名称和值的每个自定义字段,以及项目中每个自定义字段的内部名称。如果自定义字段使用查阅表格, FieldValues项包含查阅表格项的内部的名称。如果自定义字段的值的文本字段,该示例将列出的值和该项目中的自定义字段的每个查阅表格项的内部名称。如果自定义域没有使用查阅表格,则值为简单的自定义字段值。
自定义字段的内部名称是"Custom_ [GUID]",例如, Custom_9d77d62aa92e4d40adc8446c90eb7456的值的字符串。查阅表格项的内部名称是"Entry_ [GUID]",例如, 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);
}
}
}
例如,名为 TestProject9 的项目都有项目部门自定义域值、 多值文本自定义域查阅表格项的三个值,一个简单的文本的自定义字段,和日期自定义域。因为项目部门是内置自定义字段,则 GUID 的项目部门的自定义字段的默认Project Web App实例是9d77d62a-a92e-4d40-adc8-446c90eb7456。以下是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