2016-06-20 8 views
0

私のプロジェクトでは、複数の見積もりを作成して製品を追加する必要があります。
パフォーマンス上の理由から(約5000引用符)私は "ExecuteMultipleRequest()"を使用しています。Dynamics CRM 2016 C#まだ既存のエンティティのIDを使用しています

これは私が持っているものについてです:

var quote = new Quote 
{ 
    QuoteNumber = "123", 
    Name = "test123", 
    PriceLevelId = new EntityReference(PriceLevel.EntityLogicalName, Pricelevel.Id), 
    CustomerId = new EntityReference(Account.EntityLogicalName, Customer.Id), 
}; 
_requests.Requests.Add(new CreateRequest { Target = quote }); 

var quoteDetail = new QuoteDetail 
{ 
    QuoteId = new EntityReference(Quote.EntityLogicalName, quote.Id), 
    ProductId = new EntityReference(Product.EntityLogicalName, product.Id), 
    IsPriceOverridden = true, 
    PricePerUnit = new Money(20), 
    Quantity = Convert.ToDecimal(5), 
}; 
_requests.Requests.Add(new CreateRequest { Target = quoteDetail }); 

私の問題はquote.Idです。サーバーが要求を処理して見積もりを作成するまでは空であることはわかっています。

quotedetailにquotes new idを使用するようサーバーに指示する方法はありますか?
引用符を作成してすべての詳細を作成する唯一の方法はありますか?
このようにすれば、パフォーマンスを向上させるために何ができますか?

+1

あなたが実際にそれを作成する前に、手動でquote.id設定することができ、およびCRMが代わりにID自体を生成する、そのIDを使用します。マイクロソフトでは最適化のために推奨されていませんが。 – tdgtyugdyugdrugdr

答えて

0

明示的にCreateRequestsを送信する代わりに、OrganizationServiceContextを使用するようにコードを変更すると、オブジェクトをCRMに送信する前にオブジェクトの変更をローカルで追跡できます。 OrganizationServiceContextを使用している場合

、あなたがオブジェクトを追加し、別のものにそれをリンクするために、両方のAddRelatedObjectを使用することができます。

はOrganizationServiceContextに関連するエンティティを追加し、両者の関係を定義する リンクを作成します単一の要求 のエンティティ

または手動でAddObjectAddLinkを呼び出すことができます。

あなたは最終的なコードは次のようになります。

using (var context = new OrganizationServiceContext(_serviceProxy)) 
{ 
    var quote = new Quote 
    { 
     QuoteNumber = "123", 
     Name = "test123", 
     PriceLevelId = new EntityReference(PriceLevel.EntityLogicalName, pricelevel.Id), 
     CustomerId = new EntityReference(Account.EntityLogicalName, customer.Id), 
    }; 
    context.AddObject(quote); 

    var quoteDetail = new QuoteDetail 
    { 
     ProductId = new EntityReference(Product.EntityLogicalName, product.Id), 
     IsPriceOverridden = true, 
     PricePerUnit = new Money(20), 
     Quantity = Convert.ToDecimal(5), 
    }; 
    context.AddRelatedObject(quote, new Relationship("quote_details"), quoteDetail); 

    context.SaveChanges(); 
} 
関連する問題