0

SharePoint ClientObject Model の実行中に次のエラーが発生しました。私は自分のコードを調べて、ロードするものを見逃していないかどうかを確認しましたが、表示されませんでした.

「プロセスが終了しました: プロパティまたはフィールドが初期化されていません。要求されていないか、要求が実行されていません。明示的に要求する必要がある場合があります。」

これについて数時間検索した後、何が欠けているのかわかりません。

以下は私のコードです。誰でも助けてくれることを願っています。

    public static void UpdatePackageStatus(string Teamsite, string Libname, string Packagename, string User, string Password, string Domain, string PackageStatus, string DeploymentSucceeded, string query)
        {
            using(clientOM.ClientContext Ctx = new clientOM.ClientContext(Teamsite))
            {

                Ctx.Credentials = new System.Net.NetworkCredential(User, Password, Domain);
                clientOM.Web Web = Ctx.Web;
                Ctx.Load(Web);
                Ctx.ExecuteQuery();

                clientOM.List list = Web.Lists.GetByTitle(Libname);
                Ctx.Load(list);
                Ctx.ExecuteQuery();


                clientOM.CamlQuery CamlQuery = new clientOM.CamlQuery();
                CamlQuery.ViewXml = query;

                clientOM.ListItemCollection Items = list.GetItems(CamlQuery);
                Ctx.Load(Items);
                Ctx.ExecuteQuery();

                if(Items.Count > 0)
                {
                    clientOM.ListItem Item = Items.GetById(Items[0].Id);;
                    Ctx.Load(Item);
                    Ctx.ExecuteQuery();
                    if(Item.DisplayName == Packagename)
                    {
                    Item[PackageStatus] = DeploymentSucceeded; 
                    Item.Update(); 
                    Ctx.ExecuteQuery(); 
                    }
                }   
            }
        }
4

2 に答える 2

1

DisplayName、Id、PackageStatus などの使用されるすべてのフィールドは、手動で指定する必要があります。CAML クエリを使用して、次のように記述できます。

string queryText = @"<View>
    <Query>
        <Where>
        <Eq>
            <FieldRef Name='{0}'/>
            <Value Type='Text'>{1}</Value>
        </Eq>
        </Where>
    </Query>
    </View>";
CamlQuery query = new CamlQuery();
query.ViewXml = string.Format(queryText, 'DisplayName', Packagename); //FieldRef = internal field name
ListItemCollection listItems = list.GetItems(query);
Ctx.Load(listItems, items => items.Include(item => item[PackageStatus]);
Ctx.ExecuteQuery();
if (listItems.Count > 0)
{
    listItems[0][PackageStatus] = DeploymentSucceeded;
    Item.Update(); 
    Ctx.ExecuteQuery();
}
于 2013-11-15T06:51:19.680 に答える
0

修正が表示されます。

Item.DisplayName を使用する代わりに、File オブジェクトを使用できます。File を使用し、他のプロパティのように load(File) でインスタンス化すると機能します。

    clientOM.File file = Item.File;
    Ctx.Load(file);
    Ctx.ExecuteQuery();

    if(file.Name == Packagename)
    {
    Item[PackageStatus] = DeploymentSucceeded; 
    Item.Update(); 
    Ctx.ExecuteQuery(); 
    }
于 2013-11-15T18:09:06.933 に答える