Приложение Logic — ссылки и сопоставление полей в разных источниках данных JSON

#azure-logic-apps

#azure-logic-apps

Вопрос:

У меня есть два источника данных JSON:

Исходные данные 1:

 {
    "result": [
        {
            "resource_list": "7961b907db9253045fbdf1fabf9619d4,55617907db9253045fbdf1fabf9619d2",
            "project": "11216",
            "project_manager": {
                "value": "55617907db9253045fbdf1fabf9619d2"
            }
        }
    ]
}
 

Исходные данные 2:

 {
    "result": [
        {
        "sys_id": "7961b907db9253045fbdf1fabf9619d4",
            "email": "test.user1@mysite.com"
        },
        {
            "sys_id": "55617907db9253045fbdf1fabf9619d2",
            "email": "test.user2@mysite.com"
        }
    ]
}
 

Я хочу сослаться на «resource_list» и «project_manager» из исходных данных 1 в «sys_id» в исходных данных 2 и получить «email» из исходных данных 2, а затем составить окончательный вывод, как показано ниже:

Вывод:

 [
    {
    "__metadata":
        {
        "uri": "ProjectCode"
        },
    "externalProject": "11216",
    "projectCodeAssignment":
        [
            {
            "__metadata":
                {
                "uri": "projectCodeAssignment"
                },
            "externalProjectAssignee": "test.user1@mysite.com"
            },
            {
            "__metadata":
                {
                "uri": "projectCodeAssignment"
                },
            "externalProjectAssignee": "test.user2@mysite.com"
            }
        ]
    }
]
 

Возможно ли это сделать полностью в приложении Logic, не используя приложение Function или что-либо для его выполнения.

Комментарии:

1. Как дела? Ваша проблема решена? Не могли бы вы принять мой пост, если это полезно для вас?

Ответ №1:

Я пишу для вас js-скрипт. Для быстрой демонстрации я опустил некоторые данные, связанные с __metadata , кажется, это какой-то жесткий код, который здесь не так важен. Попробуйте логику ниже:

введите описание изображения здесь

Код в JS code действие:

 var body = workflowContext.trigger.outputs.body
var data1 = body.data1;
var data2 = body.data2;

var result = [];

data1.result.forEach(item =>{
    var resultItem = {};
    resultItem.externalProject = item.project;
    resultItem.projectCodeAssignment =[];
    
    var resourceIds = item.resource_list.split(',');
    resourceIds.forEach(id =>{
        var user = data2.result.find( ({ sys_id }) => sys_id === id );
        resultItem.projectCodeAssignment.push({"externalProjectAssignee": user.email})
    });
    result.push(resultItem);
    
})

return resu<
 

Тело запроса (ваши 2 набора данных названы как data1 и data2 здесь ):

 {
    "data1": {
        "result": [{
                "resource_list": "7961b907db9253045fbdf1fabf9619d4,55617907db9253045fbdf1fabf9619d2",
                "project": "11216",
                "project_manager": {
                    "value": "55617907db9253045fbdf1fabf9619d2"
                }
            }
        ]
    },
    "data2": {
        "result": [{
                "sys_id": "7961b907db9253045fbdf1fabf9619d4",
                "email": "test.user1@mysite.com"
            }, {
                "sys_id": "55617907db9253045fbdf1fabf9619d2",
                "email": "test.user2@mysite.com"
            }
        ]
    }
}
 

Результат:

введите описание изображения здесь

Комментарии:

1. Спасибо Стэнли за быстрое и простое решение; однако для запуска JavaScript нам требуется учетная запись интеграции, я полагаю? У меня нет учетной записи Интеграции. Извините, немного нового в этой области, есть какое-нибудь альтернативное решение для запуска JavaScript или чего-то еще в LogicApp, которое работает без необходимости использования учетной записи интеграции?

2. @VictorMcIntyre, добро пожаловать, да, учетная запись интеграции необходима, если вы используете JS здесь. Вы можете создать учетную запись интеграции, просто следуйте этому: docs.microsoft.com/en-us/azure/logic-apps /…