在Azure逻辑应用中,如何获取包含当前逻辑应用的资源组的名称?
我想在发送到另一个系统的JSON输出中包括一些跟踪详细信息。
我可以获取运行标识符(使用 @ {workflow()['run'] ['name']} ),
和当前的逻辑应用程序名称(使用 @ {workflow()['name']} )
但是,我无法弄清楚如何获得将逻辑应用程序部署到的资源组的名称。
作为最后的选择,我将使用部署模板使用的资源组名称,但是如果以后移动逻辑应用程序,那将是错误的。 我也可以使用标签,但是如果移动逻辑应用程序,那又可能会失调。
谢谢
答案 0 :(得分:0)
首先,我们可以创建一个“初始化变量”操作以获取工作流中的所有数据,如下图所示:
然后我们可以在工作流中找到数据:
{
"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))
最后,我得到了逻辑应用程序的资源组名称:
答案 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