Power Automate웹 API

앞으로 모든 흐름은 Dataverse에 저장되고, 다양한 Web API를 활용합니다.

이 콘텐츠에서는 Power Automate의 솔루션 탭에 포함된 흐름을 관리하는 방법을 다룹니다. 현재 내 흐름 의 흐름은 이러한 API에서 지원되지 않습니다.

HTTP 요청 작성

요청을 만들기 시작하려면 먼저 URL을 구축해야 합니다. Power Automate Web API의 기준 URL 형식은 https://{Organization ID}.{Regional Subdomain}.dynamics.com/api/data/v9.1/입니다. 두 개의 매개 변수는 다음과 같습니다.

  • 조직 ID 는 흐름을 저장하는 환경에 대한 고유한 이름입니다.

  • 지역 하위 도메인 은 환경의 위치에 따라 달라집니다.

이 두 매개 변수를 얻는 방법.

  1. Power Platform 관리 센터로 이동합니다.
  2. 흐름을 빌드하는 데 사용하는 환경을 선택합니다.

흐름을 위한 환경.

  1. 환경 URL에서 조직 ID 및 지역 하위 도메인을 복사합니다.

조직 ID와 지역.

Online Management API에서 인스턴스 가져오기 메서드를 통해 사용할 수 있는 인스턴스 목록을 프로그래밍 방식으로 가져올 수 있습니다.

Web API에 대한 각 요청은 AcceptContent-type 헤더를 application/json으로 설정해야 합니다.

마지막으로, Authorization 헤더를 Azure AD 전달자 토큰으로 채웁니다. Dataverse에 대한 Azure AD 전달자 토큰을 획득하는 방법을 알아볼 수 있습니다. 예를 들어, 이 요청은 다음과 같습니다.

GET https://org00000000.crm0.dynamics.com/api/data/v9.1/workflows
Accept: application/json
Authorization: Bearer ey...

응답에는 해당 환경 내의 흐름 목록이 포함됩니다.

{
    "@odata.context": "https://org00000000.crm0.dynamics.com/api/data/v9.1/$metadata#workflows",
    "value": [{
        "@odata.etag": "W/\"12116760\"",
        "category": 5,
        "statecode": 0,
        "workflowidunique": "00000000-0000-0000-0000-000000000001",
        "workflowid" : "00000000-0000-0000-0000-000000000002",
        "createdon": "2018-11-15T19:45:51Z",
        "_ownerid_value": "00000000-0000-0000-0000-000000000003",
        "modifiedon": "2018-11-15T19:45:51Z",
        "ismanaged": false,
        "name": "Sample flow",
        "_modifiedby_value": "00000000-0000-0000-0000-000000000003",
        "_createdby_value": "00000000-0000-0000-0000-000000000003",
        "type": 1,
        "description": "This flow updates some data in Dataverse.",
        "clientdata": "{\"properties\":{\"connectionReferences\":{\"shared_commondataservice\":{\"source\":\"NotSpecified\",\"id\":\"/providers/Microsoft.PowerApps/apis/shared_commondataservice\",\"tier\":\"NotSpecified\"}},\"definition\":{...}},\"schemaVersion\":\"1.0.0.0\"}"
    }]
}

목록 흐름

앞서 보여드린 것처럼 workflows에서 GET을 호출하면 워크플로 목록을 얻을 수 있습니다. 각 워크플로에는 여러 속성이 있지만 가장 관련성이 높은 속성은 다음과 같습니다.

속성 이름 설명
범주 흐름의 범주입니다. 다음은 다양한 카테고리입니다.
0 - 클래식 Dataverse 워크플로.
1 - 클래식 Dataverse 대화 상자.
2 - 비즈니스 규칙.
3 - 클래식 Dataverse 작업.
4 - 비즈니스 프로세스 흐름.
5 - 자동화, 인스턴트 또는 예약된 흐름.
6 - 데스크톱 흐름.
statecode 흐름의 상태입니다. 상태는 0 - 끄기 또는 1 - 켜기일 수 있습니다.
workflowidunique 흐름을 설치하기 위한 고유 식별자입니다.
workflowid 모든 가져오기에서 클라우드 흐름에 대한 고유 식별자입니다.
createdon 흐름이 만들어진 날짜입니다.
_ownerid_value 흐름을 소유한 사용자 또는 팀의 고유 식별자입니다. Dataverse에 있는 systemusers 테이블의 ID입니다.
modifiedon 흐름을 마지막으로 업데이트한 시간입니다.
ismanaged 관리 솔루션을 통해 흐름을 설치했는지를 나타냅니다.
name 사용자가 흐름을 지정한 표시 이름입니다.
_modifiedby_value 흐름을 업데이트한 마지막 사용자입니다. Dataverse에 있는 systemusers 테이블의 ID입니다.
_createdby_value 흐름을 만든 사용자입니다. Dataverse에 있는 systemusers 테이블의 ID입니다.
type 흐름이 실행되는 흐름인지 아니면 추가 흐름을 만드는 데 사용할 수 있는 템플릿인지를 나타냅니다. 1 - 흐름, 2 - 활성화 또는 3 - 템플릿
description 흐름의 사용자가 제공한 설명입니다.
clientdata connectionReferences 및 흐름의 정의를 포함하는 개체의 문자열 인코딩 JSON입니다.

Dataverse 워크플로 설명서에는 속성/필드 및 해당 사용법에 대한 추가 정보가 있습니다.

데이터를 쿼리하기 위한 Dataverse API 설명서에 설명된 대로 특정 속성을 요청하고, 흐름 목록을 필터링할 수도 있습니다. 예를 들어 이 쿼리는 현재 사용 중인 자동화, 인스턴트 또는 예약된 흐름만 반환합니다.

GET https://org00000000.crm0.dynamics.com/api/data/v9.1/workflows?$filter=category eq 5 and statecode eq 1
Accept: application/json
Authorization: Bearer ey...

클라우드 흐름 만들기

workflows 컬렉션에서 POST를 호출하여 클라우드 흐름을 만듭니다. 자동화, 인스턴트 및 예약된 흐름에 대한 필수 속성은 category, name, type, primaryentity 및 clientdata입니다. 이러한 형식의 흐름의 경우 primaryentity에 none을 사용합니다.

설명 및 statecode를 입력할 수도 있습니다.

POST https://org00000000.crm0.dynamics.com/api/data/v9.1/workflows
Accept: application/json
Authorization: Bearer ey...
Content-type: application/json
{
        "category": 5,
        "statecode": 0,
        "name": "Sample flow name",
        "type": 1,
        "description": "This flow reads some data from Dataverse.",
        "primaryentity":"none",
        "clientdata": "{\"properties\":{\"connectionReferences\":{\"shared_commondataservice\":{\"connectionName\":\"shared-commondataser-00000000-0000-0000-0000-000000000004\",\"source\":\"Invoker\",\"id\":\"/providers/Microsoft.Power Apps/apis/shared_commondataservice\"}},\"definition\":{\"$schema\": \"https:\/\/schema.management.azure.com\/providers\/Microsoft.Logic\/schemas\/2016-06-01\/workflowdefinition.json#\",\"contentVersion\": \"1.0.0.0\",\"parameters\": {\"$connections\": {\"defaultValue\": {},\"type\": \"Object\"},\"$authentication\": {\"defaultValue\": {},\"type\": \"SecureObject\"}},\"triggers\": {\"Recurrence\": {\"recurrence\": {\"frequency\": \"Minute\",\"interval\": 1},\"type\": \"Recurrence\"}},\"actions\": {\"List_records\": {\"runAfter\": {},\"metadata\": {\"flowSystemMetadata\": {\"swaggerOperationId\": \"GetItems_V2\"}},\"type\": \"ApiConnection\",\"inputs\": {\"host\": {\"api\": {\"runtimeUrl\": \"https:\/\/firstrelease-001.azure-apim.net\/apim\/commondataservice\"},\"connection\": {\"name\": \"@parameters('$connections')['shared_commondataservice']['connectionId']\"}},\"method\": \"get\",\"path\": \"\/v2\/datasets\/@{encodeURIComponent(encodeURIComponent('default.cds'))}\/tables\/@{encodeURIComponent(encodeURIComponent('accounts'))}\/items\",\"queries\": {\"$top\": 1},\"authentication\": \"@parameters('$authentication')\"}}},\"outputs\": {}}},\"schemaVersion\":\"1.0.0.0\"}"
}

가장 중요한 섹션은 clientdata이며 여기에는 흐름을 사용하는 connectionReferences 및 흐름의 정의가 포함됩니다. connectionReferences는 흐름을 사용하는 각 연결에 대한 매핑입니다.

다음과 같은 세 가지 속성이 있습니다.

속성 이름 설명
connectionName 연결을 식별합니다. 연결 페이지로 이동한 다음, 연결의 URL에서 복사하여 connectionName을 확인할 수 있습니다.
원본 Embedded 또는 Invoker 중 하나입니다. Invoker는 인스턴트 흐름(사용자가 흐름을 실행하는 단추를 선택하는 경우)에만 유효하고 최종 사용자가 연결을 제공한다는 점을 나타냅니다. 이 경우에 connectionName은 디자인 타임에만 사용됩니다. 연결이 Embedded인 경우 지정한 connectionName을 항상 사용합니다.
ID 커넥터의 식별자입니다. ID는 항상 /providers/Microsoft.PowerApps/apis/로 시작한 다음, 커넥터 이름이 옵니다. 해당 이름은 연결의 URL에서 복사하거나 커넥터 페이지에서 커넥터를 선택할 수 있습니다.

POST 요청을 실행하면 OData-EntityId 헤더를 받을 수 있습니다. 여기에는 새 흐름의 workflowid가 포함됩니다.

클라우드 흐름 업데이트

워크플로에서 PATCH를 호출하여 클라우드 흐름을 업데이트하거나, 설정하거나 해제할 수 있습니다. workflowid 속성을 사용하여 이러한 호출을 수행합니다. 예를 들어, 다음 호출을 사용하여 흐름의 설명 및 소유자를 업데이트할 수 있습니다.

PATCH https://org00000000.crm0.dynamics.com/api/data/v9.1/workflows(00000000-0000-0000-0000-000000000002)
Accept: application/json
Authorization: Bearer ey...
Content-type: application/json
{
    "description" : "This flow will ensure consistency across systems.",
    "ownerid@odata.bind": "systemusers(00000000-0000-0000-0000-000000000005)"
}

Note

소유자를 변경하는 구문은 odata.bind 형식을 사용합니다. 즉, _ownerid_value 필드를 직접 패치하는 대신 @odata.bind를 속성 이름에 추가한 다음, ID를 systemusers()로 래핑합니다.

또 다른 예로, 이 호출을 사용하여 클라우드 흐름을 설정할 수 있습니다.

PATCH https://org00000000.crm0.dynamics.com/api/data/v9.1/workflows(00000000-0000-0000-0000-000000000002)
Accept: application/json
Authorization: Bearer ey...
Content-type: application/json
{
    "statecode" : 1
}

클라우드 흐름 삭제

간단한 DELETE 호출을 사용하여 클라우드 흐름을 삭제합니다.

DELETE https://org00000000.crm0.dynamics.com/api/data/v9.1/workflows(00000000-0000-0000-0000-000000000002)
Accept: application/json
Authorization: Bearer ey...

Note

설정된 클라우드 흐름을 삭제할 수 없습니다. 먼저 흐름을 해제해야 합니다(이전의 클라우드 흐름 업데이트 참조). 아니면 다음과 같은 오류가 발생합니다. Cannot delete an active workflow definition.

클라우드 흐름을 공유하는 모든 사용자 가져오기

액세스 권한을 가진 사용자를 나열하는 작업은 Dataverse에서 함수 를 사용합니다. 이 함수는 Target이라는 단일 매개 변수를 사용합니다.

GET https://org00000000.crm0.dynamics.com/api/data/v9.1/RetrieveSharedPrincipalsAndAccess(Target=@tid)?@tid={'@odata.id':'workflows(00000000-0000-0000-0000-000000000002)'}
Accept: application/json
Authorization: Bearer ey...

Target 매개 변수는 @odata.id라는 단일 속성을 사용하는 JSON 형식 문자열입니다. 이전 예에서 워크플로 ID를 바꿉니다. 그러면 다음을 반환합니다.

{
    "@odata.context": "https://org00000000.crm0.dynamics.com/api/data/v9.1/$metadata#Microsoft.Dynamics.CRM.RetrieveSharedPrincipalsAndAccessResponse",
    "PrincipalAccesses": [
        {
            "AccessMask": "ReadAccess",
            "Principal": {
                "@odata.type": "#Microsoft.Dynamics.CRM.systemuser",
                "ownerid": "00000000-0000-0000-0000-000000000005"
            }
        }
    ]
}

흐름 공유 또는 공유 해제

GrantAccess 작업을 사용하여 클라우드 흐름을 공유할 수 있습니다.

POST https://org00000000.crm0.dynamics.com/api/data/v9.1/GrantAccess
Accept: application/json
Authorization: Bearer ey...
Content-type: application/json
{
    "Target" : {
        "@odata.type": "Microsoft.Dynamics.CRM.workflow",
        "workflowid" : "00000000-0000-0000-0000-000000000002"
    },
    "PrincipalAccess": {
        "Principal": {
            "@odata.type" : "Microsoft.Dynamics.CRM.systemuser",
            "ownerid" : "00000000-0000-0000-0000-000000000005"
        },
        "AccessMask": "ReadAccess"
    }
}

AccessMask 매개 변수는 다른 권한 수준에서 다음 값을 사용하는 필드입니다.

이름 설명
None 액세스 권한이 없습니다.
ReadAccess 흐름을 읽을 수 있는 권한입니다.
WriteAccess 흐름을 업데이트할 수 있는 권한입니다.
DeleteAccess 흐름을 삭제할 수 있는 권한입니다.
ShareAccess 흐름을 공유할 수 있는 권한입니다.
AssignAccess 흐름의 소유자를 변경할 수 있는 권한입니다.

쉼표를 사용하여 사용 권한을 조합할 수 있습니다. 예를 들어, ReadAccess,WriteAccess를 전달하여 클라우드 흐름을 읽고 업데이트하는 기능을 제공합니다.

RevokeAccess 작업을 사용하여 클라우드 흐름 공유를 해제 할 수 있습니다. 예를 들어 다음과 같습니다.

POST https://org00000000.crm0.dynamics.com/api/data/v9.1/RevokeAccess
Accept: application/json
Authorization: Bearer ey...
Content-type: application/json
{
    "Target" : {
        "@odata.type": "Microsoft.Dynamics.CRM.workflow",
        "workflowid" : "00000000-0000-0000-0000-000000000002"
    },
    "Revokee": {
        "@odata.type" : "Microsoft.Dynamics.CRM.systemuser",
        "ownerid" : "00000000-0000-0000-0000-000000000005"
    }
}

RevokeAccessAccessMask에서 부여된 모든 사용 권한을 제거합니다.

흐름 내보내기

ExportSolution 작업을 사용하여 흐름을 .zip 파일로 내보냅니다. 먼저 원하는 흐름을 솔루션에 추가합니다.

흐름이 솔루션에 포함되면 다음 작업을 호출합니다.

POST https://org00000000.crm0.dynamics.com/api/data/v9.1/ExportSolution
Accept: application/json
Authorization: Bearer ey...
Content-type: application/json
{
    "SolutionName" : "Awesome solution 1",
    "Managed": false
}

ExportSolutionExportSoutionFile 속성에서 base 64 인코딩 문자열을 반환합니다.

{
    "@odata.context": "https://org00000000.crm0.dynamics.com/api/data/v9.1/$metadata#Microsoft.Dynamics.CRM.ExportSolutionResponse",
    "ExportSolutionFile": "UEsDBBQAAgAI..."
}

그런 다음, 원본 제어에 이 파일을 저장하고 원하는 버전 관리 또는 배포 시스템을 사용할 수 있습니다.

흐름 가져오기

ImportSolution 작업을 호출하여 솔루션을 가져옵니다.

속성 이름 설명
OverwriteUnmanagedCustomizations Dataverse에 이러한 흐름의 기존 인스턴스가 없으면 이 플래그를 true로 설정하여 가져와야 합니다. 그렇지 않으면 덮어쓰지 않습니다.
PublishWorkflows 클래식 Dataverse 워크플로를 가져오기에서 활성화했는지 나타냅니다. 이 설정은 다른 형식의 흐름에 적용되지 않습니다.
ImportJobId 새로운 고유 GUID를 제공하여 가져오기 작업을 추적합니다.
CustomizationFile 솔루션을 포함하는 기본 64 인코딩 zip 파일입니다.
POST https://org00000000.crm0.dynamics.com/api/data/v9.1/ImportSolution
Accept: application/json
Authorization: Bearer ey...
Content-type: application/json
{
    "OverwriteUnmanagedCustomizations": false,
    "PublishWorkflows" : true,
    "ImportJobId" : "00000000-0000-0000-0000-000000000006",
    "CustomizationFile" : "UEsDBBQAAgAI..."
}

가져오기가 장기 실행 작업이므로 ImportSolution 작업에 대한 응답은 204 No content입니다. 진행률을 추적하려면 importjobs 개체에서 GET을 호출하여 원본 ImportSolution 작업에 포함된 ImportJobId를 제공합니다.

GET https://org00000000.crm0.dynamics.com/api/data/v9.1/importjobs(00000000-0000-0000-0000-000000000006)
Accept: application/json
Authorization: Bearer ey...

이 호출은 progress(완료 비율), startedoncompletedon(가져오기가 완료된 경우)을 비롯한 가져오기 작업의 상태를 반환합니다.

연결이 안 된 경우 connectionNames가 대상 환경에서 다르게 나타날 수 있으므로 가져오기가 성공적으로 완료되면 흐름에 대해 연결을 설정해야 합니다. 대상 환경에서 새 연결을 설정하는 경우 흐름의 소유자는 Power Automate 디자이너에서 해당 연결을 만들어야 합니다. 새 환경에서 연결이 이미 설정된 경우 연결의 이름을 사용하여 흐름의 clientDataPATCH할 수 있습니다.

Note

귀사의 설명서 언어 기본 설정에 대해 말씀해 주시겠습니까? 간단한 설문 조사에 응해주세요. (이 설문 조사는 영어로 되어 있습니다.)

이 설문 조사는 약 7분 정도 걸립니다. 개인 데이터는 수집되지 않습니다(개인정보처리방침).