Динамическая загрузка свойств проекта через CSOM

Я пытаюсь загрузить наши проекты из онлайн-проекта в приложение.NET, в то время как я могу загружать проекты, но у меня возникают проблемы с загрузкой всех нужных мне столбцов. Я знаю, что могу указать столбцы, которые я хочу загрузить, используя include, но я хотел иметь возможность использовать список столбцов, которые могут генерироваться динамически.

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

    static void Main(string[] args)
    {
        ProjectContext pc = getProjCtxt();

        pc.Load(pc.Projects);
        pc.ExecuteQuery();
        ColumnNames fldList = new ColumnNames();
        var enumerator = pc.Projects.GetEnumerator();

        while (enumerator.MoveNext()) {
            var p2 = enumerator.Current;
            pc.Load(p2);
            pc.ExecuteQuery();
            Console.WriteLine(p2.FinishDate);
        }

        foreach (PublishedProject p in pc.Projects)
        {
            var pubProj = p.IncludeCustomFields;

            pc.Load(pubProj);

            pc.ExecuteQuery();

            //Dictionary<string, object> projDict = pubProj.FieldValues;
            var type = p.GetType();

            foreach(ColumnNames.colInfo ci in fldList.impFields)
            {
                if (type.GetProperty(ci.FieldName) != null)
                {
                    Console.WriteLine(p.FinishDate);
                    Console.WriteLine(type.GetProperty(ci.FieldName).GetValue(p, null));
                }

            }
         }
     }

Я получаю сообщение об ошибке FinishDate, потому что он не был хорошо инициализирован, как инициализировать все свойства задачи / проекта, чтобы я мог работать с ними, если программа не знает заранее, какие столбцы она ищет.

Есть ли способ создать строку и передать ее онлайн-проекту, чтобы сообщить, какие свойства нужно инициализировать?

1 ответ

Так что я нашел ответ похоронен в конце концов. https://sharepoint.stackexchange.com/questions/89634/syntax-for-including-fields-dynamically-in-csom-query

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

static void Main(string[] args)
    {
        ProjectContext pc = getProjCtxt();
        ColumnNames fldList = new ColumnNames();

        var q = from ColumnNames.colInfo fld in fldList.impFields
                where fld.CustomField == false
                select fld;

        Console.WriteLine(q.Count());

        foreach(ColumnNames.colInfo dynField in q){
            pc.Load(pc.Projects, p => p.Include(pj => pj[dynField.FieldName]));
        }
        pc.Load(pc.Projects, p => p.Include(pj => pj.IncludeCustomFields));
        pc.ExecuteQuery();
    }
Другие вопросы по тегам