gpt4 book ai didi

c# - 通过 CSOM 动态加载项目联机属性

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:48 25 4
gpt4 key购买 nike

我正在尝试将我们的项目从在线项目加载到 .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

还设法简化了 vode 并对其进行了清理。以及确保我只在显式属性列表中包含非自定义字段,因为 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();
}

关于c# - 通过 CSOM 动态加载项目联机属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33291022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com