다음을 통해 공유


새 공급자 만들기

새 공급자를 만들려면 다음 단계를 사용하세요. 또한 이러한 단계를 사용하여 기존 제공자에 추가할 수 있습니다.

공급자 아키텍처 정의

공급자를 만들기 전에 공급자가 원하는 작업과 공급자를 사용하려는 목적을 이해하는 것이 중요합니다. 공급자에는 여러 구성 요소가 있으며 모든 구성 요소가 필요하지 않을 수 있습니다.

다음 표를 사용하여 필요한 구성 요소를 결정하세요.

조건 구성 요소 필요
공급자를 만들려는 서비스에 Power Automate에 커넥터가 없습니다.
자세한 내용은 모든 Power Automate 커넥터 목록을 참조하세요.
고객 커넥터를 생성하거나 일반 커넥터를 사용하세요.
공급자는 외부 서비스와 Microsoft Dataverse 간에 데이터를 교환합니다. 공급자는 공급자 변환이 필요합니다. 각 변환에 대한 공급자 변환 구성 요소를 추가합니다.
공급자는 오케스트레이션 디자이너의 논리를 실행합니다. 각 작업을 나타내는 별도의 Power Automate 흐름을 만듭니다.
공급자는 외부 서비스의 메시지를 처리해야 합니다. Power Automate 메시지 처리기 흐름을 만듭니다.
공급자는 정기적으로 외부 서비스에서 메시지를 가져옵니다. Power Automate 메시지 풀러 흐름을 만듭니다.
공급자는 Intelligent Order Management에서 현재 정의되지 않은 비즈니스 이벤트를 발생시킵니다. 새 비즈니스 이벤트 정의를 작성하고 기존 이벤트를 추가하세요.

솔루션을 잘 이해하고 있으면 공급자 구현을 진행할 수 있습니다.

공급자 솔루션 만들기

공급자 솔루션을 생성하려면 이 섹션에서 다음 작업을 완료해야 합니다.

  • 사용자 지정 공급자를 설정합니다.

  • 공급자 정의를 추가합니다.

  • 솔루션에 구성 요소를 추가합니다.

사용자 지정 공급자 설정

Power Apps에서 공급자의 구성 요소를 포함할 솔루션을 만듭니다. Power Apps에서 새 솔루션을 생성하려면 Power Apps에서 솔루션 생성의 단계를 따르세요.

공급자 정의 추가

공급자 정의에는 공급자에 대한 세부 정보가 포함됩니다. 정의는 제공자가 제공자 카탈로그에 표시되는 방식을 결정합니다.

  1. 생성한 공급자 솔루션에서 새로 만들기를 선택합니다.

  2. IOM공급자 정의를 선택합니다.

  3. 다음 세부 정보를 추가합니다.

    1. 표시 이름: 공급자에게 제공할 이름(예: "테스트 공급자")입니다.

    2. 논리적 이름: 공급자의 내보내기 키입니다.

    3. 설명: 공급자가 수행하는 작업을 설명하는 텍스트입니다.

  4. 저장을 선택합니다.

  5. 로고를 추가하려면 이미지를 업로드하세요.

  6. 공급자 정의가 솔루션에 나타나는지 확인합니다. 구성 요소 유형이 IOM 공급자 정의인 레코드가 표시되어야 합니다. 표시되지 않으면 기존 항목 추가를 선택한 다음 방금 만든 레코드를 선택합니다.

  7. 제공자가 제공자 카탈로그에 나타나는지 확인하세요. 활성 필드를 로 설정하면 제공자 정의가 제공자 카탈로그에 표시됩니다. Intelligent Order Management를 엽니다. 공급자 > 카탈로그로 이동합니다. 제공자 정의가 표시되는지 확인하세요.

구성 요소를 솔루션에 추가

공급자 정의를 생성한 후 공급자 구성 요소를 솔루션에 추가합니다.

  1. 솔루션으로 이동합니다.

  2. 기존 추가를 선택합니다.

  3. Intelligent Order Management 구성 요소 유형을 선택한 다음 방금 생성한 레코드를 선택합니다.

공급자 변환 만들기

공급자에 변환이 필요한 경우 솔루션에 공급자 변환 구성 요소를 추가해야 합니다. 여러 변환을 생성해야 할 수도 있습니다.

  1. 공급자 솔루션에서 새로 만들기를 선택합니다.

  2. IOM 제공자 정의 변환을 선택합니다.

  3. 다음 세부 정보를 추가합니다.

    1. 표시 이름: 제공자 변환의 이름입니다(예: "판매 주문 변환").

    2. 논리적 이름: 공급자의 고유 식별자입니다. 이 값은 데이터의 가져오기 및 내보내기 키가 됩니다. 게시자의 접두사로 시작해야 합니다. 예를 들어 Microsoft는 게시자 접두사 msdyn_을 사용합니다. 논리적 이름의 예는 msdyn_flexe_fulfillmentorderproduct_orderline 및 msdyn_flexe_fulfillmentorder_order입니다.

    3. 원본 유형: 이 필드는 수신된 데이터 유형을 나타냅니다. JsonDocument 또는 Dataverse 엔터티의 두 가지 옵션이 있습니다. 데이터가 이미 Dataverse에 있는 경우 Dataverse 엔터티를 선택합니다. 그렇지 않은 경우 JsonDocument를 선택합니다. 이 정보는 변환을 조회하기 위해 정의한 Power Automate 요소에서 사용됩니다.

    4. 원본 개체 이름: 변환 중인 데이터의 이름입니다. Dataverse 레코드를 변환하는 경우 원본 개체 이름이 Dataverse 테이블과 동일한 이름인지 확인하세요.

    5. 대상 개체 이름: 변환하려는 레코드의 대상입니다.

    6. 변환: 입력 데이터를 변환하는 데 사용할 Power Query 온라인 MQuery입니다. Power Query 및 MQuery에 대한 자세한 내용은 Power Query란 무엇입니까?Power Query M 공식 언어 참조를 참조하세요. 다음은 외부 주문 서비스에서 Intelligent Order Management의 판매 주문으로 판매 주문을 변환하는 MQuery의 예입니다.

shared TransformSourceData =

let

orderItems = Source\[OrderItems\],

orderheader =

Record.FromTable

(

Table.SelectRows

(

Record.ToTable

(

\[

ordernumber = Record.FieldOrDefault(Source, "SellerOrderId", Text.From(Source\[OrderServiceOrderId\])),

name = ordernumber,

msdyn\_ExternalOrderId = Text.From(Source\[OrderServiceOrderId\]),

\#"customerid\_account@odata.bind" = "/accounts(" & Text.From(Source\[accountid\]) & ")",

\#"pricelevelid@odata.bind" = "/pricelevels(" & Text.From(Source\[pricelevelid\]) & ")",

totalamount = if Record.HasFields(Source, "OrderTotal") then Decimal.From(Record.FieldOrDefault(Source\[OrderTotal\], "Amount")) else null,

shipto\_name = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "Name") else null,

shipto\_contactname = shipto\_name,

shipto\_line1 = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "AddressLine1") else null,

shipto\_line2 = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "AddressLine2") else null,

shipto\_line3 = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "AddressLine3") else null,

shipto\_city = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "City") else null,

shipto\_stateorprovince = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "StateOrRegion") else null,

shipto\_country = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "CountryCode") else null,

shipto\_postalcode = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "PostalCode") else null,

shipto\_telephone = if Record.HasFields(Source, "ShippingAddress") then Record.FieldOrDefault(Source\[ShippingAddress\], "Phone") else null,

overriddencreatedon = Record.FieldOrDefault(Source, "PurchaseDate")

\]

), each \[Value\] \<\> null

)

),

orderlines = List.Transform(orderItems, each

Record.FromTable

(

Table.SelectRows

(

Record.ToTable

(

\[

isproductoverridden = true,

ispriceoverridden = true,

productdescription = \[OrderItemId\] & "-" & Record.FieldOrDefault(\_, "SellerSKU") & "-" & Record.FieldOrDefault(\_, "Title"),

quantity = \[QuantityOrdered\],

quantityshipped = Record.FieldOrDefault(\_, "QuantityShipped"),

priceperunit = if Record.HasFields(\_, "ItemPrice") then Decimal.From(Record.FieldOrDefault(\[ItemPrice\], "Amount")) else null,

manualdiscountamount = if Record.HasFields(\_, "PromotionDiscount") then Decimal.From(Record.FieldOrDefault(\[PromotionDiscount\], "Amount")) else null,

tax = if Record.HasFields(\_, "ItemTax") then Decimal.From(Record.FieldOrDefault(\[ItemTax\], "Amount")) else null,

shipto\_name = Record.FieldOrDefault(orderheader, "shipto\_name"),

shipto\_contactname = Record.FieldOrDefault(orderheader, "shipto\_contactname"),

shipto\_line1 = Record.FieldOrDefault(orderheader, "shipto\_line1"),

shipto\_line2 = Record.FieldOrDefault(orderheader, "shipto\_line2"),

shipto\_line3 = Record.FieldOrDefault(orderheader, "shipto\_line3"),

shipto\_city = Record.FieldOrDefault(orderheader, "shipto\_city"),

shipto\_stateorprovince = Record.FieldOrDefault(orderheader, "shipto\_stateorprovince"),

shipto\_country = Record.FieldOrDefault(orderheader, "shipto\_country"),

shipto\_postalcode = Record.FieldOrDefault(orderheader, "shipto\_postalcode"),

shipto\_telephone = Record.FieldOrDefault(orderheader, "shipto\_telephone"),

overriddencreatedon = Record.FieldOrDefault(orderheader, "overriddencreatedon")

\]

), each \[Value\] \<\> null

)

)

),

salesorder = Record.AddField(orderheader, "order\_details", orderlines)

in Text.FromBinary(Json.FromValue(salesorder));
  1. 저장을 선택합니다.

  2. 변환 구성 요소가 올바르게 나타나는지 확인합니다. 변환 이름이 있는 IOM 공급자 정의 변환의 구성 요소 유형이 표시되어야 합니다. 표시되지 않으면 기존 항목 추가를 선택한 다음 방금 만든 변환을 선택합니다.

비즈니스 이벤트 정의 추가

공급자가 새 비즈니스 이벤트를 생성하거나 사용하는 경우 IOM 공급자 정의 비즈니스 이벤트 정의 구성 요소를 솔루션에 추가해야 합니다. Intelligent Order Management에 아직 없는 비즈니스 이벤트만 추가하면 됩니다.

만들려는 비즈니스 이벤트가 Intelligent Order Management에 아직 없는 경우 직접 만들 수 있습니다.

  1. 새로 만들기를 선택합니다.

  2. IOM 제공자 정의 비즈니스 이벤트 정의를 선택합니다.

  3. 다음 세부 정보를 추가합니다.

    1. 이름: 비즈니스 이벤트의 이름입니다.

    2. 공급자: 이 비즈니스 정의를 생성하는 공급자입니다.

    3. 연결된 엔터티: 이벤트가 생성될 때 변경되거나 영향을 받는 Intelligent Order Management의 Dataverse 엔터티입니다.

    4. 연결된 상태 값: 비즈니스 이벤트가 발생할 때 연결된 엔터티의 상태를 업데이트하려면 이 필드에 상태 값을 포함합니다.

    5. 연결된 상태 값: 비즈니스 이벤트가 발생할 때 연결된 엔터티의 상태를 업데이트하려면 이 필드에 상태 값을 포함합니다.

  4. 저장을 선택합니다.

  5. 솔루션을 확인하여 IOM 제공자 비즈니스 이벤트 정의 레코드가 표시되는지 확인합니다. 레코드가 솔루션에 표시되지 않으면 기존 항목 추가를 선택한 다음 방금 만든 레코드를 선택합니다.

커넥터 추가

공급자가 Power Automate에서 사용할 수 없는 커넥터를 필요로 하는 경우 자체 커넥터를 만들어야 합니다. 자세한 내용은 모든 Power Automate 커넥터 목록을 참조하세요.

나만의 Power Automate 커넥터를 만들려면 사용자 지정 커넥터 개요의 단계를 따르세요.

사용자 지정 커넥터를 만든 후 공급자 솔루션에 구성 요소로 추가합니다.

  1. 공급자 솔루션으로 이동합니다.

  2. 기존 항목 추가를 선택합니다.

  3. 만든 커넥터를 선택합니다.

Power Automate 흐름 유형

오케스트레이션 디자이너에서 실행되는 모든 작업은 Power Automate 흐름으로 표시됩니다. Power Automate가 특정 정보를 검색하거나 특정 작업을 실행하도록 하려면 해당 작업에 대한 흐름을 생성해야 합니다. Power Automate에 대한 자세한 내용은 Power Automate 소개를 참조하세요.

공급자 정의 논리 정의 구성 요소로 흐름을 공급자에 추가합니다.

흐름 생성 프로세스를 시작하기 전에 Intelligent Order Management에서 사용되는 흐름 유형을 검토하세요.

공급자 메시지 처리기

이러한 흐름은 외부 서비스에서 메시지를 수신 및 처리하고 적절한 비즈니스 이벤트를 발생시켜 Intelligent Order Management 오케스트레이션에 알립니다. 이러한 흐름은 외부 서비스에 의해 트리거됩니다.

다음은 Power Automate 흐름의 메시지 처리기 유형을 만들기 위한 예제 구조입니다.

  1. Power Automate 트리거를 정의합니다. 이것은 일반적으로 웹후크 트리거(권장), 커넥터 트리거 또는 Dataverse 삽입 트리거인 HTTP 엔드포인트입니다. 외부 서비스에 Intelligent Order Management로 보낼 데이터가 있는 경우 트리거가 발생합니다. HTTP 요청이 수신될 때의 트리거 스크린샷.

HTTP 트리거에 사용할 JSON 스키마는 아래에 정의되어 있습니다.

{
    "type": "object",
    "properties": {
        "text": {
            "title": "ProviderActionExecutionEventId",
            "type": "string",
            "x-ms-dynamically-added": true,
            "description": "Please enter your input",
            "x-ms-content-hint": "TEXT"
        },
        "text_1": {
            "title": "EntityRecordId",
            "type": "string",
            "x-ms-dynamically-added": true,
            "description": "Please enter your input",
            "x-ms-content-hint": "TEXT"
        }
    },
    "required": [
        "text",
        "text_1"
    ]
}
  1. 메시지 처리를 초기화합니다. 이 작업에는 두 단계가 있습니다.

    1. 메시지 처리를 추적하는 데 사용할 실행 결과를 초기화합니다.

    2. 처리 상태를 추적, 재시도 및 표시할 수 있도록 Intelligent Order Management에서 제공자 메시지를 승인하세요. 이것은 Intelligent Order Management가 도입하는 Power Automate 조치입니다. 이 작업을 IOM에서 Acknowledge Provider 메시지 요청이라고 합니다. 이 조치에는 다음과 같은 필수 매개 변수가 있습니다.

      1. PowerAutomateWorkflowId: 메시지 처리기 정의에 대한 WorkflowId입니다. workflow()['tags']로 작성 기능을 사용하여 검색할 수 있습니다.

      2. PowerAutomateRunId: 메시지를 수신하고 파이프라인이 처리를 재시도하고 실행 로그를 연결할 수 있도록 허용하는 Power Automate 실행의 고유 식별자입니다. workflow()['run']?['name']로 작성 기능을 사용하여 검색할 수 있습니다.

      3. ProviderMessageExternalRequestId: 보낸 메시지의 식별자입니다. 식별자가 없으면 GUID를 생성할 수 있습니다. 이 식별자는 파이프라인에서 발신자가 중복 메시지를 보내는 것을 방지하는 데 사용됩니다. 식별자는 소스 페이로드에 따라 다릅니다. 예: concat(triggerOutputs()?['body']?['type']?['name'], '_', triggerOutputs()?['body']?['id']).

공급자 확인 메시지 요청 화면의 스크린샷.

  1. 이전에 정의한 공급자 변환은 입력 데이터를 검색하고 변환합니다. Intelligent Order Management는 변환을 실행할 IOM 공급자 변환기라는 즉시 사용 가능한 하위 흐름을 제공합니다. 다음 세부 정보를 추가하여 이벤트 또는 메시지를 처리합니다.

    1. 공급자 이름: 메시지 처리기에 연결된 공급자의 이름입니다. 이 값은 공급자 변환과 동일한 이름이어야 합니다.

    2. 소스 개체 이름: 수행할 변환에 대한 소스 조회 키 값입니다. 이 값은 공급자 변환에 정의된 소스 개체 이름과 동일해야 합니다.

    3. 소스 개체 이름: 수행할 변환에 대한 소스 조회 키 값입니다. 이 값은 공급자 변환에 정의된 값과 동일해야 합니다.

    4. 페이로드: JSON 페이로드 변환 시 제공됩니다. Power Automate는 매개 변수를 직렬화된 문자열로 전달해야 합니다. 페이로드 또는 레코드 ID 값 중 하나만 제공하세요.

    5. 레코드 ID: Dataverse 레코드 변환 시 제공됩니다. 페이로드 또는 레코드 ID 값 중 하나만 제공하세요.
      Power Query 온라인으로 변환 메시지 스크린샷.

  2. HTTP 요청 또는 Dataverse 커넥터 삽입 작업을 사용하여 Dataverse에 데이터를 삽입할 수 있습니다. 둘 이상의 삽입을 수행하고 성능을 개선하려는 경우 요청이 트랜잭션 일괄 처리에 있도록 삽입을 변경 세트로 래핑합니다.
    삽입 메시지 흐름의 스크린샷.

  3. 흐름에서 비즈니스 이벤트를 발생시키려는 경우 비즈니스 이벤트 발생 하위 흐름을 사용할 수 있습니다. 다음 세부 정보를 추가합니다.

    1. BusinessEventName: 발생시키려는 이벤트의 이름입니다.

    2. EntityRecordId: 방금 생성되어 이벤트에 연결된 레코드의 ID입니다.

  4. 공급자 메시지 요청 상태 업데이트 작업을 사용하여 메시지 처리 상태를 업데이트하여 처리 실행 결과를 저장합니다. 다음 세부 정보를 추가합니다.

    1. ProviderMessageRequestExecutionId: 메시지 처리 진행률을 추적하기 위해 생성된 레코드의 출력 ID입니다.

    2. IsProviderMessageRequestExecutionSuccess: 처리 성공 여부를 나타내는 부울 값입니다.

공급자 메시지 풀러

공급자 메시지 풀러는 외부 서비스에서 정기적으로 정의된 간격으로 메시지를 가져오는 Power Automate 흐름입니다.

메모

메시지 처리기는 메시지 풀러 흐름의 전제 조건입니다.

다음은 메시지 풀러 유형의 Power Automate 흐름을 만들기 위한 예제 구조입니다.

  1. 되풀이 워크플로를 사용하여 트리거를 예약합니다.

  2. Dataverse에서 체크포인트를 가져옵니다. 체크포인트는 외부 공급자로부터 성공적으로 가져온 메시지를 추적합니다. 다음 세부 정보를 추가합니다.

    1. 작업 이름: 체크포인트의 이름입니다.

    2. WorkflowId: 다음 작성 함수를 설정하여 이 정보를 검색합니다: workflow()['tags']['xrmWorkflowId'].
      체크포인트 가져오기의 스크린샷.

  3. 메시지를 가져오기 위해 외부 공급자에 대한 HTTP 게시 요청을 만듭니다. 다음 세부 정보를 추가합니다.

    1. 방법: 이 필드를 POST로 설정합니다.

    2. URL: 외부 공급자 엔드포인트입니다.

    3. 본문: JSON 요청에는 다음 공식이 있어야 합니다. if(empty(outputs('Get_Checkpoint')?['body/Checkpoint']), 0, int(outputs('Get_Checkpoint')?['body/Checkpoint']) ).
      풀 메시지 스크린샷.

  4. 3단계에서 가져온 메시지를 구문 분석합니다. 다음 세부 정보를 추가합니다.

    1. 내용: 3단계에서 가져온 본문.

    2. 스키마: 3단계에서 검색한 본문의 구조입니다.
      구문 분석 메시지 스크린샷.

  5. 메시지를 처리하여 4단계의 각 메시지를 반복합니다.

  6. 이전 단계의 각 메시지를 구문 분석합니다. 다음 정보를 추가합니다.

    1. 콘텐츠: 프로세스 메시지의 현재 항목입니다.

    2. 스키마: JSON 형식의 단일 메시지입니다.
      프로세스 메시지 2 스크린샷.

  7. 전제 조건에서 설정한 연관된 제공자 메시지 처리기를 호출합니다. 다음 정보를 추가합니다.

    1. 하위 흐름: 공급자 메시지 처리기를 선택합니다.

    2. 메시지: 6단계에서 구문 분석된 메시지입니다.
      프로세스 메시지 3 스크린샷.

  8. 체크포인트를 Dataverse에 저장합니다. 다음 정보를 추가합니다.

    1. 체크포인트: 문자열 값(최대 100)이 될 수 있습니다. 이 예에서 이것은 마지막으로 처리된 메시지의 ID입니다.

    2. WorkflowId: 다음 작성 함수를 설정하여 이 정보를 검색합니다: workflow()['tags']['xrmWorkflowId'].
      프로세스 메시지 4 스크린샷.

공급자 작업

공급자 작업 흐름은 오케스트레이션 디자이너에서 호출됩니다. 이러한 흐름은 일반적으로 Intelligent Order Management에서 외부 서비스로 호출합니다.

공급자 메시지 처리기와 공급자 작업의 주요 차이점은 메시지 처리기는 오케스트레이션 디자이너에게 알릴 수 있지만 오케스트레이션 디자이너의 작업 타일에 의해 트리거될 수는 없지만 공급자 작업은 가능하다는 것입니다.

다음은 공급자 작업 Power Automate 흐름의 예시 구조입니다.

  1. HTTP 트리거로 시작합니다. 다음 정보는 오케스트레이션 서비스에 의해 런타임에 전달됩니다. 다음 JSON 스키마가 본문에 사용됩니다.
{
    "type": "object",
    "properties": {
        "text": {
            "title": "ProviderActionExecutionEventId",
            "type": "string",
            "x-ms-dynamically-added": true,
            "description": "Please enter your input",
            "x-ms-content-hint": "TEXT"
        },
        "text_1": {
            "title": "EntityRecordId",
            "type": "string",
            "x-ms-dynamically-added": true,
            "description": "Please enter your input",
            "x-ms-content-hint": "TEXT"
        }
    },
    "required": [
        "text",
        "text_1"
    ]
}
  1. 작업 처리를 초기화합니다.

    1. 실행 결과 및 기타 처리 변수를 초기화합니다.

    2. 제공자 작업 실행 시작 Dataverse 작업을 사용하여 작업 실행 시작을 확인합니다. 이렇게 하면 파이프라인이 Intelligent Order Management 내에서 처리 상태를 추적, 재시도 및 표시할 수 있습니다. 다음 정보를 추가합니다.

      1. ProviderActionExecutionEventId: 이 값은 1단계에서 작업에 입력 매개 변수로 전달되었습니다.

      2. PowerAutomateRunID: 고유한 Power Automate 작업 실행입니다. 이렇게 하면 파이프라인이 실행 로그를 연결할 수 있습니다. 필드를 Power Automate 식 workflow()['run']?['name']으로 설정하여 이 정보를 가져옵니다.

  2. 선택한 작업을 수행합니다.

    1. 필요한 경우 Power Query 온라인으로 메시지 변환 하위 흐름을 사용하여 레코드를 변환합니다.

      1. 공급자 이름: 작업에 연결할 공급자의 이름입니다. 이름은 제공자 정의와 동일한 이름이어야 합니다.

      2. 원본 개체 이름: 수행할 변환에 대한 원본 이름입니다. 이 이름은 Power Automate 변환에 정의된 소스 개체와 동일해야 합니다.

      3. 대상 개체 이름: 수행할 변환에 대한 대상 조회 키 값입니다. 이 이름은 공급자 변환에 정의된 값과 동일해야 합니다.

      4. 페이로드: 인바운드 JSON 페이로드 변환 시 제공됩니다. Power Automate는 매개 변수를 직렬화된 문자열로 전달해야 합니다. 페이로드 또는 레코드 ID 값을 추가하되 둘 다 추가하지는 마세요.

      5. 레코드 ID: 아웃바운드 Dataverse 레코드 변환 시 제공됩니다. 페이로드 또는 레코드 ID 값을 추가하되 둘 다 추가하지는 마세요.
        Power Query 온라인으로 변환 메시지 스크린샷.

    2. 정의한 모든 사용자 지정 작업을 실행합니다. 사용 중인 Power Automate 커넥터에 있는 작업입니다.

    3. 작업별 비즈니스 이벤트를 발생시킵니다. 비즈니스 이벤트 발생 하위 흐름을 사용합니다. 다음 정보를 추가합니다.

      1. BusinessEventName: 발생시키려는 이벤트의 이름입니다.

      2. EntityRecordId: 이벤트에 연결된 레코드의 ID입니다.

  3. 작업 실행을 완료하고 결과를 저장합니다. 결과는 오케스트레이션 디자이너가 처리합니다. 다음 정보를 추가합니다.

    1. ExecutionResult: 처리 성공 여부를 나타내는 부울 값입니다.

    2. ExecutionDetails: 테스트 및 디버깅 목적을 위한 선택적 로그 세부 정보입니다.

    3. ProviderActionExecutionEventId: 이 값은 1단계에서 정의된 입력 매개 변수로 작업에 전달되었습니다.
      공급자 작업 실행 완료의 스크린샷.

하위 흐름

하위 흐름은 다른 Power Automate 흐름에서 참조되는 하위 흐름입니다. 여러 영역에서 반복하는 일부 단계가 있는 경우 하위 흐름을 정의하는 것이 유용합니다. 자식 흐름은 주로 유사한 단계를 통합하는 편의를 위해 사용하기 위한 특정 템플릿이나 권장 프로세스가 없습니다.

공급자 하위 흐름은 다른 공급자 하위 흐름을 호출할 수 없습니다.

클라우드 흐름 만들기

만들려는 흐름 유형을 이해하면 클라우드 흐름을 만들 준비가 된 것입니다. 이렇게 하려면 다음 단계를 따르세요.

  1. Power Apps 환경에서 기본 솔루션을 엽니다.

중요

공급자 솔루션에 이러한 솔루션을 추가하지 마세요.

  1. 새로 만들기를 선택한 다음 클라우드 흐름을 선택합니다.

  2. Power Automate 흐름을 구축합니다. 참조를 위해 이전 섹션의 템플릿을 사용하세요.

  3. 흐름을 저장하려면 다음 섹션을 참조하세요.

Power Automate 정의 저장

흐름을 만든 후에는 공급자 정의 논리 정의 구성 요소로 저장해야 합니다. 이 구성 요소 유형은 공급자 활성화 중에 배포할 작업과 함께 Intelligent Order Management를 제공합니다.

흐름을 저장하려면 먼저 다음 전제 조건이 있어야 합니다.

  • Power Automate 논리 정의를 저장하려면 OData 요청을 발행해야 합니다. 이렇게 하려면 PostMan 또는 유사한 서비스의 계정이 필요합니다.

  • GET 및 POST 요청을 발행하려면 Dataverse 환경에 대한 액세스 토큰을 생성해야 합니다.

    • 활성 구독으로 Azure 계정을 설정합니다. 활성 계정이 없는 경우 Azure 웹 사이트에서 계정을 설정해야 합니다.

    • PowerShell이 설치되어 있어야 합니다. 자세한 내용은 PowerShell 설치를 참조하세요.

    • PowerShell에 다음 명령을 입력하여 액세스 토큰을 가져옵니다. az login --allow-no-subscriptions account get-access-token --resource=https://YourDataverseTenantURL.api.crm.dynamics.com/ --query=accessToken --output=tsv | Set-Clipboard.

Power Automate 정의를 저장하려면 다음을 수행합니다.

  1. 저장하려는 Power Automate 흐름의 워크플로 ID를 찾습니다. 다음 중 하나를 수행합니다.

    1. Power Automate 작업을 사용하여 워크플로 ID를 찾습니다.

      1. Power Automate 흐름의 끝에서 workflow() 표현식을 사용하여 작성 작업을 만듭니다.
        작성 작업의 스크린샷.

      2. Power Automate를 실행합니다.

      3. 실행 결과의 xrmWorkflowId 속성에는 워크플로 ID가 포함됩니다.
        워크플로 ID 스크린샷.

      4. 다시 실행되지 않도록 흐름에서 이 작업을 삭제합니다.

    2. 선택적으로 OData 가져오기 요청을 발행할 수 있습니다.

      1. 워크플로 ID를 저장하려는 흐름으로 이동합니다. URL에서 고유 식별자를 찾습니다. URL에서 ../flows/ 뒤에 나타나는 ID입니다.
        고유 식별자를 찾는 방법.

      2. OData 요청을 발행하여 워크플로 메타데이터를 검색합니다. 다음은 GET 요청의 예입니다.
        GET {Env url}/api/data/v9.1/workflows?$filter=workflowidunique eq '{Unique Workflow Id from the Power Automate U}'&$select=workflowid,workflowidunique

      3. 반환된 workflowid 속성을 저장합니다.

  2. 제공자 정의 ID를 찾습니다.

    1. 흐름을 저장할 공급자 정의를 선택합니다.

    2. URL에서 제공자 정의 ID를 복사합니다. 이것은 URL ../id={예제 번호}/의 일부입니다.
      제공자 정의 ID를 찾는 방법입니다.

  3. 저장하려는 Power Automate 유형에 대한 옵션 세트 값을 기록해 둡니다.

    1. 하위 흐름: 192350002

    2. 공급자 작업: 192350001

    3. 공급자 메시지 처리기: 192350000

    4. 공급자 메시지 풀러: 192350003

  4. POST 요청을 발행하여 Power Automate 정의를 저장합니다. 다음은 예제 요청입니다.

    POST: {Env url}/api/data/v9.1/msdyn\_SaveProviderDefinitionLogicDefinition  
    Body:  
    {

"ProviderDefinitionId": "{ProviderId previously found}",

"WorkflowId": "{Power Automate WorkflowId previously found}",

"LogicalName": "{Export prefix \_ Power Automate Export Name}",

"LogicType": {Logic Type},

"MaxRetryAttempts": {Max number of attempts},

"TimeoutMinutes": {Timeout number ex: 5}

}
  1. 제공자 정의 논리 정의 구성요소가 추가되었는지 확인합니다. 이렇게 하려면 다음 단계를 따르세요.

    1. 공급자 솔루션으로 이동합니다.

    2. 제공자 정의 논리 정의 구성요소가 추가되었는지 확인합니다. 추가되지 않은 경우 기존 항목 추가를 선택한 다음 생성한 구성 요소를 추가합니다.

연결 참조 저장

공급자가 Power Automate 고객 커넥터를 사용하는 경우 Power Automate 솔루션에 대한 연결 참조를 저장하려면 다음 단계를 완료해야 합니다.

  1. GET 요청을 발행하여 연결 참조 ID를 검색합니다. 예:
GET {Env url}/api/data/v9.2/connectionreferences

추가로 필터링하려면 연결 참조 이름으로 필터링할 수 있습니다. 예:

    {Env url}/api/data/v9.2/connectionreferences?$[connectionreferences?$filter=connectionreferencedisplayname](https://orgdb90e3a2.api.crm10.dynamics.com/api/data/v9.2/connectionreferences?$filter=connectionreferencedisplayname) eq 'Provider Example'&$select=connectionreferencelogicalname,connectionreferencedisplayname,connectionreferenceid,connectorid

  1. Power Automate 클라이언트 데이터를 검색하여 올바른 연결 참조 ID가 검색되었는지 확인합니다.

    1. 이전에 저장한 공급자 정의 논리 정의 구성 요소로 이동합니다.

    2. 클라이언트 데이터를 확인하여 connectionReferenceLogicalName이 나타나는지 확인합니다.

  2. 제공자 정의 ID를 찾습니다. 이는 Power Automate 논리 정의를 저장하기 위해 2단계에서 사용한 것과 동일한 값입니다.

  3. 게시 요청을 발행하여 연결 참조를 저장합니다. 예:

POST {Env url}/api/data/v9.1/msdyn\_SaveProviderDefinitionConnectionReference  
    Body:  
    {

"ProviderDefinitionId": "{ProviderId previously found}",

"ConnectionReferenceId": "{Connection reference id previously found}"

}
  1. 제공자 정의 논리 정의 구성요소가 추가되었는지 확인합니다.

    1. 공급자 솔루션으로 이동합니다.

    2. 제공자 정의 논리 정의 참조 구성요소가 추가되었는지 확인합니다. 추가되지 않은 경우 기존 항목 추가를 선택하고 방금 생성한 구성 요소를 추가합니다.

공급자 공유

다른 환경에서 공급자 정의를 사용하거나 솔루션을 공유하려는 경우 공급자 솔루션을 내보낼 수 있습니다. 자세한 내용은 솔루션 내보내기를 참조하세요.