Consulta i connettori supportati per Application Integration.

Integrazione di esempio dell'e-commerce

Questa integrazione di esempio illustra un caso d'uso di scenario di backend di e-commerce.

Per saperne di più

Per la documentazione dettagliata che include questo esempio di codice, vedi quanto segue:

Esempio di codice

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

Flusso di integrazione di esempio

La seguente immagine mostra un layout di esempio dell'editor di integrazione per questo esempio di codice di integrazione.

Immagine che mostra il flusso di integrazione di esempio Immagine che mostra il flusso di integrazione di esempio

Caricare ed eseguire l'integrazione di esempio

Per caricare ed eseguire l'integrazione di esempio, segui questi passaggi:

  1. Salva il campione di integrazione come file .json sul tuo sistema.
  2. Nella console Google Cloud, vai alla pagina Application Integration.

    Vai ad Application Integration

  3. Fai clic su Integrazioni nel menu di navigazione a sinistra per aprire la pagina Integrazioni.
  4. Seleziona un'integrazione esistente o creane una nuova facendo clic su Crea integrazione.

    Se stai creando una nuova integrazione:

    1. Inserisci un nome e una descrizione nella finestra di dialogo Crea integrazione.
    2. Seleziona una regione per l'integrazione.
    3. Seleziona un account di servizio per l'integrazione. Puoi modificare o aggiornare i dettagli dell'account di servizio di un'integrazione in qualsiasi momento dal riquadro Riepilogo integrazione nella barra degli strumenti dell'integrazione.
    4. Fai clic su Crea.

    Si apre l'integrazione nell'editor integrazioni.

  5. Nell'editor dell'integrazione, fai clic su Menu Carica/Scarica e poi seleziona Carica integrazione.
  6. Nella finestra di dialogo del browser di file, seleziona il file che hai salvato nel passaggio 1 e poi fai clic su Apri.

    Viene creata una nuova versione dell'integrazione utilizzando il file caricato.

  7. Nell'editor dell'integrazione, fai clic su Testa.
  8. Fai clic su Test integration (Prova integrazione). L'integrazione viene eseguita e il risultato dell'esecuzione viene visualizzato nel riquadro Testa integrazione.