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

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

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

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

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


person T.Steph    schedule 12.03.2019    source источник
comment
Вы получаете значения только из первой строки, потому что LCFColl определяется как настраиваемые поля theTask, а не как переменная t, которую вы используете внутри своего цикла. Начните с перемещения объявления LCFColl внутри цикла задач: CustomFieldCollection LCFColl = t.CustomFields;.   -  person Rachel Hettinger    schedule 13.03.2019
comment
Спасибо, что помогло. Теперь мне просто нужно как-то получить одно конкретное настраиваемое поле   -  person T.Steph    schedule 13.03.2019
comment
Заставил работать так, как я хочу. Благодарю вас!   -  person T.Steph    schedule 13.03.2019
comment
Отлично. Я переместил комментарий в ответ, чтобы вы могли принять / отметить его как лучший ответ. Таким образом, это может быть полезно другим людям, которые ищут ответы на вопросы.   -  person Rachel Hettinger    schedule 14.03.2019


Ответы (1)


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

   }
person Rachel Hettinger    schedule 14.03.2019