DraftProject.FieldValues プロパティ
下書きプロジェクト用のカスタム フィールドの値を取得します。
名前空間: Microsoft.ProjectServer.Client
アセンブリ: Microsoft.ProjectServer.Client (Microsoft.ProjectServer.Client.dll 内)
構文
'宣言
Public ReadOnly Property FieldValues As Dictionary(Of String, Object)
Get
'使用
Dim instance As DraftProject
Dim value As Dictionary(Of String, Object)
value = instance.FieldValues
public Dictionary<string, Object> FieldValues { get; }
プロパティ値
型: System.Collections.Generic.Dictionary<String, Object>
ユーザー設定フィールドの値、キーが、内部のユーザー設定フィールドの名前と値のキーと値のペアのセットは、カスタム フィールドの値またはルックアップ テーブルのエントリの内部名です。
例
コード例を次に示します、指定したエンタープライズ プロジェクトをチェック アウトし、し下書きプロジェクトのユーザー設定フィールドのコレクションを照会します。コード例は、キーと値のペアのキーとして 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;
using Microsoft.SharePoint.Client;
namespace GetDraftProjectFieldValues
{
class Program
{
private const string pwaPath = "https://ServerName/pwa"; // Change the path for Project Web App.
private static string projName = string.Empty;
// Set the Project Server client context.
private static ProjectContext projContext;
static void Main(string[] args)
{
if (!ParseCommandLine(args))
{
Usage();
ExitApp(string.Empty);
}
Dictionary<string, object> projDict = new Dictionary<string, object>();
projContext = new ProjectContext(pwaPath);
// Get the list of published projects in Project Web App.
var pubProjects = projContext.LoadQuery(projContext.Projects
.Where(p => p.IsEnterpriseProject == true
&& p.Name == projName));
projContext.ExecuteQuery();
if (pubProjects.Count() < 1)
{
ExitApp("No enterprise project name: " + projName);
}
Console.WriteLine("\t\tDraft project ID\t:\tProject name");
foreach (PublishedProject pubProj in pubProjects)
{
// Check out the project.
if (!pubProj.IsCheckedOut)
{
DraftProject draftProj = pubProj.CheckOut().IncludeCustomFields;
projContext.Load(draftProj);
projContext.Load(draftProj.IncludeCustomFields);
projContext.ExecuteQuery();
Console.WriteLine("\n{0} :\t{1}", draftProj.Id.ToString(), draftProj.Name);
projDict = draftProj.FieldValues;
// Initialize 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(draftProj.CustomFields
.Where(cf => cf.InternalName == keyStr));
projContext.ExecuteQuery();
WriteCustomFieldName(projCFs.First().Name);
Console.WriteLine("; FieldType = {0};\n\tInternalName = {1}",
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;
WriteLookupTableName(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.
}
// Check in and publish the project.
draftProj.Publish(true);
projContext.ExecuteQuery();
}
ExitApp(string.Empty);
}
}
private static void WriteCustomFieldName(string cfName)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("\n Custom field: '{0}'", cfName);
Console.ResetColor();
}
private static void WriteLookupTableName(string lutName)
{
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("\tLookup table: {0}", lutName);
Console.ResetColor();
}
// Parse the command line. Return true if there are no errors.
private static bool ParseCommandLine(string[] args)
{
bool error = false;
int argsLen = args.Length;
try
{
for (int i = 0; i < argsLen; i++)
{
if (error) break;
if (args[i].StartsWith("-") || args[i].StartsWith("/"))
args[i] = "*" + args[i].Substring(1).ToLower();
switch (args[i])
{
case "*projname":
case "*n":
if (++i >= argsLen) return false;
projName = args[i];
break;
//case "*timeout":
//case "*t":
// if (++i >= argsLen) return false;
// timeoutSeconds = Convert.ToInt32(args[i]);
// break;
case "*?":
default:
error = true;
break;
}
}
}
catch (FormatException)
{
error = true;
}
if (string.IsNullOrEmpty(projName)) error = true;
return !error;
}
private static void Usage()
{
string example = "Usage: -projName | -p \"Project name\"";
example += "\nExample: -p \"My New Project\"";
Console.WriteLine(example);
}
private static void ExitApp(string reason)
{
if (reason != string.Empty) Console.WriteLine(reason);
Console.Write("\nPress any key to exit... ");
Console.ReadKey(true);
Environment.Exit(0);
}
}
}
たとえば、TestProject9 という名前のプロジェクトが、プロジェクトの部署ユーザー設定フィールドの値を複数値テキスト ユーザー設定フィールド参照テーブルのエントリの 3 つの値、単純なテキストのユーザー設定フィールドおよびユーザー設定の日付フィールドです。プロジェクトの部門は、組み込みのユーザー設定フィールド、プロジェクトの部署ユーザー設定フィールドの GUID を既定のためのProject Web Appのインスタンスは9d77d62a-a92e-4d40-adc8-446c90eb7456です。GetProjectFieldValuesサンプル アプリケーションの出力を次に示します。
Draft project ID : Project name
b846e947-29e0-43eb-b5c6-5ddeaf08d5c0 : CSOM Project9
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
Press any key to exit...