#dataweave #mule4
#передача данных #mule4
Вопрос:
Я новичок в использовании преобразования dataweave, я пытаюсь написать выражение Mule 4 dataweave для преобразования входного JSON в выходной формат XML, у меня есть полезная нагрузка в формате JSON, и я хочу преобразовать ее в определенный формат XML, ниже приведен фактический JSON вместе с выходным XML
тег product-id (XML) будет получен из атрибута = name тега PBSI__Item__r JSON, а значение распределения в XML — из атрибута name тега PBSI__Inventory__r.
JSON:
[
{
"PBSI__Item__r": {
"Id": null,
"type": "PBSI__PBSI_Item__c",
"Name": "116065"
},
"PBSI__Inventory__r": [
{
"Id": null,
"type": "PBSI__PBSI_Inventory__c",
"PBSI__Real_Quantity__c": "13.0"
}
],
"PBSI__Location__r": {
"Id": null,
"type": "PBSI__PBSI_Location__c",
"Name": "OB043"
},
"Id": null,
"type": "PBSI__Lot__c"
},
{
"PBSI__Item__r": {
"Id": null,
"type": "PBSI__PBSI_Item__c",
"Name": "116066"
},
"PBSI__Inventory__r": [
{
"Id": null,
"type": "PBSI__PBSI_Inventory__c",
"PBSI__Real_Quantity__c": "1.0"
}
],
"PBSI__Location__r": {
"Id": null,
"type": "PBSI__PBSI_Location__c",
"Name": "OA011"
},
"Id": null,
"type": "PBSI__Lot__c"
}
]
вывод XML:
<?xml version='1.0' encoding='UTF-8'?>
<inventory xmlns="http://www.demandware.com/xml/impex/inventory/2007-05-31">
<inventory-list>
<header list-id="Hastens_Inventory">
<default-instock>false</default-instock>
<use-bundle-inventory-only>false</use-bundle-inventory-only>
</header>
<records>
<record product-id="116065">
<allocation>13</allocation>
<allocation-timestamp>2019-04-24T07:09:51.954Z</allocation-timestamp>
</record>
<record product-id="116066">
<allocation>1</allocation>
<allocation-timestamp>2019-04-24T07:09:51.965Z</allocation-timestamp>
</record>
</records>
</inventory-list>
</inventory>
Комментарии:
1. Вы должны предоставить правила для преобразования JSON в XML, прежде чем пытаться написать сценарий DataWeave. Откуда должен взяться каждый элемент и атрибут?
2. Спасибо, алед, я добавил его сейчас
Ответ №1:
Это должно помочь вам найти решение, а также узнать, как это сделать, я не предоставил полного решения, чтобы вы могли использовать это в качестве отправной точки (выполнено почти на 80%).
Также, чтобы включить пространство имен, перейдите по ссылке https://docs.mulesoft.com/mule-runtime/4.3/dataweave-cookbook-include-xml-namespaces
{
inventory:{
inventorylist: {
header @("list-id":"Hastens_Inventory"):
{
"default-instock":false,
"use-bundle-inventory-only":false
},
records: {(payload map
{
record @("product-id": $.PBSI__Item__r.Name): {
allocation: $.PBSI__Inventory__r[0].PBSI__Real_Quantity__c,
"allocation-timestamp": now()
}
})}
}
}
}
Комментарии:
1. Салим, ты забыл
{(...)}
обо всемpayload map ...
. Это генерирует несколькоrecords
элементов2. Привет, Хорхе, ты прав, мог бы помочь мне сделать это, я пробовал многими способами, но получал синтаксическую ошибку
3. Я оставил это, чтобы Панкадж мог немного поработать над сценарием. Решение не было полномасштабным, так что наряду с решением также требуется некоторое обучение / работа.
4. Обновлен скрипт для объединения записей в один экземпляр.