이 가이드에서는 동적 변수를 만드는 방법을 설명합니다.
가능한 경우 변수는 매니페스트 파일에서 입력 변수, 출력 변수, 또는 커스텀 리소스로정적으로 정의해야 합니다. 하지만 입력의 특성이 다양하기 때문에 사용자가 흐름을 구성할 때만 정의할 수 있는 변수가 필요한 경우도 있습니다. 예를 들어 Google Forms의 질문 및 답변 수(및 콘텐츠)는 흐름 구성 중에 특정 양식이 선택될 때까지 확인할 수 없습니다.
동적 변수는 매니페스트 파일과 단계의 코드에서 동적 출력 집합을 생성하는 입력을 정의할 수 있도록 하여 이러한 사례를 처리합니다.
매니페스트 파일에서 출력 변수 정의
매니페스트 파일에서 다음 단계를 따르세요.
inputs[]에서 동적 입력 값을 허용하는 입력 변수를 지정합니다.outputs[]에서 동적 출력 변수 집합을 반환하는 출력 변수를 지정합니다. 이 출력에dataType을"workflowResourceDefinitionId": "dynamic_resource_id"지정합니다.동적 변수를 처리할 커스텀 리소스를 정의합니다.
"resourceType": "DYNAMIC"및"providerFunction": "onDynamicProviderFunction"으로workflowResourceDefinitions를 지정합니다.id는outputs[]에 설정된workflowResourceDefinitionId와 일치해야 합니다. 커스텀 리소스에 대해 자세히 알아보려면 커스텀 리소스 정의를 참고하세요.dynamicResourceDefinitionProvider를 동적 입력 값을 허용하고 커스텀 리소스를 반환하는 구성 카드를 정의하고 반환하는 단계의 코드에 있는 해당 함수의 이름(이 예에서는onDynamicDefinitionFunction())으로 설정합니다.
JSON
"flows": {
"workflowElements" : [{
"id": "getDynamicVariable",
"state": "ACTIVE",
"name": "Get Dynamic Variable",
"description": "Get Dynamic Variable",
"workflowAction": {
"inputs": [
{
"id": "dynamic_resource_input",
"description": "Dynamic Resource Input",
"cardinality": "SINGLE",
"dataType": {
"basicType": "INTEGER"
}
}
],
"outputs": [
{
"id": "dynamic_resource_output",
"description": "Dynamic Data",
"cardinality": "SINGLE",
"dataType": {
"resourceType": {
"workflowResourceDefinitionId": "resource_definition_1"
}
}
}
],
"onConfigFunction": "onDynamicVariableConfigFunction",
"onExecuteFunction": "onDynamicVariableExecuteFunction"
}
}],
"workflowResourceDefinitions": [{
"id": "resource_definition_1",
"name": "Dynamic Resource",
"providerFunction": "onDynamicProviderFunction",
"resourceType" : "DYNAMIC"
}],
"dynamicResourceDefinitionProvider" : "onDynamicDefinitionFunction",
}
코드에서 출력 변수 정의
단계의 코드에는 다음 함수가 포함됩니다.
- 동적 입력 위젯이 있는 구성 카드를 빌드하고 반환하는
onDynamicVariableConfigFunction()이 함수의 이름은 매니페스트 파일의onConfigFunction()값과 일치해야 합니다. 동적 입력 위젯의 이름은 매니페스트 파일에 설정된id와 일치해야 합니다. 이 동적 입력 위젯을 사용하면 사용자가 Google Forms 선택과 같이 단계를 구성할 때 동적 변수를 설정할 수 있습니다. - 단계가 실행될 때 동적 변수 데이터를 출력으로 반환하는
onDynamicVariableExecuteFunction()이 함수의 이름은 매니페스트 파일의onExecuteFunction()값과 일치해야 합니다.returnOutputVariablesAction의variableData키는 매니페스트 파일에 설정된 출력 변수의id와 일치해야 합니다. 동적 리소스는e.workflow.resourceFieldsDefinitionRetrieval의 이벤트 객체에서 찾을 수 있습니다. 동적 리소스의 모든 입력은 구성 시점에 사용할 수 있어야 하므로 입력은 변수를 참조할 수 없습니다. - 이벤트 객체, 특히
resourceFieldsDefinitionRetrieval에서 동적 변수 데이터를 가져오고 이후 단계의 출력 변수 이름과onDynamicProviderFunction()이 각 출력 변수에 상응하는 값을 제공할 수 있도록 선택기를 제공하는resourceFieldsDefinitionRetrievedAction을 반환하는onDynamicDefinitionFunction()resourceId는 매니페스트 파일에 설정된workflowResourceDefinitions[]배열에 있는 항목의id와 일치해야 합니다. resourceId및workflowResourceDefinitionId에 액세스하여 선택기를 키로 사용하여 각 출력 변수의 값을 제공하는onDynamicProviderFunction()
Apps Script
function onDynamicVariableConfigFunction() {
let section = CardService.newCardSection()
.addWidget(
CardService.newTextInput()
.setFieldName("dynamic_resource_input")
.setTitle("Dynamic Resource Input")
.setHint("Input a Integer value between 1 and 3\(inclusive\) for corresponding number of output variables")
);
const card = CardService.newCardBuilder()
.addSection(section)
.build();
return card;
}
function onDynamicDefinitionFunction(e) {
console.log("Payload in onDynamicDefinitionFunction: ", JSON.stringify(e));
var input_value = e.workflow.resourceFieldsDefinitionRetrieval.inputs.dynamic_resource_input.integerValues[0];
let resourceDefinitions = AddOnsResponseService.newDynamicResourceDefinition()
.setResourceId("resource_definition_1")
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_1")
.setDisplayText("Question 1")
);
if (input_value == 2 || input_value == 3) {
resourceDefinitions = resourceDefinitions
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_2")
.setDisplayText("Question 2")
);
}
if (input_value == 3) {
resourceDefinitions = resourceDefinitions
.addResourceField(
AddOnsResponseService.newResourceField()
.setSelector("question_3")
.setDisplayText("Question 3")
);
}
let workflowAction = AddOnsResponseService.newResourceFieldsDefinitionRetrievedAction()
.addDynamicResourceDefinition(resourceDefinitions);
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
let renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}
function onDynamicVariableExecuteFunction(e) {
console.log("Payload in onDynamicVariableExecuteFunction: ", JSON.stringify(e));
let workflowAction = AddOnsResponseService.newReturnOutputVariablesAction()
.setVariableDataMap({
"dynamic_resource_output": AddOnsResponseService.newVariableData()
.addResourceReference("my_dynamic_resource_id")
});
let hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
let renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}
function onDynamicProviderFunction(e) {
console.log("Payload in onDynamicProviderFunction: ", JSON.stringify(e));
// resourceId == "my_dynamic_resource_id"
var resourceId = e.workflow.resourceRetrieval.resourceReference.resourceId;
// workflowResourceDefinitionId == "resource_definition_1"
var workflowResourceDefinitionId = e.workflow.resourceRetrieval.resourceReference.resourceType.workflowResourceDefinitionId;
const workflowAction = AddOnsResponseService.newResourceRetrievedAction()
.setResourceData(
AddOnsResponseService.newResourceData()
.addVariableData("question_1", AddOnsResponseService.newVariableData().addStringValue("Answer 1"))
.addVariableData("question_2", AddOnsResponseService.newVariableData().addStringValue("Answer 2"))
.addVariableData("question_3", AddOnsResponseService.newVariableData().addStringValue("Answer 3"))
);
const hostAppAction = AddOnsResponseService.newHostAppAction()
.setWorkflowAction(workflowAction);
const renderAction = AddOnsResponseService.newRenderActionBuilder()
.setHostAppAction(hostAppAction)
.build();
return renderAction;
}