如何在CSOM Project Server中获得自定义字段任务的值

时间:2019-03-12 09:18:17

标签: c# csom ms-project project-server

我正在为项目服务器使用控制台应用程序。 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,但是我只得到第一行的值。 任何想法如何循环每一行?

1 个答案:

答案 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);

   }