アプリケーションから共有ポイントのリスト項目を更新するための構文を整理するのに助けが必要です。状況の概要は次のとおりです。
この sp サイトには 2 つのリストがあります。1 つのリストは製品リストで、2 つ目のリストは価格です。ただし、これらのリストの設定方法は 1 対多のスキームです。1 つの製品に多数の価格設定レコードを含めることができます。製品には、複数の値をサポートするルックアップ フィールドである列があります。
REST と oData を使用すると、価格情報を簡単に照会して取得できるようになりましたが、製品レコードを更新して価格を追加する必要がある場合に問題が発生します。
通常のルックアップ フィールドでは、通常、オブジェクトの ID プロパティを設定してから、そのリストの update メソッドと savechanges メソッドを呼び出します。ただし、複数のレコードをサポートする価格列では、設定する ID はなく、フィールドは並べ替えの配列です。価格設定オブジェクト (リスト アイテム) を追加し、更新して savechanges を実行しても、実際には保存されません。エラーはスローされませんが、リストを表示すると実際には保存されません。
製品に価格ルックアップを追加するにはどうすればよいですか?
各価格を照会し、テストのために以下の製品に初期価格を追加する小さなメソッドを作成しました。
InventoryCatalogDataContext dc = new InventoryCatalogDataContext(_pushinTinSvc);
dc.Credentials = CredentialCache.DefaultCredentials;
List<PricingItem> pricing = (from q in dc.Pricing
select q).ToList<PricingItem>();
foreach (PricingItem price in pricing)
{
var query = (DataServiceQuery<ProductsItem>)
dc.Products
.Expand("Pricing")
.Where(p => p.Id.Equals(price.StockCodeId));
List<ProductsItem> prods = query.ToList<ProductsItem>();
ProductsItem product = prods[0];
product.Pricing.Add(price);
dc.UpdateObject(product);
}
try
{
dc.SaveChanges();
}
catch (Exception ex)
{
string stopHere = ex.Message;
}
私が何か間違ったことをしているのか、それともバグなのかはわかりません。SaveChanges の後にアイテムを調べると、アイテムにはまだ価格アイテム ルックアップが添付されており、カウント 1 が示されています。コード ブロックの最後で、製品を再クエリすると、その時点でまだ価格が添付されています。ただし、メソッドが終了して UI に戻ると、価格は添付されなくなり、sharepoint のリストを見るとフィールドは空になりますが、バージョンは増加します。だからちょっと寂しい…。