2016-09-11 3 views
3

단일 요청으로 단일 엔터티를 만드는 방법을 알고 있습니다. 그러나 하나의 요구 사항은 여러 엔터티를 만들려고합니다 (제 경우에는 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 나는 Dynamics CRM 2016에 대해 연구하고 있습니다. 불행히도 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

대답 James를 보내 주셔서 감사합니다. 이것은 일괄 처리 작업과 유사하지 않습니까? –

+1

@ RahulPatil, 나는 당신이 무엇을 의미하는지 완전히 모르겠다. 그러나 나는 대답이 '예'라고 생각한다. –

+0

'ExecuteMultipleRequest'는 제한된 용도로 사용하는 것이 좋습니다. 여기에 포함 된 요청은 단일 트랜잭션에 참여하지 않고 순차적으로 실행되기 때문에 여기서 얻을 수있는 유일한 이점은 서버에 대한 왕복 횟수가 적다는 것입니다. –

1

과 같이 ExecuteTransactionRequest을 실행하기 위해 웹 API 작업 (see MSDN)을 사용할 수 있습니다. MSDN 예제의 제목은 WinOpportunityRequest이지만 사용자 지정 작업을 포함하여 지원되는 모든 요청과 함께 작동해야합니다.