2016-09-11 5 views
3

シングルリクエストで単一のエンティティを作成する方法を知っています。しかし、1つの要件は、複数のエンティティを作成することを望んでいます(私のケースでは、複数のエントリがContactSetにあります)。私は、しかし、これは動作しませんし、私は私にこれを達成するための方法を説明する任意のドキュメントを見つけることができませんでしたMicrosoft Dynamics CRM(OData)で単一の要求で複数のエンティティを作成する

POST /XRMServices/2011/OrganizationData.svc/ContactSet

[{ 
    "MobilePhone": "+0012 555 555 555", 
    "YomiFullName" : "Demo User 1", 
    "GenderCode" : { 
     "Value" : 1 
     } 
    ..... 
    <data removed for sanity> 
    .....  
}, 
{ 
    "MobilePhone": "+0012 555 555 111", 
    "YomiFullName" : "Demo User 2", 
    "GenderCode" : { 
     "Value" : 1 
     } 
    ..... 
    <data removed for sanity> 
    .....  

}] 

に配列を入れてみました。どんな助けでも大歓迎です。

+0

どのバージョンで作業していますか?単一のトランザクションでレコードを作成する必要がありますか? –

+0

@HenkvanBoeijen残念ながら私はWebApiまたは組織データサービス( 'XRMServices/2011/OrganizationData.svc')のいずれかに限定されているので、これらのオプションだけで実現したいと考えています。単一のトランザクションで複数のレコードを作成する方法があるかどうかを知りたいですか?私は他のシステムからCRMにコンタクトをインポートしているので、輸入業者のようなユーティリティを書く必要があります。 –

答えて

3

ExecuteMultipleRequestを使用する必要がありますが、これは休憩サービスでは利用できないと考えられますが、SOAPサービスで利用可能です。

// Get a reference to the organization service. 
using (_serviceProxy = new OrganizationServiceProxy(serverConfig.OrganizationUri, serverConfig.HomeRealmUri,serverConfig.Credentials, serverConfig.DeviceCredentials)) 
{ 
    // Enable early-bound type support to add/update entity records required for this sample. 
    _serviceProxy.EnableProxyTypes(); 

    #region Execute Multiple with Results 
    // Create an ExecuteMultipleRequest object. 
    requestWithResults = new ExecuteMultipleRequest() 
    { 
     // Assign settings that define execution behavior: continue on error, return responses. 
     Settings = new ExecuteMultipleSettings() 
     { 
      ContinueOnError = false, 
      ReturnResponses = true 
     }, 
     // Create an empty organization request collection. 
     Requests = new OrganizationRequestCollection() 
    }; 

    // Create several (local, in memory) entities in a collection. 
    EntityCollection input = GetCollectionOfEntitiesToCreate(); 

    // Add a CreateRequest for each entity to the request collection. 
    foreach (var entity in input.Entities) 
    { 
     CreateRequest createRequest = new CreateRequest { Target = entity }; 
     requestWithResults.Requests.Add(createRequest); 
    } 

    // Execute all the requests in the request collection using a single web method call. 
    ExecuteMultipleResponse responseWithResults = 
     (ExecuteMultipleResponse)_serviceProxy.Execute(requestWithResults); 

    // Display the results returned in the responses. 
    foreach (var responseItem in responseWithResults.Responses) 
    { 
     // A valid response. 
     if (responseItem.Response != null) 
      DisplayResponse(requestWithResults.Requests[responseItem.RequestIndex], responseItem.Response); 

     // An error has occurred. 
     else if (responseItem.Fault != null) 
      DisplayFault(requestWithResults.Requests[responseItem.RequestIndex], 
       responseItem.RequestIndex, responseItem.Fault); 
    } 
} 
+0

ジェームスのおかげでありがとう。これはバッチ処理に似ていませんか? –

+1

@RahulPatil、私はあなたが何を意味するかは完全には分かっていませんが、答えは「はい」だと思います。 –

+0

'ExecuteMultipleRequest'は限定されたものであると付け加えておきます。それに含まれる要求は単一のトランザクションに参加せず、順番に実行されるため、ここで唯一得られるのはサーバーへのラウンドトリップが少ないことです。 –

1

Web APIアクション(see MSDN)を使用してExecuteTransactionRequesthere)を実行することができます。 MSDNのサンプルの件名はWinOpportunityRequestですが、カスタムアクションを含め、サポートされているすべてのリクエストで動作するはずです。

関連する問題