Informationen zu den unterstützten Connectors für Application Integration.

E-Commerce-Beispielintegration

Diese Beispielintegration veranschaulicht einen Anwendungsfall für ein E-Commerce-Backend.

Weitere Informationen

Eine ausführliche Dokumentation, die dieses Codebeispiel enthält, finden Sie hier:

Codebeispiel

{
  "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"
  }]
}

Beispiel für einen Integrationsablauf

Die folgende Abbildung zeigt ein Beispiellayout des Integrationseditors für dieses Integrationscodebeispiel.

Bild mit beispielhaftem Integrationsablauf Bild mit beispielhaftem Integrationsablauf

Beispielintegration hochladen und ausführen

So laden Sie die Beispielintegration hoch und führen sie aus:

  1. Speichern Sie das Integrationsbeispiel als JSON-Datei auf Ihrem System.
  2. Rufen Sie in der Google Cloud Console die Seite Application Integration auf.

    Zur Seite „Application Integration“

  3. Klicken Sie im Navigationsmenü auf Integrations (Integrationen). Die Seite Integrations List (Integrationsliste) wird angezeigt.
  4. Wählen Sie eine vorhandene Integration aus oder erstellen Sie eine neue Integration, indem Sie auf Integration erstellen klicken.

    Wenn Sie eine neue Integration erstellen:

    1. Geben Sie im Dialogfeld Integration erstellen einen Namen und eine Beschreibung ein.
    2. Wählen Sie eine Region für die Integration aus.
    3. Wählen Sie ein Dienstkonto für die Integration aus. Sie können die Dienstkontodetails einer Integration jederzeit in der Integrationsübersicht in der Integrationssymbolleiste ändern oder aktualisieren.
    4. Klicken Sie auf Erstellen.

    Dadurch wird die Integration auf der Seite Integrationseditor geöffnet.

  5. Klicken Sie im Integrationseditor auf Menü zum Hochladen/Herunterladen und wählen Sie dann Integration hochladen aus.
  6. Wählen Sie im Dialogfeld „Dateibrowser“ die Datei aus, die Sie in Schritt 1 gespeichert haben, und klicken Sie dann auf Öffnen.

    Eine neue Version der Integration wird mit der hochgeladenen Datei erstellt.

  7. Klicken Sie im Integrationseditor auf Testen.
  8. Klicken Sie auf Integration testen. Dadurch wird die Integration ausgeführt und das Ausführungsergebnis wird im Dialogfeld Integration testen angezeigt.