2

プラグインを使用して新しい製品を作成しようとしていますが、次の例外が発生します。

System.Collections.Generic.KeyNotFoundException: 指定されたキーがディクショナリに存在しませんでした。

これは、製品を作成するためのコードです

EntityReference ugRef = new EntityReference(ug.LogicalName, ug.UoMScheduleId.Value);
EntityReference uRef = new EntityReference(u.LogicalName, u.UoMId.Value);   
Product product = new Product()
{
  Name = pName,
  ProductNumber = pNumber,
  QuantityDecimal = 2,
  DefaultUoMScheduleId = ugRef,
  DefaultUoMId = uRef
}; 
service.Create(product);

すべての変数がテストされ、すべて値があります。単位は単位グループに対して正しいです-どちらかを変更すると、同じように例外が発生します。

コードが次のように変更されると、予想される姓と名を持つ素敵なリードがあるため、問題は間違いなくこのコードにあります。

EntityReference ugRef = new EntityReference(ug.LogicalName, ug.UoMScheduleId.Value);
EntityReference uRef = new EntityReference(u.LogicalName, u.UoMId.Value);
Lead l = new Lead();
l.FirstName = uRef.Id.ToString();
l.LastName = uRef.LogicalName;
service.Create(l);
/*
  Product product = new Product()
  {
    Name = (String)staged.Attributes["wishlist_name"],
    ProductNumber = (String)staged.Attributes["wishlist_barcode"],
    QuantityDecimal = 2,
    DefaultUoMScheduleId = ugRef,
    DefaultUoMId = uRef
  }; 
  service.Create(product);
*/

pNamepNumberは文字列です。
uugUnitUnit Groupです。

コードを次のように変更しました。

            query = new QueryByAttribute("uom");
            query.ColumnSet = new ColumnSet("name", "uomscheduleid");
            query.Attributes.AddRange("name");
            query.Values.AddRange("1");
            UoM unit = (UoM)service.RetrieveMultiple(query).Entities[0];                    
            Product newProduct = new Product
            {

                ProductNumber = "1t2y3u",
                Name = "Example Banana Product",
                QuantityDecimal = 1,
                DefaultUoMScheduleId = unit.UoMScheduleId,
                DefaultUoMId = unit.ToEntityReference()
            };
            service.Create(newProduct);

同じエラーがスローされます。

私はこれでモアを剥ぎ取ろうとしています。

4

1 に答える 1

2

見るべきいくつかのこと。

  1. 最初の例でコードを単純化しようとしたように見えますが、バグの原因を取り除いた可能性がありますが、幸いなことに、最後の例にそれを追加しました:)ステージングには が含まれていないと推測している"wishlist_name"ため、あなたが見るエラー。GetAttributeValueEntity クラスで定義されている型付きメソッドを常に使用する必要がありますstaged.GetAttributeValue<String>("wishlist_name")。null チェックを実行し、型のデフォルトを返します。

  2. 他のすべてのプラグインをチェックして、製品の作成時に別のプラグインが起動されていないかどうかを確認します。これは、DefaultUoMScheduleId または DefaultUoMId が設定されている場合に追加のロジックを実行している可能性があります。このプラグインで作成すると、別の「ネストされた」プラグインからエラーが発生する可能性があります。

  3. 一時的なエンティティ参照変数を作成する代わりに、エンティティ クラスで定義された ToEntityReference() メソッドを使用します。これにより、コードが少しきれいに見えます。

        Product product = new Product()
        {
            Name = (String)staged.Attributes["wishlist_name"],
            ProductNumber = (String)staged.Attributes["wishlist_barcode"],
            QuantityDecimal = 2,
            DefaultUoMScheduleId = ug.ToEntityReference(),
            DefaultUoMId = u.ToEntityReference()
    
        }; 
    
于 2013-01-28T14:57:17.113 に答える