1

フィールドを更新するために使用する必要があるデータを取得するためにクエリ式を使用して、請求書の各項目で更新するフィールドを取得しようとしています (既存のものを上書きすることなく)。

これまでのところ、項目が 1 つしかない場合でも問題なく機能させることができました。しかし、これを複数の項目に対してテストするたびに、「指定されたキーが辞書に存在しませんでした」というメッセージが表示されます。エラー。

正しい方向への助けやナッジはありますか?

    QueryExpression lineitem = new QueryExpression("invoicedetail");
    lineitem.ColumnSet = new ColumnSet("quantity", "productid", "description");
    lineitem.Criteria.AddCondition("invoiceid", ConditionOperator.Equal, invoiceid);

    EntityCollection results = server.RetrieveMultiple(lineitem);
    Invoice.Attributes["aspb_bookmarksandk12educational"] = "Purchases";
    Invoice.Attributes["aspb_bookmarksandk12educational"] += "\n";
    Invoice.Attributes["aspb_bookmarksandk12educational"] += "Product" + "        " + "Quantity";
    Invoice.Attributes["aspb_bookmarksandk12educational"] += "\n";

    foreach (var a in results.Entities)
            {
    string name = a.Attributes["description"].ToString();
    string quantity = a.Attributes["quantity"].ToString();
    Invoice.Attributes["aspb_bookmarksandk12educational"] += " " + name + " ";
    Invoice.Attributes["aspb_bookmarksandk12educational"] += quantity;
    Invoice.Attributes["aspb_bookmarksandk12educational"] += "\n";
    }
4

1 に答える 1

1
"The given key was not present in the dictionary."

返された複数のエンティティではなく、属性値にアクセスしようとしている方法に問題があることを示唆しています。属性値を取得しようとするときは、次のように値を読み取る前に属性が存在するかどうかを確認してください。

if (a.Attributes.ContainsKey("description"))
{
    var name = a.Attributes["description"] as string;
}

または、SDK 拡張メソッドを使用してチェックを行い、次のようにデフォルト値を返すことをお勧めします。

var name = a.GetAttributeValue<string>("description");
var quantity = a.GetAttributeValue<decimal>("quantity");
于 2016-06-29T18:03:47.257 に答える