Application Integration でサポートされているコネクタをご覧ください。
e コマースのサンプル統合
このサンプル統合は、e コマース バックエンドのシナリオのユースケースを示しています。
もっと見る
このコードサンプルを含む詳細なドキュメントについては、以下をご覧ください。
コードサンプル
{
"description": "The integration mimics the back office e-commerce order processing. The request is expected to contain order with one or more line items as json object with sku, quantity, price, vendor etc. If the total price of the order goes beyond $100 then there will be an email sent to approve the order else the order will be processed successfully. For all the items which have vendor as external, there will be an external order created by making a rest call to the external server. The response of the integration will be total order value, filtered list of external items and list of http response status received for each rest call made per external line_item.",
"triggerConfigs": [{
"label": "OrderProcessApiTrigger",
"startTasks": [{
"taskId": "1"
}],
"properties": {
"Trigger name": "ecom-order-processing_API_1"
},
"triggerType": "API",
"triggerNumber": "1",
"triggerId": "api_trigger/ecom-order-processing_API_1",
"position": {
"x": -294,
"y": -252
}
}, {
"label": "ReportExternalOrders",
"startTasks": [{
"taskId": "6"
}],
"properties": {
"Trigger name": "ecom-order-processing_API_2"
},
"triggerType": "API",
"triggerNumber": "2",
"triggerId": "api_trigger/ecom-order-processing_API_2",
"position": {
"x": 210,
"y": -84
}
}],
"taskConfigs": [{
"task": "SuspensionTask",
"taskId": "2",
"parameters": {
"customMessage": {
"key": "customMessage",
"value": {
"stringValue": "Hello user, approval request from EcomOrderProcessing integration."
}
},
"isApproved": {
"key": "isApproved",
"value": {
"stringArray": {
"stringValues": ["$`Task_2_isApproved`$"]
}
}
},
"suspensionExpiration": {
"key": "suspensionExpiration",
"value": {
"jsonValue": "{\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.SuspensionExpiration\",\n \"remindAfterMs\": 86400000,\n \"expireAfterMs\": 172800000\n}"
}
},
"notifications": {
"key": "notifications",
"value": {
"jsonValue": "{\n \"protoValues\": [{\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.Notification\",\n \"emailAddress\": {\n \"email\": \"\\u003cchange-this-to-email-id\\u003e\"\n }\n }]\n}"
}
}
},
"nextTasks": [{
"taskId": "3",
"condition": "$`Task_2_isApproved`$ \u003d true",
"displayName": "Proceed if approved"
}],
"taskExecutionStrategy": "WHEN_ALL_SUCCEED",
"displayName": "Approval",
"successPolicy": {
"finalState": "SUSPENDED"
},
"externalTaskType": "NORMAL_TASK",
"position": {
"x": -42
}
}, {
"task": "FieldMappingTask",
"taskId": "1",
"parameters": {
"FieldMappingConfigTaskParameterKey": {
"key": "FieldMappingConfigTaskParameterKey",
"value": {
"jsonValue": "{\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.FieldMappingConfig\",\n \"mappedFields\": [{\n \"inputField\": {\n \"fieldType\": \"DOUBLE_VALUE\",\n \"transformExpression\": {\n \"initialValue\": {\n \"referenceValue\": \"$orders_request$\"\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"GET_PROPERTY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"line_items\"\n }\n }\n }]\n }, {\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"FOR_EACH\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"protoValue\": {\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.TransformExpression\",\n \"initialValue\": {\n \"referenceValue\": \"~x\"\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"GET_PROPERTY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"quantity\"\n }\n }\n }]\n }, {\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"TO_DOUBLE\"\n }\n }\n }, {\n \"functionType\": {\n \"doubleFunction\": {\n \"functionName\": \"MULTIPLY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"referenceValue\": \"~x\"\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"GET_PROPERTY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"price_per_unit\"\n }\n }\n }]\n }, {\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"TO_DOUBLE\"\n }\n }\n }]\n }]\n }]\n }\n }\n }\n }]\n }, {\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"TO_DOUBLE_ARRAY\"\n }\n }\n }, {\n \"functionType\": {\n \"doubleArrayFunction\": {\n \"functionName\": \"SUM\"\n }\n }\n }]\n }\n },\n \"outputField\": {\n \"referenceKey\": \"$total_order_value$\",\n \"fieldType\": \"DOUBLE_VALUE\",\n \"cardinality\": \"OPTIONAL\"\n }\n }]\n}"
}
}
},
"nextTasks": [{
"taskId": "2",
"condition": "$total_order_value$ \u003e\u003d $threshold_order_value$",
"displayName": "TotalOrderValue Above Threshold ",
"description": "Checks if the total order value is greater than or equal to $100"
}, {
"taskId": "3",
"condition": "$total_order_value$ \u003c $threshold_order_value$",
"displayName": "TotalOrderValue Below Threshold",
"description": "Checks if the total order value is less than $100"
}],
"taskExecutionStrategy": "WHEN_ALL_SUCCEED",
"displayName": "Find Total Order Price",
"externalTaskType": "NORMAL_TASK",
"position": {
"x": -294,
"y": -126
}
}, {
"task": "FieldMappingTask",
"taskId": "5",
"parameters": {
"FieldMappingConfigTaskParameterKey": {
"key": "FieldMappingConfigTaskParameterKey",
"value": {
"jsonValue": "{\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.FieldMappingConfig\",\n \"mappedFields\": [{\n \"inputField\": {\n \"fieldType\": \"JSON_VALUE\",\n \"transformExpression\": {\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"{\\\"STATUS\\\" : \\\"PROCESSING_COMPLETE\\\"}\"\n }\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"stringFunction\": {\n \"functionName\": \"TO_JSON\"\n }\n }\n }]\n }\n },\n \"outputField\": {\n \"referenceKey\": \"$orders_response$\",\n \"fieldType\": \"JSON_VALUE\",\n \"cardinality\": \"OPTIONAL\"\n }\n }]\n}"
}
}
},
"taskExecutionStrategy": "WHEN_ALL_SUCCEED",
"displayName": "Build Response",
"externalTaskType": "NORMAL_TASK",
"position": {
"x": -294,
"y": 378
}
}, {
"task": "SubWorkflowForEachLoopV2Task",
"taskId": "4",
"parameters": {
"iterationElementMapping": {
"key": "iterationElementMapping",
"value": {
"stringValue": "sub_integration_input"
}
},
"aggregatorParameterMapping": {
"key": "aggregatorParameterMapping",
"value": {
"jsonValue": "{\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.ParameterMap\",\n \"entries\": [{\n \"key\": {\n \"literalValue\": {\n \"stringValue\": \"`Task_6_responseStatus`\"\n }\n },\n \"value\": {\n \"literalValue\": {\n \"stringValue\": \"rest_call_response_status\"\n }\n }\n }]\n}"
}
},
"triggerId": {
"key": "triggerId",
"value": {
"stringValue": "api_trigger/ecom-order-processing_API_2"
}
},
"loopMetadata": {
"key": "loopMetadata",
"value": {
"stringArray": {
"stringValues": ["$`Task_4_loopMetadata`$"]
}
}
},
"disableEucPropagation": {
"key": "disableEucPropagation",
"value": {
"booleanValue": false
}
},
"listToIterate": {
"key": "listToIterate",
"value": {
"stringValue": "$filtered_external_items$"
}
},
"workflowName": {
"key": "workflowName",
"value": {
"stringValue": "ExampleIntegration-EcomOrderProcessing"
}
},
"requestParameterMapping": {
"key": "requestParameterMapping"
},
"overrideParameterMapping": {
"key": "overrideParameterMapping"
}
},
"nextTasks": [{
"taskId": "5"
}],
"taskExecutionStrategy": "WHEN_ALL_SUCCEED",
"displayName": "For Each Loop",
"externalTaskType": "NORMAL_TASK",
"position": {
"x": -294,
"y": 252
}
}, {
"task": "FieldMappingTask",
"taskId": "3",
"parameters": {
"FieldMappingConfigTaskParameterKey": {
"key": "FieldMappingConfigTaskParameterKey",
"value": {
"jsonValue": "{\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.FieldMappingConfig\",\n \"mappedFields\": [{\n \"inputField\": {\n \"fieldType\": \"JSON_VALUE\",\n \"transformExpression\": {\n \"initialValue\": {\n \"referenceValue\": \"$orders_request$\"\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"GET_PROPERTY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"line_items\"\n }\n }\n }]\n }, {\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"FILTER_ELEMENTS\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"protoValue\": {\n \"@type\": \"type.googleapis.com/enterprise.crm.eventbus.proto.TransformExpression\",\n \"initialValue\": {\n \"referenceValue\": \"~x\"\n },\n \"transformationFunctions\": [{\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"GET_PROPERTY\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"vendor\"\n }\n }\n }]\n }, {\n \"functionType\": {\n \"jsonFunction\": {\n \"functionName\": \"TO_STRING\"\n }\n }\n }, {\n \"functionType\": {\n \"stringFunction\": {\n \"functionName\": \"EQUALS\"\n }\n },\n \"parameters\": [{\n \"initialValue\": {\n \"literalValue\": {\n \"stringValue\": \"External\"\n }\n }\n }]\n }]\n }\n }\n }\n }]\n }]\n }\n },\n \"outputField\": {\n \"referenceKey\": \"$filtered_external_items$\",\n \"fieldType\": \"JSON_VALUE\",\n \"cardinality\": \"OPTIONAL\"\n }\n }]\n}"
}
}
},
"nextTasks": [{
"taskId": "4"
}],
"taskExecutionStrategy": "WHEN_ANY_SUCCEED",
"displayName": "Filter External Items",
"description": "Filtering out line_items which have vendor as \"External\" so that we can place order request to the vendor",
"externalTaskType": "NORMAL_TASK",
"position": {
"x": -294,
"y": 126
}
}, {
"task": "GenericRestV2Task",
"taskId": "6",
"parameters": {
"throwError": {
"key": "throwError",
"value": {
"booleanValue": false
}
},
"responseBody": {
"key": "responseBody",
"value": {
"stringArray": {
"stringValues": ["$`Task_6_responseBody`$"]
}
}
},
"disableSSLValidation": {
"key": "disableSSLValidation",
"value": {
"booleanValue": false
}
},
"httpParams": {
"key": "httpParams"
},
"responseHeader": {
"key": "responseHeader",
"value": {
"stringArray": {
"stringValues": ["$`Task_6_responseHeader`$"]
}
}
},
"userAgent": {
"key": "userAgent",
"value": {
"stringValue": ""
}
},
"httpMethod": {
"key": "httpMethod",
"value": {
"stringValue": "POST"
}
},
"responseStatus": {
"key": "responseStatus",
"value": {
"stringArray": {
"stringValues": ["$`Task_6_responseStatus`$"]
}
}
},
"url": {
"key": "url",
"value": {
"stringValue": "https://mocktarget.apigee.net/echo"
}
},
"urlFetchingService": {
"key": "urlFetchingService",
"value": {
"stringValue": "HARPOON"
}
},
"useSSL": {
"key": "useSSL",
"value": {
"booleanValue": false
}
},
"requestorId": {
"key": "requestorId",
"value": {
"stringValue": ""
}
},
"urlQueryStrings": {
"key": "urlQueryStrings"
},
"requestBody": {
"key": "requestBody",
"value": {
"stringValue": "$sub_integration_input$"
}
},
"followRedirects": {
"key": "followRedirects",
"value": {
"booleanValue": true
}
},
"additionalHeaders": {
"key": "additionalHeaders"
}
},
"taskExecutionStrategy": "WHEN_ALL_SUCCEED",
"displayName": "Call REST Endpoint",
"externalTaskType": "NORMAL_TASK",
"position": {
"x": 210,
"y": 42
}
}],
"integrationParameters": [{
"key": "total_order_value",
"dataType": "DOUBLE_VALUE",
"displayName": "total_order_value",
"inputOutputType": "OUT"
}, {
"key": "`Task_4_loopMetadata`",
"dataType": "JSON_VALUE",
"displayName": "`Task_4_loopMetadata`",
"isTransient": true,
"producer": "1_4"
}, {
"key": "threshold_order_value",
"dataType": "DOUBLE_VALUE",
"defaultValue": {
"doubleValue": 100.0
},
"displayName": "threshold_order_value"
}, {
"key": "filtered_external_items",
"dataType": "JSON_VALUE",
"displayName": "filtered_external_items",
"inputOutputType": "OUT"
}, {
"key": "orders_request",
"dataType": "JSON_VALUE",
"defaultValue": {
"jsonValue": "{\n \"order_no\": \"12345\",\n \"buyer_id\": \"raambo\",\n \"line_items\": [{\n \"line\": 1.0,\n \"sku\": \"tr100\",\n \"vendor\": \"Internal\",\n \"quantity\": 1.0,\n \"price_per_unit\": 10.0\n }, {\n \"line\": 2.0,\n \"sku\": \"tbz\",\n \"vendor\": \"External\",\n \"quantity\": 24.0,\n \"price_per_unit\": 1.0\n }]\n}"
},
"displayName": "orders_request",
"inputOutputType": "IN",
"jsonSchema": "{\n \"properties\": {\n \"buyer_id\": {\n \"type\": \"string\"\n },\n \"line_items\": {\n \"items\": {\n \"properties\": {\n \"price_per_unit\": {\n \"type\": \"number\"\n },\n \"sku\": {\n \"type\": \"string\"\n },\n \"vendor\": {\n \"type\": \"string\"\n },\n \"line\": {\n \"type\": \"number\"\n },\n \"quantity\": {\n \"type\": \"number\"\n }\n },\n \"type\": \"object\"\n },\n \"type\": \"array\"\n },\n \"order_no\": {\n \"type\": \"string\"\n }\n },\n \"type\": \"object\",\n \"$schema\": \"http://json-schema.org/draft-04/schema#\"\n}"
}, {
"key": "rest_call_response_status",
"dataType": "STRING_ARRAY",
"displayName": "rest_call_response_status",
"inputOutputType": "OUT"
}, {
"key": "`Task_2_isApproved`",
"dataType": "BOOLEAN_VALUE",
"displayName": "`Task_2_isApproved`",
"isTransient": true,
"producer": "1_2"
}, {
"key": "`Task_6_responseHeader`",
"dataType": "STRING_VALUE",
"displayName": "`Task_6_responseHeader`",
"isTransient": true,
"producer": "1_6"
}, {
"key": "`Task_6_responseBody`",
"dataType": "STRING_VALUE",
"displayName": "`Task_6_responseBody`",
"isTransient": true,
"producer": "1_6"
}, {
"key": "`Task_6_responseStatus`",
"dataType": "STRING_VALUE",
"defaultValue": {
"stringValue": ""
},
"displayName": "`Task_6_responseStatus`",
"inputOutputType": "OUT",
"isTransient": true,
"producer": "1_6"
}, {
"key": "orders_response",
"dataType": "JSON_VALUE",
"displayName": "orders_response",
"inputOutputType": "OUT"
}, {
"key": "sub_integration_input",
"dataType": "JSON_VALUE",
"defaultValue": {
"jsonValue": "{\n}"
},
"displayName": "sub_integration_input",
"inputOutputType": "IN"
}]
}
統合フローのサンプル
次の図は、この統合コードサンプルの統合エディタのサンプル レイアウトを示しています。
サンプル統合をアップロードして実行する
サンプル統合をアップロードして実行するには、次の手順に従います。
- 統合サンプルを .json ファイルとしてシステムに保存します。
- Google Cloud コンソールで [Application Integration] ページに移動します。
- ナビゲーション メニューで [統合] をクリックします。[統合] のページが表示されます。
- 既存の統合を選択するか、[統合を作成] をクリックして新しい統合を作成します。
新しい統合を作成する場合:
- [統合の作成] ダイアログで名前と説明を入力します。
- 統合のリージョンを選択します。
- 統合用のサービス アカウントを選択します。統合のサービス アカウントの詳細は、統合ツールバーの info [統合の概要] ペインでいつでも変更または更新できます。
- [作成] をクリックします。
統合エディタで統合が開きます。
- 統合エディタで、publish [アップロード / ダウンロード メニュー] をクリックし、[統合をアップロード] を選択します。
- ファイル ブラウザ ダイアログで、ステップ 1 で保存したファイルを選択し、[開く] をクリックします。
統合の新しいバージョンは、アップロードされたファイルを使用して作成されます。
- 統合エディタで [テスト] をクリックします。
- [テスト統合] をクリックします。統合が実行され、[テスト統合] ペインに実行結果が表示されます。