2017-05-05 7 views
2

나는 다른 논리 패키지를 호출하는 Azure Logic App에 For_Each 루프를 가지고 있습니다.Azure Logic App의 For_Each 루프 출력을 단일 플랫 어레이에 병합하려면 어떻게해야합니까?

{ 
"Results": ["string a", "string b"] 
} 

그래서 부모 로직 앱 내의 for_each 루프의 출력은 다음과 같습니다 :

중첩 된 논리 앱의 각 반복의 결과는 다음과 같이 문자열 배열을 포함하는 JSON 개체입니다
[ 
{"Results": ["string a", "string b"]}, 
{"Results": ["string c", "string d"]} 
] 

나는이 모든 문자열을 다른 작업으로 전달할 수있는 단일 목록으로 만들고 싶습니다.

어떻게하면됩니까? 워크 플로우 정의 언어와 빌트인 함수를 사용하는 것이 가능한가, 아니면 외부 함수 (서비스 또는 Azure 함수)를 사용해야 하는가?

+1

정확한 시나리오를 위해 배열에 개체를 쉽게 추가 할 수있는 변수가 포함 된 배열 지원을 소개합니다. –

+0

@DerekLi 감사합니다. 이 질문을 닫으려면 대답으로 바꾸십시오. – JcFx

+0

실제로 예상 한 데이터에 액세스하는 또 다른 방법이 있는데 답을 추가했습니다. –

답변

1

@DerekLi의 유용한 의견을 상기에서 살펴보면 Logic Apps 스키마 버전 2016-06-01으로 작성하는 것은 불가능합니다.

Logic Apps의 강점 중 하나는 Azure의 기능을 활용하여 스키마 언어로는 해결할 수없는 문제를 해결할 수 있다는 것입니다.

재기록 배열은 함수 내 C#에서 간단하다 :

using System.Net; 

public class Result 
{ 
    public List<string> Results {get; set;} 
} 

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log) 
{ 
    log.Info("C# HTTP trigger function processed a request."); 

    var inputs = await req.Content.ReadAsAsync<List<Result>>(); 
    var outputs = new List<string>(); 

    foreach(var item in inputs) 
    { 
     log.Info(item.Results.ToString()); 
     outputs.AddRange(item.Results.Where(x => !string.IsNullOrEmpty(x))); 
    } 

    return req.CreateResponse(HttpStatusCode.OK, outputs); 
} 

이 기능은 다음 For_Each 루프의 결과를 전달할 수

"MyFunction": { 
    "inputs": { 
       "body": "@body('Parse_JSON')", 
       "function": { 
        "id": "/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{function-app-name}/functions/{function-name}" 
       }, 
       "method": "POST" 
      }, 
      "runAfter": { 
       "For_each": [ 
        "Succeeded" 
       ] 
      }, 
      "type": "Function" 
} 
0

도 방법이 워크 플로 정의 언어를 사용하여 작업을 수행 할 수 있습니다. (https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-workflow-definition-language).

stringreplace이라는 글꼴을 사용하면 json을 개체가 아닌 문자열로 사용할 수 있습니다.

귀하의 데이터 :

[ 
{"Results": ["string a", "string b"]}, 
{"Results": ["string c", "string d"]} 
] 

Flat_List 구성 요소 :

"Flat_List": { 
      "inputs": "@replace(replace(replace(string(body('Parse_JSON')),']},{\"Results\":[',','),'}]','}'),'[{','{')", 
      "runAfter": { 
       "Parse_JSON": [ 
        "Succeeded" 
       ] 
      }, 
      "type": "Compose" 
     }, 

은 무엇 여기 어떻게 여기

은 데이터와 Parse_JSON 조치를 따르는 Flat_List 행동은? 먼저 우리는 JSON 데이터를 받아 준다 string를 사용

[{"Results":["string a", "string b"]},{"Results":["string c", "string d"]}] 

우리는 모든 ]},{"Results":[,로 교체합니다.

}]을 모두 }으로 바꿉니다.

[{을 모두 {으로 바꿉니다.

"Parse_JSON_2": { 
       "inputs": { 
        "content": "@outputs('Flat_List')", 
        "schema": { 
         "properties": { 
          "Results": { 
           "items": { 
            "type": "string" 
           }, 
           "type": "array" 
          } 
         }, 
         "type": "object" 
        } 
       }, 
       "runAfter": { 
        "Flat_List": [ 
         "Succeeded" 
        ] 
       }, 
       "type": "ParseJson" 
      } 

당신은 다시 쉽게 될 수있는 푸른 기능과 같은 개념의 증거로 볼 수 있습니다 :

우리는 {"Results":["string a","string b","string c","string d"]}

그런 다음 당신이 JSON으로 다시 구문 분석 자유롭게 문자열을 얻을 나중에 읽을 수도 있지만 Logic App에서 작업을 수행하는 동안 새로운 Azure 함수를 인스턴스화하지 않으려는 많은 이유가있을 수 있습니다. 필요한 경우

자세한 내용은 문의 주시기 바랍니다 :) 당신은 배열의 모든 중첩 된 논리 Apps의 응답에 액세스 할를위한 각 루프의 외부 (nestedLogicApp를) @body 사용할 수 있습니다

0

.

3

어레이 변수로 작업하는 더 간단한 해결책이 있습니다. 각 들어 내부

"Initialize_Items_variable": { 
    "inputs": { 
     "variables": [ 
      { 
       "name": "Items", 
       "type": "Array", 
       "value": [] 
      } 
     ] 
    }, 
    "runAfter": {}, 
    "type": "InitializeVariable" 
} 

AppendToArrayVariable 액션을 사용 다음은 각 루프 들어 InitializeVariable 조치 변수를 선언 외부 최상위에 . 방금 호출 한 중첩 논리 응용 프로그램의 응답 객체를 추가 할 수 있습니다.

"Append_to_Items_variable": { 
    "inputs": { 
     "name": "Items", 
     "value": "@body('Nested_Logic_App_Response')" 
    }, 
    "runAfter": { 
    }, 
    "type": "AppendToArrayVariable" 
} 

희망이 있습니다.

+0

내 Logic App에서 이것을 사용하여 게시 해 주셔서 감사합니다. – Beefcake