Azure Logic Apps에서 인라인 코드 작업을 사용하여 워크플로에서 코드 조각 실행

적용 대상: Azure Logic Apps(사용량 + 표준)

많은 설정 없이 논리 앱 워크플로에서 코드 조각을 만들고 실행하려면 인라인 코드 기본 제공 커넥터를 사용할 수 있습니다. 이 커넥터에는 워크플로의 후속 작업에서 해당 출력을 사용할 수 있도록 코드 조각의 결과를 반환하는 작업이 있습니다.

현재 커넥터에는 다음 특성이 있는 코드 조각에 가장 적합한 단일 작업만 있지만 더 많은 작업이 개발 중입니다. 또한 인라인 코드 기본 제공 커넥터에는 논리 앱 워크플로가 소비 또는 표준인지에 따라 다른 제한이 있습니다.

작업 언어 언어 버전 실행 기간 데이터 크기 기타 참고 사항
Execute JavaScript Code JavaScript 표준:
Node.js 16.x.x

소비:
Node.js 8.11.1

자세한 내용은 표준 기본 제공 개체를 검토하세요.
5초 이내에 종료됩니다. 최대 50MB 크기의 데이터를 처리합니다. - 작업에서 지원되지 않는 변수 작업을 사용할 필요가 없습니다.

- JavaScript를 실행하기 위한 require() 함수를 지원하지 않습니다.

이러한 특성에 맞지 않는 코드를 실행하려면 대신 Azure Functions를 통해 함수를 만들고 호출할 수 있습니다.

이 문서에서는 Office 365 Outlook 트리거로 시작하는 예제 워크플로에서 작업이 작동하는 방법을 보여 줍니다. 워크플로는 연결된 Outlook 메일 계정에 새 메일이 도착하면 실행됩니다. 샘플 코드 조각은 메일 본문에 있는 모든 메일 주소를 추출하고 후속 작업에서 사용할 수 있는 출력으로 해당 주소를 반환합니다.

다음 다이어그램은 예제 워크플로의 강조 표시를 보여 줍니다.

사전 요구 사항

  • Azure 계정 및 구독 구독이 없는 경우 Azure 체험 계정에 등록합니다.

  • 코드 조각을 추가하려는 논리 앱 워크플로. 워크플로는 이미 트리거로 시작해야 합니다.

    이 문서 예제에서는 새 메일이 도착할 때라는 Office 365 Outlook 트리거를 사용합니다.

    워크플로가 없는 경우 다음 설명서를 확인하세요.

  • 논리 앱이 소비 또는 표준인지에 따라 다음 요구 사항을 검토합니다.

    • 소비: 논리 앱 리소스에서 Node.js 버전 8.11.10통합 계정에 대한 링크(비어 있거나 그렇지 않은 경우)가 필요합니다.

      중요

      사용 사례 또는 시나리오에 적합한 통합 계정을 사용하고 있는지 확인합니다.

      예를 들어, 무료 계층 통합 계정은 프로덕션 시나리오가 아닌 예비 시나리오 및 워크로드의 경우에만 사용량 및 처리량이 제한되며, SLA(서비스 수준 계약)에서 지원되지 않습니다.

      다른 통합 계정 계층은 비용이 발생하지만 SLA 지원을 포함하고, 더 많은 처리량을 제공하고 더 높은 한도가 적용됩니다. 통합 계정 계층, 제한가격 책정에 대해 자세히 알아보세요.

    • 표준: Node.js 버전 16.x.x가 필요하지만 통합 계정은 필요하지 않습니다.

JavaScript 코드 실행 작업 추가

  1. Azure Portal에서 디자이너를 통해 사용량 논리 앱 워크플로를 엽니다.

  2. 디자이너에서 다음 일반적인 단계에 따라 JavaScript 코드 실행이라는 인라인 코드 작업을 워크플로에 추가합니다.

    이 예제에서는 Office 365 Outlook 트리거에서 작업을 추가합니다. 기본적으로 작업에는 문을 포함한 일부 샘플 코드가 return 포함됩니다.

    기본 샘플 코드를 사용하여 JavaScript 코드 실행 작업을 보여 주는 스크린샷

  3. 코드 상자에서 샘플 코드를 삭제하고 코드를 입력합니다. 메서드 시그니처를 제외하고 메서드 내에 배치할 코드를 작성합니다.

    커서가 코드 상자에 있으면 동적 콘텐츠 목록이 나타납니다. 나중에 이 목록을 사용하지만 지금은 목록을 무시하고 열어 둘 수 있습니다. 숨기기를 선택하지 마세요.

    인식된 키워드를 입력하기 시작하면 사용 가능한 키워드 중에서 선택할 수 있도록 자동 완성 목록이 표시됩니다. 예를 들면 다음과 같습니다.

    사용 워크플로, JavaScript 코드 실행 작업 및 자동 완성 키워드(keyword) 목록을 보여 주는 스크린샷

    이 예제 코드 조각은 먼저 입력 텍스트에서 일치시킬 패턴을 지정하는 정규식을 저장하는 myResult라는 변수를 만듭니다. 그런 후 이 코드는 트리거 출력의 메일 메시지 본문 콘텐츠를 저장하는 email이라는 변수를 만듭니다.

    소비 워크플로, JavaScript 코드 실행 작업 및 변수를 만드는 예제 코드를 보여 주는 스크린샷

  4. 코드 상자에 커서가 있는 상태에서 열려 있는 동적 콘텐츠 목록에서 새 메일이 도착하는 경우 섹션을 찾고 메일 메시지의 본문을 참조하는 Body 속성을 선택합니다.

    소비 워크플로, JavaScript 코드 실행 작업, 동적 콘텐츠 목록 및 전자 메일 메시지의

    동적 콘텐츠 목록은 트리거의 출력과 해당 출력이 현재 포커스가 있는 편집 상자의 입력 형식과 일치하는 경우 이전 작업을 보여 줍니다. 이 목록을 사용하면 워크플로에서 이러한 출력을 더 쉽게 사용하고 참조할 수 있습니다. 이 예제의 경우 목록에는 메일 메시지의 Body 속성을 포함하여 Outlook 트리거의 출력이 표시됩니다.

    Body 속성을 선택한 후 JavaScript 코드 실행 작업은 토큰을 읽기 전용 workflowContext JSON 개체로 확인합니다. 이 개체는 코드 조각에서 입력으로 사용할 수 있습니다. workflowContext 개체에는 메일 메시지의 Body 속성과 다른 트리거 body 속성과 같은 트리거 및 워크플로의 이전 작업 출력에 대한 코드 액세스 권한을 부여하는 속성이 포함됩니다. workflowContext 개체에 대한 자세한 내용은 이 문서 뒤에 나오는 workflowContext 개체를 사용하여 트리거 및 작업 출력 참조를 참조하세요.

    중요

    코드 조각이 점(.) 연산자를 포함하는 작업 이름을 참조하는 경우 이러한 참조에서는 대괄호([]) 및 따옴표(“”)로 이러한 작업 이름을 묶어야 합니다. 예를 들면 다음과 같습니다.

    // Correct
    workflowContext.actions["my.action.name"].body

    // Incorrect
    workflowContext.actions.my.action.name.body

    또한 JavaScript 코드 실행 작업에서 Actions 매개 변수 를 추가한 다음 해당 매개 변수에 이러한 작업 이름을 추가해야 합니다. 자세한 내용은 이 문서의 뒷부분에 나오는 JavaScript 코드 실행 작업에 매개 변수로 종속성 추가 를 참조하세요.

  5. 트리거의 body 속성에서 선택한 메일 메시지의 Body 속성을 구분하려면 대신 두 번째 body 속성의 이름을 Body로 바꿉니다. 마지막에 닫는 세미콜론(;)을 추가하여 코드 문을 마칩니다.

    소비 논리 앱 워크플로, JavaScript 코드 실행 작업 및 닫는 세미콜론을 사용하여 이름이 바뀐

    JavaScript 코드 실행 작업에는 구문적으로 문이 필요하지 return 않습니다. 그러나 return 문을 포함하면 이후 작업에서 Result 토큰을 사용하여 워크플로의 뒷부분에서 작업 결과를 보다 쉽게 참조할 수 있습니다.

    이 예제에서 코드 조각은 메일 메시지 본문에서 지정된 정규식과 일치하는 항목을 찾는 match() 함수를 호출하여 결과를 반환합니다. HTML 테이블 만들기 작업은 결과 토큰을 사용하여 JavaScript 코드 실행 작업의 결과를 참조하고 단일 결과를 만듭니다.

    완성된 사용량 논리 앱 워크플로를 보여 주는 스크린샷.

  6. 완료되면 워크플로를 저장합니다.

workflowContext 개체를 사용하여 트리거 및 작업 출력 참조

디자이너의 코드 조각 내부에서 동적 콘텐츠 목록을 사용하여 트리거 또는 이전 작업의 출력을 참조하는 토큰을 선택할 수 있습니다. 토큰을 선택하면 JavaScript 코드 실행 작업이 해당 토큰을 읽기 전용 workflowContext JSON 개체로 확인합니다. 이 개체는 코드에서 트리거의 출력, 이전 작업 및 워크플로에 액세스할 수 있도록 합니다. 개체는 다음 구조를 사용하며 개체이기도 한 actions, triggerworkflow 속성을 포함합니다.

{
   "workflowContext": {
      "actions": {
         "<action-name-1>": @actions('<action-name-1>'),
         "<action-name-2>": @actions('<action-name-2>')
      },
      "trigger": {
         @trigger()
      },
      "workflow": {
         @workflow()
      }
   }
}

다음 표에는 이러한 속성에 대한 자세한 정보가 나와 있습니다.

속성 형식 Description
actions 개체 컬렉션 코드 조각이 실행되기 전에 실행되는 모든 이전 작업의 결과 개체입니다. 각 개체에는 키-값 쌍이 있습니다. 여기서 키는 작업 이름이고 값은 @actions('<action-name>') 식을 사용하여 actions() 함수를 호출할 때의 결과와 같습니다.

작업의 이름은 기본 워크플로 정의에 사용되는 것과 동일한 작업 이름을 사용합니다. 작업 이름의 공백(“ ”)은 밑줄(_)로 바뀝니다. 이 개체 컬렉션을 사용하면 현재 워크플로 인스턴스 실행의 작업 속성 값에 액세스할 수 있습니다.
trigger Object 결과가 trigger() 함수를 호출하는 것과 동일한 트리거의 결과 개체입니다. 이 개체를 사용하면 현재 워크플로 인스턴스 실행의 트리거 속성 값에 액세스할 수 있습니다.
workflow Object workflow() 함수를 호출하는 것과 동일한 워크플로 개체입니다. 이 개체를 사용하면 현재 워크플로 인스턴스 실행의 속성 값(예: 워크플로 이름, 실행 ID 등)에 액세스할 수 있습니다.

이 문서의 예제에서 workflowContext JSON 개체에는 Outlook 트리거의 다음 샘플 속성 및 값이 있을 수 있습니다.

{
   "workflowContext": {
      "trigger": {
         "name": "When_a_new_email_arrives",
         "inputs": {
            "host": {
               "connection": {
                  "name": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Web/connections/office365"
               }
            },
            "method": "get",
            "path": "/Mail/OnNewEmail",
            "queries": {
               "includeAttachments": "False"
            }
         },
         "outputs": {
            "headers": {
               "Pragma": "no-cache",
               "Content-Type": "application/json; charset=utf-8",
               "Expires": "-1",
               "Content-Length": "962095"
            },
            "body": {
               "Id": "AAMkADY0NGZhNjdhLTRmZTQtNGFhOC1iYjFlLTk0MjZlZjczMWRhNgBGAAAAAABmZwxUQtCGTqSPpjjMQeD",
               "DateTimeReceived": "2019-03-28T19:42:16+00:00",
               "HasAttachment": false,
               "Subject": "Hello World",
               "BodyPreview": "Hello World",
               "Importance": 1,
               "ConversationId": "AAQkADY0NGZhNjdhLTRmZTQtNGFhOC1iYjFlLTk0MjZlZjczMWRhNgAQ",
               "IsRead": false,
               "IsHtml": true,
               "Body": "Hello World",
               "From": "<sender>@<domain>.com",
               "To": "<recipient-2>@<domain>.com;<recipient-2>@<domain>.com",
               "Cc": null,
               "Bcc": null,
               "Attachments": []
            }
         },
         "startTime": "2019-05-03T14:30:45.971564Z",
         "endTime": "2019-05-03T14:30:50.1746874Z",
         "scheduledTime": "2019-05-03T14:30:45.8778117Z",
         "trackingId": "1cd5ffbd-f989-4df5-a96a-6e9ce31d03c5",
         "clientTrackingId": "08586447130394969981639729333CU06",
         "originHistoryName": "08586447130394969981639729333CU06",
         "code": "OK",
         "status": "Succeeded"
      },
      "workflow": {
         "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Logic/workflows/<logic-app-workflow-name>",
         "name": "<logic-app-workflow-name>",
         "type": "Microsoft.Logic/workflows",
         "location": "<Azure-region>",
         "run": {
            "id": "/subscriptions/<Azure-subscription-ID>/resourceGroups/<Azure-resource-group-name>/providers/Microsoft.Logic/workflows/<logic-app-workflow-name>/runs/08586453954668694173655267965CU00",
            "name": "08586453954668694173655267965CU00",
            "type": "Microsoft.Logic/workflows/runs"
         }
      }
   }
}

JavaScript 코드 실행 작업에 매개 변수로 종속성 추가

일부 시나리오에서는 JavaScript 코드 실행 작업에 코드가 종속성으로 참조하는 트리거 또는 작업의 출력을 포함하도록 명시적으로 요구해야 할 수 있습니다. 예를 들어 코드가 워크플로 런타임에 사용할 수 없는 출력을 참조하는 경우 이 추가 단계를 수행해야 합니다. 워크플로를 만드는 동안 Azure Logic Apps 엔진은 코드 조각을 분석하여 코드가 트리거 또는 작업 출력을 참조하는지 여부를 확인합니다. 이러한 참조가 있는 경우 엔진에는 해당 출력이 자동으로 포함됩니다. 워크플로 런타임에 참조된 트리거 또는 작업 출력이 workflowContext 개체에 없으면 엔진이 오류를 생성합니다. 이 오류를 resolve 위해 해당 트리거 또는 작업을 JavaScript 코드 실행 작업에 대한 명시적 종속성으로 추가해야 합니다. 이 단계를 수행해야 하는 또 다른 시나리오는 workflowContext 개체가 점 연산자(.)를 사용하는 트리거 또는 작업 이름을 참조하는 경우입니다.

트리거 또는 작업을 종속성으로 추가하려면 JavaScript 코드 실행 작업에 해당하는 트리거 또는 작업 매개 변수를 추가합니다. 그런 다음, 트리거 또는 작업 이름이 워크플로의 기본 JSON 정의에 표시되면 추가합니다.

참고

변수 작업, For each 또는 Until과 같은 루프 및 반복 인덱스를 명시적 종속성으로 추가할 수 없습니다.

코드를 다시 사용하려는 경우 항상 코드 조각 편집 상자를 사용하여 트리거 및 작업 출력을 참조해야 합니다. 이렇게 하면 트리거 또는 작업 출력을 명시적 종속성으로 추가하는 대신, 확인된 토큰 참조가 코드에 포함됩니다.

예를 들어 Office 365 Outlook 커넥터의 승인 메일 보내기 작업이 샘플 워크플로의 코드 조각 앞에 있다고 가정합니다. 다음 예제 코드 조각에는 이 작업의 SelectedOption 출력에 대한 참조가 포함되어 있습니다.

이 예제에서는 Actions 매개 변수만 추가한 다음, 작업의 JSON 이름 Send_approval_email을 매개 변수에 추가해야 합니다. 이렇게 하면 JavaScript 코드 실행 작업에 승인 이메일 보내기 작업의 출력이 명시적으로 포함되도록 지정합니다.

트리거 또는 작업의 JSON 이름 찾기

시작하기 전에 기본 워크플로 정의의 트리거 또는 작업에 대한 JSON 이름이 필요합니다.

  • 워크플로 정의에 있는 이름은 공백이 아닌 밑줄(_)을 사용합니다.

  • 작업 이름에서 점 연산자(.)를 사용하는 경우 해당 연산자를 포함합니다. 예를 들면 다음과 같습니다.

    My.Action.Name

  1. 워크플로 디자이너 도구 모음에서 코드 보기를 선택합니다. actions 개체에서 작업의 이름을 찾습니다.

    예를 들어, Send_approval_email승인 메일 보내기 작업의 JSON 이름입니다.

    JSON의 작업 이름을 보여 주는 스크린샷.

  2. 디자이너 뷰로 돌아가려면 코드 보기 도구 모음에서 디자이너를 선택합니다.

  3. 이제 JSON 이름을 JavaScript 코드 실행 작업에 추가합니다.

JavaScript 코드 실행 작업에 트리거 또는 작업 이름 추가

  1. JavaScript 코드 실행 작업에서 새 매개 변수 추가 목록을 엽니다.

  2. 매개 변수 목록에서 시나리오에 필요한 대로 다음 매개 변수를 선택합니다.

    매개 변수 Description
    actions 이전 작업의 출력을 종속성으로 포함합니다. 이 매개 변수를 선택하면 추가하려는 작업을 묻는 메시지가 표시됩니다.
    트리거 트리거의 출력을 종속성으로 포함합니다. 이 매개 변수를 선택하면 트리거 결과를 포함할지 여부를 묻는 메시지가 표시됩니다. 따라서 트리거 목록에서 를 선택합니다.
  3. 이 예제에서는 Actions 매개 변수를 선택합니다.

    Actions 매개 변수가 선택된 JavaScript Code 실행 작업을 보여 주는 스크린샷

  4. 작업 목록 - 1 상자에 작업의 JSON 이름을 입력합니다.

    작업 항목 -1 상자와 작업의 JSON 이름을 보여 주는 스크린샷

  5. 다른 작업 이름을 추가하려면 새 항목 추가를 선택합니다.

  6. 완료되면 워크플로를 저장합니다.

작업 참조

워크플로 정의 언어를 사용하는 기본 워크플로 정의에 포함된 JavaScript 코드 실행 작업의 구조 및 구문에 대한 자세한 내용은 이 작업의 참조 섹션을 참조하세요.

다음 단계