如何从Logic App中获取资源组名称

时间:2019-09-19 16:29:43

标签: azure-logic-apps

在Azure逻辑应用中,如何获取包含当前逻辑应用的资源组的名称?

我想在发送到另一个系统的JSON输出中包括一些跟踪详细信息。

我可以获取运行标识符(使用 @ {workflow()['run'] ['name']} ),

和当前的逻辑应用程序名称(使用 @ {workflow()['name']}

但是,我无法弄清楚如何获得将逻辑应用程序部署到的资源组的名称。

作为最后的选择,我将使用部署模板使用的资源组名称,但是如果以后移动逻辑应用程序,那将是错误的。 我也可以使用标签,但是如果移动逻辑应用程序,那又可能会失调。

谢谢

3 个答案:

答案 0 :(得分:0)

首先,我们可以创建一个“初始化变量”操作以获取工作流中的所有数据,如下图所示:

enter image description here

然后我们可以在工作流中找到数据:

{
    "id": "/subscriptions/*****/resourceGroups/huryTest/providers/Microsoft.Logic/workflows/hurylogicblob",
    "name": "hurylogicblob",
    "type": "Microsoft.Logic/workflows",
    "location": "eastus",
    "tags": {},
    "run": {
        "id": "/subscriptions/*****/resourceGroups/huryTest/providers/Microsoft.Logic/workflows/hurylogicblob/runs/*****",
        "name": "*****",
        "type": "Microsoft.Logic/workflows/runs"
    }
}

它包含资源组名称,因此我们只需要获取属性“ id”并将其子字符串化即可获取资源组名称。 “ resourceGroups /”的长度为15,因此在下面的表达式中,我使用add(,15)和sub(,15)。

您可以使用以下表达式:

substring(workflow()['id'],add(indexOf(workflow()['id'],'resourceGroups/'),15),sub(sub(indexOf(workflow()['id'],'/providers'),indexOf(workflow()['id'],'resourceGroups/')),15))

最后,我得到了逻辑应用程序的资源组名称:

enter image description here

答案 1 :(得分:0)

一个简单的公式可能是:

split(workflow().id, "/")[4]

答案 2 :(得分:0)

如果要使用ARM模板部署Logic Apps(例如,在Visual Studio中进行编辑,签入Azure DevOps git repo并使用发布管道进行部署),则可以创建ARM参数:

        "resGroup_LA": {
          "type": "string",
          "defaultValue": "ResGroup LA default"
        }

然后,您可以创建工作流程参数:

      "resGroup_LA": {
        "value": "[parameters('resGroup_ARM')]"
      }

...并在参数初始化部分为其提供值:

class Program
{
    static void Main(string[] args)
    {
        Program p = new Program();
        p.Excel();
    }

    public void Excel()
    {
        Application xlApp = new Application();
        Workbook xlWorkBook;
        Worksheet xlWorkSheet;
        object misValue = Missing.Value;

        xlWorkBook = xlApp.Workbooks.Add(misValue);
        xlWorkSheet = (Worksheet)xlWorkBook.Worksheets.get_Item(1);

        for (int r = 1; r < 5; r++) //r stands for ExcelRow and c for ExcelColumn
        {
            // Its a my sample example: Excel row and column start positions for writing Row=1 and Col=1
            for (int c = 1; c < 3; c++)
            {
                if (c == 2)
                {
                    if (r == 1)
                    {
                        xlWorkSheet.Cells[r, c].Formula = "=SUM(A1+200)";
                    }
                    continue;
                }
                xlWorkSheet.Cells[r, c] = r;
            }
        }
        Range rng = xlWorkSheet.get_Range("B1");
        //  This is the main code we can range our excel sheet formulas
        rng.AutoFill(xlWorkSheet.get_Range("B1", "B4"), XlAutoFillType.xlLinearTrend);

        xlWorkBook.Worksheets[1].Name = "MySheetData";//Renaming the Sheet1 to MySheet

        xlWorkBook.SaveAs(@"E:\test.xlsx");

        xlWorkBook.Close();

        Marshal.ReleaseComObject(xlWorkSheet);
        Marshal.ReleaseComObject(xlWorkBook);
        Marshal.ReleaseComObject(xlApp);

    }
}

您可以通过类似的方式获取resourceGroup()的所有其他属性,请参见:https://docs.microsoft.com/en-us/azure/azure-resource-manager/templates/template-functions-resource?tabs=json#resourcegroup