Как получить значение задачи настраиваемого поля в CSOM Project Server - PullRequest
1 голос
/ 12 марта 2019

Я работаю над консольным приложением для сервера проекта.Я могу прочитать название и процент работы каждого задания, связанного с проектом.Каждое задание имеет настраиваемое поле с уникальным идентификатором. Это выглядит так.

Как получить значение уникального идентификатора?например, 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

Я также знаю InternalName настраиваемого поля, если это помогает

РЕДАКТИРОВАТЬ: я добавил в этом примере но я получаю только значения первого ряда.Есть идеи, как сделать цикл для каждой строки?

1 Ответ

0 голосов
/ 14 марта 2019

Вы получаете значения только из первой строки, потому что 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);

   }
...