웹 API 작업 사용

 

게시 날짜: 2017년 1월

적용 대상: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

작업 및 기능은 웹 API를 사용하여 수행할 수 있는 재사용 가능한 작업을 나타냅니다.Web API Action Reference에 나열된 작업이 있는 POST 요청을 사용하여 부작용이 있는 작업을 수행합니다. 또한 사용자 지정 작업을 정의할 수 있으며 사용할 준비가 되어 있습니다.

이 항목의 내용

바인딩되지 않은 작업

바인딩된 작업

사용자 지정 작업 사용

엔터티 매개변수 유형 지정

바인딩되지 않은 작업

작업은 d80cfb87-d4f1-4c75-bcc8-4f54d1351e26#bkmk_csdl에 정의됩니다. 예를 들어, 다음은 CSDL에 표시되는 WinOpportunity Action의 정의입니다.

<Action Name="WinOpportunity">
  <Parameter Name="OpportunityClose" Type="mscrm.opportunityclose" Nullable="false" />
  <Parameter Name="Status" Type="Edm.Int32" Nullable="false" />
</Action>

WinOpportunity 작업은 조직 서비스를 사용하여 WinOpportunityRequest에 대응합니다. 이 작업을 사용하여 영업 기회 상태를 성공으로 설정하고 opportunityclose EntityType을 만들어 이벤트를 기록합니다. 이 작업은 반환 값을 포함하지 않습니다. 성공하면 작업이 완료됩니다.

OpportunityClose 매개 변수는 작업에서 만들려면 opportunityclose 엔터티의 JSON 표현이 필요합니다. 이 엔터티는 opportunityid 단일 값의 내비게이션 속성을 발행하는 영업 기회와 관련이 있어야 합니다.JSON에서는 만들 때 엔터티 연결에서 설명한 대로 @odata.bind 주석을 사용하여 설정됩니다.

Status 매개 변수는 닫혔을 때 opportunity에 대한 상태로 설정해야 합니다.opportunity EntityTypestatuscode 속성에서 이를 위한 기본값을 찾을 수 있습니다.성공 옵션의 값은 3입니다.성공을 나타내는 상태 설명 옵션이 하나 밖에 없을 때는 이 값을 설정할 필요가 있는 이유가 궁금할 수 있을 것입니다. 이유는 Big Win 또는 Small Win 같이 성공을 나타내는 사용자 지정 상태 옵션을 정의할 수 있으므로 값은 해당 상황에서 3과 다를 수 있습니다.

다음 예제는 HTTP 요청이며 b3828ac8-917a-e511-80d2-00155d2a68d2의 opportunityid 값을 사용하여 영업 기회에 대한 WinOpportunity 작업 호출에 응답합니다.

  • 요청

    POST cc_WebAPI_ServiceURI/WinOpportunity HTTP/1.1
    Accept: application/json
    Content-Type: application/json; charset=utf-8
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
    {
     "Status": 3,
     "OpportunityClose": {
      "subject": "Won Opportunity",
      "opportunityid@odata.bind": "cc_WebAPI_ServiceURI/opportunities(b3828ac8-917a-e511-80d2-00155d2a68d2)"
     }
    }
    
  • 응답

    HTTP/1.1 204 No Content
    OData-Version: 4.0
    

바인딩된 작업

d80cfb87-d4f1-4c75-bcc8-4f54d1351e26#bkmk_csdl에서 Action 요소가 바인딩된 작업을 나타내면 값이 trueIsBound 특성이 있습니다. 작업 내에 정의된 첫 번째 매개 변수 요소는 작업이 바인딩된 엔터티를 나타냅니다. 매개 변수의 Type 특성이 컬렉션이면 작업은 엔터티 컬렉션으로 바인딩됩니다. 예를 들어, 다음은 CSDL에 표시되는 AddToQueue Action의 정의입니다.

 <ComplexType Name="AddToQueueResponse">
 <Property Name="QueueItemId" Type="Edm.Guid" Nullable="false" />
 </ComplexType>
 <Action Name="AddToQueue" IsBound="true">
  <Parameter Name="entity" Type="mscrm.queue" Nullable="false" />
  <Parameter Name="Target" Type="mscrm.crmbaseentity" Nullable="false" />
  <Parameter Name="SourceQueue" Type="mscrm.queue" />
  <Parameter Name="QueueItemProperties" Type="mscrm.queueitem" />
  <ReturnType Type="mscrm.AddToQueueResponse" Nullable="false" />
</Action>

이 바인딩 작업은 조직 서비스에서 사용하는 AddToQueueRequest와 동일합니다. 웹 API에서 이 작업은 AddToQueueRequest.DestinationQueueId 속성을 나타내는 queue EntityType에 바인딩됩니다. 이 작업은 여러 추가 매개 변수를 받고 조직 서비스에서 반환된 AddToQueueResponse에 해당하는 AddToQueueResponse ComplexType를 반환합니다. 작업이 복합 유형을 반환하면 복잡 유형의 정의가 CSDL에서 작업 바로 위에 나타납니다.

바인딩 작업은 첫 번째 매개 변수 값을 설정하기 위해 URI를 사용하여 호출해야 합니다. 명명된 매개 변수 값으로 설정할 수는 없습니다.

바인딩 함수를 호출할 때 Microsoft.Dynamics.CRM 네임 스페이스를 포함하여 함수의 전체 이름을 포함해야 합니다. 전체 이름을 포함하지 않을 경우 다음 오류가 발생합니다. Status Code:400 Request message has unresolved parameters.

다음 예제에서는 큐에 문자를 추가하기 위해 AddToQueue Action을 사용하는 방법을 보여줍니다.Target 매개 변수 유형은 특정하지 않으므로(mscrm.crmbaseentity) Microsoft.Dynamics.CRM 네임스페이스를 포함하여 엔터티의 전체 이름의 @odata.type 속성 값을 사용하여 개체의 유형을 명시적으로 선언해야 합니다. 이 경우, Microsoft.Dynamics.CRM.letter.추가 정보:엔터티 매개변수 유형 지정

  • 요청

    POST cc_WebAPI_ServiceURI/queues(56ae8258-4878-e511-80d4-00155d2a68d1)/Microsoft.Dynamics.CRM.AddToQueue HTTP/1.1
    Accept: application/json
    Content-Type: application/json; charset=utf-8
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
    {
     "Target": {
      "activityid": "59ae8258-4878-e511-80d4-00155d2a68d1",
      "@odata.type": "Microsoft.Dynamics.CRM.letter"
     }
    }
    
  • 응답

    HTTP/1.1 200 OK
    Content-Type: application/json; odata.metadata=minimal
    OData-Version: 4.0
    
    {
     "@odata.context": "cc_WebAPI_ServiceURI/$metadata#Microsoft.Dynamics.CRM.AddToQueueResponse",
     "QueueItemId": "5aae8258-4878-e511-80d4-00155d2a68d1"
    }
    

사용자 지정 작업 사용

조직 또는 솔루션을 위한 사용자 지정 작업을 정의하는 경우 d80cfb87-d4f1-4c75-bcc8-4f54d1351e26#bkmk_csdl에도 포함됩니다. 응용 프로그램에서 사용자 지정 도구를 사용하여 작업을 만드는 자세한 내용은 TechNet 항목작업을 참조하십시오. 사용자 지정 작업 만들기 및 사용에 대한 자세한 내용은 사용자 고유의 작업 만들기를 참조하십시오.

사용자 지정 작업에 포함된 작업에 부작용이 있는지 여부에 관계 없이 데이터를 수정할 수 있으므로 함수라기 보다는 작업으로 간주됩니다. 사용자 지정 함수를 만드는 방법은 없습니다.

사용자 지정 작업의 예: 연락처에 메모 추가

특정 연락처에 새 메모를 추가하는 사용자 지정 작업을 만들어 보겠습니다. 다음과 같은 속성을 사용하여 연락처 엔터티에 바인딩된 사용자 지정 작업을 만들 수 있습니다.

UI 레이블

프로세스 이름

AddNoteToContact

고유 이름

new_AddNoteToContact

엔터티

연락처

범주

작업

프로세스 인수

이름

유형

필수 참석자

방향

NoteTitle

문자열

필수 참석자

Input

NoteText

문자열

필수 참석자

Input

NoteReference

EntityReference

필수 참석자

Output

단계

이름

단계 유형

설명

메모 만들기

레코드 만들기

Title = {NoteTitle(Arguments)}

Note Body = {NoteText(Arguments)}

Regarding = {Contact{Contact}}

메모에 참조를 반환

값 할당

NoteReference Value = {Note(Create the note (Note))}

사용자 지정 작업을 활성화하고 게시한 후 CSDL을 다운로드하면 다음 새 정의를 찾을 수 있습니다.

<Action Name="new_AddNoteToContact" IsBound="true">
  <Parameter Name="entity" Type="mscrm.contact" Nullable="false" />
  <Parameter Name="NoteTitle" Type="Edm.String" Nullable="false" Unicode="false" />
  <Parameter Name="NoteText" Type="Edm.String" Nullable="false" Unicode="false" />
  <ReturnType Type="mscrm.annotation" Nullable="false" />
</Action>

다음 HTTP 요청 및 응답은 사용자 지정 작업과 성공하는 경우 반환되는 응답을 호출하는 방법을 보여줍니다.

  • 요청

    POST cc_WebAPI_ServiceURI/contacts(94d8c461-a27a-e511-80d2-00155d2a68d2)/Microsoft.Dynamics.CRM.new_AddNoteToContact HTTP/1.1
    Accept: application/json
    Content-Type: application/json; charset=utf-8
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    
    {
     "NoteTitle": "New Note Title",
     "NoteText": "This is the text of the note"
    }
    
  • 응답

    HTTP/1.1 200 OK
    Content-Type: application/json; odata.metadata=minimal
    OData-Version: 4.0
    
    {
     "@odata.context": "cc_WebAPI_ServiceURI/$metadata#annotations/$entity",
     "annotationid": "9ad8c461-a27a-e511-80d2-00155d2a68d2"
    }
    

엔터티 매개변수 유형 지정

작업에서 매개변수로 엔터티가 필요하고 엔터티의 유형을 잘 모르면 @odata.type 속성을 사용하여 엔터티 유형을 지정해야 합니다. 이 속성의 값은
Microsoft.Dynamics.CRM.+<엔터티 논리 이름> 패턴을 따르는 정규화된 엔터티의 이름입니다.

위 바인딩된 작업 섹션에서 보았던 것과 같이 AddToQueue Action에 대한 Target 매개 변수는 활동입니다. 그러나 모든 활동은 activitypointer EntityType에서 상속되므로 "@odata.type": "Microsoft.Dynamics.CRM.letter" 속성을 엔터티 JSON에 포함하여 엔터티 유형이 문자임을 지정해야 합니다.

다른 두 가지 예는 AddMembersTeam ActionRemoveMembersTeam Action입니다. Members 매개변수는 ownerid 기본 키를 principal EntityType에서 상속하는 systemuser EntityType의 집합이기 때문입니다. 다음 JSON을 전달하여 집합에 단일 시스템 사용자를 나타내면 엔터티가 시스템 사용자이며 역시 주 엔터티 유형에서 상속된 team EntityType이 아니라는 것을 명시할 수 있습니다.

{
 "Members": [{
  "@odata.type": "Microsoft.Dynamics.CRM.systemuser",
  "ownerid": "5dbf5efc-4507-e611-80de-5065f38a7b01"
 }] 
}

여기에서 엔터티 유형을 지정하지 않으면 "EdmEntityObject passed should have the key property value set."의 오류를 얻을 수 있습니다.

참고 항목

웹 API 함수 및 동작 샘플(C#)
웹 API 함수 및 동작 샘플(클라이언트 쪽 JavaScript)
웹 API를 사용하여 작업 수행
HTTP 요청 및 처리 오류 작성
웹 API를 사용하여 데이터 쿼리
웹 API를 사용하여 엔터티 만들기
웹 API를 사용하여 엔터티 검색
웹 API를 사용하여 엔터티 업데이트 및 삭제
웹 API를 사용하여 엔터티 연결 및 연결 해제
웹 API 기능 사용
웹 API를 사용하여 일괄 작업 실행
웹 API를 사용하여 다른 사용자를 가장
웹 API를 사용하여 조건부 작업을 수행

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 저작권 정보