我正在为项目服务器使用控制台应用程序。 Atm我可以读取项目中每个任务的名称和工作百分比。每个任务都有一个具有唯一ID的自定义字段。 It looks like this.
如何获取唯一ID的值?例如84
这是我列出任务名称和工作百分比的代码:
var projColl = projContext.LoadQuery(projContext.Projects
.Where(p => p.Name == projectName)
.Include(
p => p.Name,
p => p.Tasks,
p => p.Tasks.Include(
t => t.Name,
t => t.PercentComplete,
t => t.CustomFields
)
)
);
projContext.ExecuteQuery();
PublishedProject theProj = projColl.First();
PublishedTaskCollection taskColl = theProj.Tasks;
PublishedTask theTask = taskColl.First();
CustomFieldCollection LCFColl = theTask.CustomFields;
Dictionary<string, object> taskCF_Dict = theTask.FieldValues;
int k = 1; //Task counter.
foreach (PublishedTask t in taskColl)
{
Console.WriteLine("\t{0}. {1, -15} {2,-30}{3}", k++, t.Name, t.PercentComplete);
}
我尝试使用Console.WriteLine("\t{0}. {1, -15} {2,-30}{3}", k++, t.Name, t.PercentComplete,t.CustomFields);
但我只能得到
Microsoft.ProjectServer.Client.CustomFieldCollection
如果有帮助,我也知道customfield的InternalName
编辑:我添加了this exsample,但是我只得到第一行的值。 任何想法如何循环每一行?
答案 0 :(得分:0)
您仅从第一行获取值,因为LCFColl
被定义为对象变量theTask
的自定义字段,而不是您在循环中使用的变量t
的自定义字段。将LCFColl
的声明移到任务循环内:
foreach (PublishedTask t in taskColl)
{
CustomFieldCollection LCFColl = t.CustomFields;
foreach (CustomField cf in LCFColl)
{
// do something with the custom fields
}
Console.WriteLine("\t{0}. {1, -15} {2,-30}{3}", k++, t.Name, t.PercentComplete);
}