共用方式為


在 Azure Logic Apps 中建立、編輯或擴充邏輯應用程式工作流程定義的 JSON

適用於:Azure Logic Apps (使用量)

當您在 Azure Logic Apps 中使用自動化工作流程建立企業整合解決方案時,基礎工作流程定義會針對其描述和驗證,使用簡單的宣告式 JavaScript 物件標記法 (JSON) 及工作流程定義語言 (WDL) 結構描述。 這些格式讓工作流程定義更容易閱讀及了解,且無須很多程式碼方面的知識。 如果您想要自動化邏輯應用程式資源的建立及部署,您可以將工作流程定義納入 Azure Resource Manager 範本中的 Azure 資源。 然後您可以使用 Azure PowerShellAzure CLIAzure Logic Apps REST API 來建立、管理及部署邏輯應用程式。

若要在 JSON 中使用工作流程定義,請在使用 Azure 入口網站 或 Visual Studio Code 時開啟程式代碼檢視編輯器。 您也可以將定義複製並貼到您想要的任何編輯器中。

注意

有些 Azure Logic Apps 功能只支援 JSON,不支援工作流程設計工具,例如在工作流程定義中定義參數和多個觸發程序。 因此,針對這些工作,您必須在程序代碼檢視或其他編輯器中工作。

編輯 JSON - Azure 入口網站

  1. [Azure 入口網站 搜尋] 方塊中,輸入並選取邏輯應用程式。 從 [ 邏輯應用程式] 頁面中,選取您想要的取用邏輯應用程式資源。

  2. 在邏輯應用程式功能表上的 [開發工具] 底下,選取 [邏輯應用程式程式代碼檢視]。

    程式代碼檢視編輯器隨即開啟,並以 JSON 格式顯示邏輯應用程式的工作流程定義。

編輯 JSON - Visual Studio Code

請參閱 在 Visual Studio Code 中編輯已部署的邏輯應用程式

編輯 JSON - Visual Studio

重要

適用於 Visual Studio 的 Azure Logic Apps 工具擴充功能已被取代,且不再接收更新。 若要使用本機開發環境建立和管理邏輯應用程式工作流程,請參閱下列檔:

您必須先安裝必要的工具才能在 Visual Studio 中處理取用工作流程定義。 在 Visual Studio 中,您可以開啟直接從 Azure 入口網站建立或部署的邏輯應用程式,或開啟 Visual Studio 中以 Azure Resource Manager 專案形式建立或部署的邏輯應用程式。

  1. 開啟包含邏輯應用程式的 Visual Studio 解決方案或 Azure 資源群組專案。

  2. 尋找並開啟工作流程定義,根據預設,該定義在 Resource Manager 範本中會以 LogicApp.json 的名稱顯示。

    您可以使用及自訂此範本,以部署至不同的環境。

  3. 開啟工作流程定義和範本的捷徑功能表。 選取 [以邏輯應用程式設計工具開啟]

    螢幕快照顯示Visual Studio解決方案中已開啟的邏輯應用程式。

    提示

    如果您在 Visual Studio 2019 中沒有此命令,請確定您有 Visual Studio 的最新更新。

  4. 在工作流程設計工具底部,選擇 [程式碼檢視]

    程式代碼檢視編輯器隨即開啟,並以 JSON 格式顯示您的工作流程定義。

  5. 若要返回設計工具檢視,請在程式代碼檢視編輯器底部選擇 [ 設計]。

參數

部署生命週期通常有用於開發、測試、預備和生產的不同環境。 當您想要將具有的值在整個邏輯應用程式中重複使用,而不需硬式編碼,或根據您的部署需求而有所不同時,您可以為工作流程定義建立 Azure Resource Manager 範本,以便您也可以將邏輯應用程式部署自動化。

請遵循以下一般步驟來「參數化」,或改為定義並使用這些值的參數。 然後,您可以在將值傳遞至範本的個別參數檔案中提供這些值。 如此一來,您可以更輕鬆地變更這些值,而不必更新和重新部署您的邏輯應用程式。 如需完整詳細資料,請參閱概觀:使用 Azure Resource Manager 範本自動部署邏輯應用程式

  1. 在您的範本中,定義範本參數和工作流程定義參數,以分別接受部署時和執行階段使用的值。

    範本參數是在工作流程定義外部的參數區段中定義的,而工作流程定義參數則是在工作流程定義內部的參數區段中定義的。

  2. 將硬式編碼值取代為參考這些參數的運算式。 範本運算式會使用與工作流程定義運算式不同的語法。

    不要在工作流程定義運算式內部使用範本運算式,以避免使您的程式碼複雜化,因為工作流程定義運算式是在執行階段評估,而範本運算式是在部署時評估。 只在工作流程定義外部使用範本運算式。 只在工作流程定義內部使用工作流程定義運算式。

    指定工作流程定義參數的值時,您可以使用工作流程定義外部的參數區段來參考範本參數,但該區段仍在邏輯應用程式的資源定義內部。 如此一來,您可以將範本參數值傳遞至工作流程定義參數。

  3. 將參數的值儲存在個別的參數檔案中,並隨著您的部署包含該檔案。

使用函式處理字串

Azure Logic Apps 具有各種函式可處理字串。 例如,假設您需要將公司名稱從訂單傳遞至另一個系統。 不過,您不確定字元編碼的正確處理方式。 您可以在這個字串上執行 base64 編碼,但若要避免在 URL 中逸出,您可改為取代數個字元。 此外,公司名稱只需要一個子字串,因為不會用到前五個字元。

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "order": {
      "defaultValue": {
        "quantity": 10,
        "id": "myorder1",
        "companyName": "NAME=Contoso"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "request": {
      "type": "Request",
      "kind": "Http"
    }
  },
  "actions": {
    "order": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://www.example.com/?id=@{replace(replace(base64(substring(parameters('order').companyName,5,sub(length(parameters('order').companyName), 5) )),'+','-') ,'/' ,'_' )}"
      }
    }
  },
  "outputs": {}
}

下列步驟說明此範例從內部到外部處理這個字串的方式:

"uri": "https://www.example.com/?id=@{replace(replace(base64(substring(parameters('order').companyName,5,sub(length(parameters('order').companyName), 5) )),'+','-') ,'/' ,'_' )}"

  1. length()取得公司名稱的 ,讓您可以取得字元總數。

  2. 若要取得較短的字串,請 減去 5

  3. 現在取得 substring()。 從索引 5 開始,並移至字串的其餘部分。

  4. 將這個子字串轉換成 base64() 字串。

  5. 現在,以 - 字元 replace() 所有 + 字元。

  6. 最後,以 _ 字元 replace() 所有 / 字元。

將清單項目對應到屬性值,然後使用對應作為參數

若要根據屬性值取得不同的結果,您可以建立可比對每個屬性值與結果的對應,然後使用該對應作為參數。

例如,此工作流程會將某些類別定義為參數,以及定義可比對這些類別與特定 URL 的對應。 首先,工作流程會取得文章清單。 接著,工作流程會使用此對應來尋找符合每篇文章之類別的 URL。

  • intersection() 會檢查類別是否符合已知的定義類別。

  • 在範例取得相符的類別之後,此範例會使用方括弧從地圖提取專案: parameters[...]

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "specialCategories": {
      "defaultValue": [
        "science",
        "google",
        "microsoft",
        "robots",
        "NSA"
      ],
      "type": "Array"
    },
    "destinationMap": {
      "defaultValue": {
        "science": "https://www.nasa.gov",
        "microsoft": "https://www.microsoft.com/en-us/default.aspx",
        "google": "https://www.google.com",
        "robots": "https://en.wikipedia.org/wiki/Robot",
        "NSA": "https://www.nsa.gov/"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "Request": {
      "type": "Request",
      "kind": "http"
    }
  },
  "actions": {
    "getArticles": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&q=https://feeds.wired.com/wired/index"
      }
    },
    "forEachArticle": {
      "type": "foreach",
      "foreach": "@body('getArticles').responseData.feed.entries",
      "actions": {
        "ifGreater": {
          "type": "if",
          "expression": "@greater(length(intersection(item().categories, parameters('specialCategories'))), 0)",
          "actions": {
            "getSpecialPage": {
              "type": "Http",
              "inputs": {
                "method": "GET",
                "uri": "@parameters('destinationMap')[first(intersection(item().categories, parameters('specialCategories')))]"
              }
            }
          }
        }
      },
      "runAfter": {
        "getArticles": [
          "Succeeded"
        ]
      }
    }
  }
}

使用 Date 函式取得資料

若要從原生不支援「觸發程序」的資料來源取得資料,您可改為使用 Date 函式來處理時間和日期。 例如,這個運算式會尋找這個工作流程從內部到外部的步驟需要花費多少時間:

"expression": "@less(actions('order').startTime,addseconds(utcNow(),-1))",
  1. order 動作,擷取 startTime

  2. 使用 utcNow() 函式取得目前的時間。

  3. 減去一秒: addSeconds(..., -1)

    您可以使用其他時間單位,例如 minuteshours

  4. 現在,您可以比較這兩個值。

    如果第一個值小於第二個值,則自從訂單最初提交以來已超過一秒。

若要將日期格式化,您可以使用字串格式器。 例如,若要取得 RFC1123,請使用 utcnow('r')。 深入了解日期格式化

{
  "$schema": "https://schema.management.azure.com/schemas/2016-06-01/Microsoft.Logic.json",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "order": {
      "defaultValue": {
        "quantity": 10,
        "id": "myorder-id"
      },
      "type": "Object"
    }
  },
  "triggers": {
    "Request": {
      "type": "request",
      "kind": "http"
    }
  },
  "actions": {
    "order": {
      "type": "Http",
      "inputs": {
        "method": "GET",
        "uri": "https://www.example.com/?id=@{parameters('order').id}"
      }
    },
    "ifTimingWarning": {
      "type": "If",
      "expression": "@less(actions('order').startTime,addseconds(utcNow(),-1))",
      "actions": {
        "timingWarning": {
          "type": "Http",
          "inputs": {
            "method": "GET",
            "uri": "https://www.example.com/?recordLongOrderTime=@{parameters('order').id}&currentTime=@{utcNow('r')}"
          }
        }
      },
      "runAfter": {
        "order": [
          "Succeeded"
        ]
      }
    }
  },
  "outputs": {}
}