通过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上得到一个错误,因为它还没有初始化好,我如何初始化任务/项目的所有属性,所以如果程序不知道它正在寻找什么列,我可以与它们一起工作。

是否有一种方法来建立一个字符串,并将其传递给在线项目,以告诉它要初始化哪些属性?

所以我最终找到了一个埋藏的答案。https://sharepoint.stackexchange.com/questions/89634/syntax-for-including-fields-dynamically-in-csom-query

也设法简化了空洞和清理它。以及确保我只包括显式属性列表中的非自定义字段,因为inclecustomfields选项带来了所有自定义字段。

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();
    }

相关内容

  • 没有找到相关文章

最新更新