Благодарим вас за предоставление всех необходимых ресурсов / кода для полного воспроизведения проблемы. Я считаю, что есть несколько проблем, которые я опишу ниже и предоставлю полный фиксированный / рабочий пример внизу.
Проблема: соблюдение определения типа заказа.
На основе вашего полного определения модели DMN, Заказ (значение узла входных данных) должен быть одноэлементным составным объектом со свойствами "itemName", "price", "quantity"
; каждое из этих свойств является коллекцией.
Таким образом, ввод должен быть примерно таким:
order: {
itemName: [item1, item2, item3]
quantity: [100, 20, 300]
price: [1000, 200, 3000]
}
Проблема: соблюдение функции zip в соответствии с определением типа заказа
На основе ваше полное определение модели DMN, правильное определение для функции zip должно быть:
zip(["Item Name", "Item Price", "Item Quantity"], order.itemName, order.price, order.quantity)
поскольку я предполагаю, что вы хотите сделать, основываясь на полном определении модели DMN, преобразовать данные в следующую структуру
collateOrder: [
{
Item Name=item1,
Item Quantity=100,
Item Price=1000
},
{
Item Name=item2,
Item Quantity=20,
Item Price=200
},
{
Item Name=item3,
Item Quantity=300,
Item Price=3000
}
]
Проблема: функция агрегирования MID
Мне кажется, я обнаружил ошибку в реализации расширения Signavio; спасибо за сообщение, это будет исследовано дополнительно.
Однако вы можете выполнить требуемую бизнес-логику c, используя гораздо более простое стандартное буквальное выражение DMN, не полагаясь на какое-либо расширение, выходящее за рамки того, что определено только в Сама спецификация DMN:
sum( for order in collateOrder return ( order.Item Price * order.Item Quantity ) )
это не требует какого-либо расширения (Signavio), и это действительный DMN.
Напомним.
Java тест Фрагмент кода:
DMNContext context = runtime.newContext();
List<String> itemList = Arrays.asList("item1", "item2", "item3");
List<BigDecimal> priceList = Arrays.asList(new BigDecimal(1000), new BigDecimal(200), new BigDecimal(3000));
List<Integer> qtyList = Arrays.asList(100, 20, 300);
Map<String, Object> order = new HashMap<>();
order.put("itemName", itemList);
order.put("price", priceList);
order.put("quantity", qtyList);
context.set("order", order);
DMNResult evaluateAll = runtime.evaluateAll(model0, context);
фиксированная модель DMN, не требующая специального расширения:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions namespace="http://www.signavio.com/dmn/1.1/diagram/8462cb232d98419493d4ef846516a070.xml" exporterVersion="13.3.2" name="MID Example" id="id-f1fe73d348e342d2a6f0435b38ce14e6" sigExt:revisionId="9f563b074ba844d4b9d1fcd6bead7580" sigExt:revisionNumber="1" xmlns="http://www.omg.org/spec/DMN/20151101/dmn.xsd" xmlns:sig="http://www.signavio.com/dmn/1.1/diagram/8462cb232d98419493d4ef846516a070.xml" xmlns:sigExt="http://www.signavio.com/schema/dmn/1.1/" xmlns:feel="http://www.omg.org/spec/FEEL/20140401">
<extensionElements/>
<itemDefinition isCollection="false" name="calculatePriceAfterDiscount" id="id-f8c81ba73d98a8a51216f4583ed31dc9" label="Calculate Price After Discount">
<typeRef>feel:number</typeRef>
</itemDefinition>
<itemDefinition isCollection="false" name="calculatePrice" id="id-e13d8570789c69dec9515bd8b9159f2d" label="Calculate Price ">
<typeRef>feel:number</typeRef>
</itemDefinition>
<itemDefinition isCollection="false" name="determineDiscount" id="id-99dded75dc910f4c4b3e2f1d3471cd10" label="Determine Discount %">
<typeRef>feel:number</typeRef>
</itemDefinition>
<itemDefinition isCollection="false" name="discount" id="id-e41b37d9d6d86919af6290e062ee6bbe" label="Discount">
<typeRef>feel:number</typeRef>
</itemDefinition>
<itemDefinition isCollection="false" name="collateOrder2" id="id-a4abe03e2f888a7830f15614f50bc45a" label="Collate Order">
<itemComponent isCollection="false" name="itemName" id="id-a4abe03e2f888a7830f15614f50bc45a-relation-ItemName" label="Item Name" sigExt:slotId="Item Name">
<typeRef>feel:string</typeRef>
</itemComponent>
<itemComponent isCollection="false" name="itemPrice" id="id-a4abe03e2f888a7830f15614f50bc45a-relation-ItemPrice" label="Item Price" sigExt:slotId="Item Price">
<typeRef>feel:number</typeRef>
</itemComponent>
<itemComponent isCollection="false" name="itemQuantity" id="id-a4abe03e2f888a7830f15614f50bc45a-relation-ItemQuantity" label="Item Quantity" sigExt:slotId="Item Quantity">
<typeRef>feel:number</typeRef>
</itemComponent>
</itemDefinition>
<itemDefinition isCollection="false" name="calculateTotalPrice" id="id-753285786a1cec905c139529a673b0fe" label="Calculate Total Price">
<typeRef>feel:number</typeRef>
</itemDefinition>
<itemDefinition isCollection="false" name="itemPrice" id="id-1a281dc9cb860f8ffd0c4cef9485f6a0" label="Item Price ">
<typeRef>feel:number</typeRef>
</itemDefinition>
<itemDefinition isCollection="true" name="collateOrder" id="id-8cbabc9f5673d5e84b524b68155dcb45" label="Collate Order">
<itemComponent isCollection="false" name="itemName" id="id-8cbabc9f5673d5e84b524b68155dcb45-relation-ItemName" label="Item Name" sigExt:slotId="Item Name">
<typeRef>feel:string</typeRef>
</itemComponent>
<itemComponent isCollection="false" name="itemPrice" id="id-8cbabc9f5673d5e84b524b68155dcb45-relation-ItemPrice" label="Item Price" sigExt:slotId="Item Price">
<typeRef>feel:number</typeRef>
</itemComponent>
<itemComponent isCollection="false" name="itemQuantity" id="id-8cbabc9f5673d5e84b524b68155dcb45-relation-ItemQuantity" label="Item Quantity" sigExt:slotId="Item Quantity">
<typeRef>feel:number</typeRef>
</itemComponent>
</itemDefinition>
<itemDefinition isCollection="false" name="order" id="id-4cc8046b78214ad11657d5b06436db21" label="Order ">
<itemComponent isCollection="true" name="price" id="id-4cc8046b78214ad11657d5b06436db21-relation-0" label="Price" sigExt:slotId="0">
<typeRef>feel:number</typeRef>
</itemComponent>
<itemComponent isCollection="true" name="quantity" id="id-4cc8046b78214ad11657d5b06436db21-relation-1" label="Quantity" sigExt:slotId="1">
<typeRef>feel:number</typeRef>
</itemComponent>
<itemComponent isCollection="true" name="itemName" id="id-4cc8046b78214ad11657d5b06436db21-relation-2" label="Item Name" sigExt:slotId="2">
<typeRef>feel:string</typeRef>
</itemComponent>
</itemDefinition>
<inputData name="order" id="id-a47f651b80111a121d93cf07939b20dc" label="Order " sigExt:shapeId="sid-8352CBF9-98EA-4018-9EAC-F17A5F936551" sigExt:diagramId="8462cb232d98419493d4ef846516a070">
<extensionElements/>
<variable typeRef="sig:order" name="order" id="id-a47f651b80111a121d93cf07939b20dc_variable"/>
</inputData>
<decision name="calculatePriceAfterDiscount" id="id-567eb0877fe31a6d84a53c3917e4eee0" label="Calculate Price After Discount" sigExt:shapeId="sid-5F8D6179-84FD-47B9-BA88-0E3CB4305014" sigExt:diagramId="8462cb232d98419493d4ef846516a070">
<extensionElements/>
<variable typeRef="sig:calculatePriceAfterDiscount" name="calculatePriceAfterDiscount" id="id-567eb0877fe31a6d84a53c3917e4eee0_variable"/>
<informationRequirement>
<requiredDecision href="#id-bc493858d94a5f245b95febc081cb0c7"/>
</informationRequirement>
<informationRequirement>
<requiredDecision href="#id-d045696f950f3769011d375f7a1afd78"/>
</informationRequirement>
<literalExpression expressionLanguage="http://www.omg.org/spec/FEEL/20140401">
<text>(calculatePrice-((determineDiscount/100)*calculatePrice))</text>
</literalExpression>
</decision>
<decision name="determineDiscount" id="id-bc493858d94a5f245b95febc081cb0c7" label="Determine Discount %" sigExt:shapeId="sid-6824DDAF-771A-4773-973E-1477F70EC90B" sigExt:diagramId="8462cb232d98419493d4ef846516a070">
<extensionElements/>
<variable typeRef="sig:determineDiscount" name="determineDiscount" id="id-bc493858d94a5f245b95febc081cb0c7_variable"/>
<informationRequirement>
<requiredDecision href="#id-d045696f950f3769011d375f7a1afd78"/>
</informationRequirement>
<decisionTable hitPolicy="UNIQUE">
<input id="id-8a61ecb31c82e81d0b067a63f8a10b25" label="Calculate Price ">
<inputExpression>
<text>calculatePrice</text>
</inputExpression>
</input>
<output name="determineDiscount" typeRef="sig:discount" id="id-cd2468e782346733c82b544eae541110" label="Determine Discount %"/>
<rule id="id-8ce83be6aaf7113a136fadb09f2de83b">
<description>string(-)</description>
<inputEntry>
<text>[0..500)</text>
</inputEntry>
<outputEntry>
<text>1</text>
</outputEntry>
</rule>
<rule id="id-ba19200060db4a933658db98400f5019">
<description>string(-)</description>
<inputEntry>
<text>[500..1000)</text>
</inputEntry>
<outputEntry>
<text>5</text>
</outputEntry>
</rule>
<rule id="id-23a4b91a413530151413d2230f41e010">
<description>string(-)</description>
<inputEntry>
<text>[1000..5000)</text>
</inputEntry>
<outputEntry>
<text>10</text>
</outputEntry>
</rule>
<rule id="id-9b4dbf30626d219d5e7937c1322b33fe">
<description>string(-)</description>
<inputEntry>
<text>[5000..10000]</text>
</inputEntry>
<outputEntry>
<text>20</text>
</outputEntry>
</rule>
<rule id="id-37139385183b4a6ee481738ccccc02f4">
<description>string(-)</description>
<inputEntry>
<text>> 10000</text>
</inputEntry>
<outputEntry>
<text>25</text>
</outputEntry>
</rule>
<rule id="id-7d86977d4be287545686b09f982b55a9">
<description>string(-)</description>
<inputEntry>
<text>< 0</text>
</inputEntry>
<outputEntry>
<text>0</text>
</outputEntry>
</rule>
</decisionTable>
</decision>
<decision name="calculatePrice" id="id-d045696f950f3769011d375f7a1afd78" label="Calculate Price " sigExt:shapeId="sid-E3A6C7E0-BEE6-47C9-97EC-1C5A95EE2DB4" sigExt:diagramId="8462cb232d98419493d4ef846516a070">
<literalExpression expressionLanguage="http://www.omg.org/spec/FEEL/20140401">
<text>sum( for order in collateOrder return ( order.Item Price * order.Item Quantity ) )</text>
</literalExpression>
<variable typeRef="sig:calculatePrice" name="calculatePrice" id="id-d045696f950f3769011d375f7a1afd78_variable"/>
<informationRequirement>
<requiredDecision href="#id-85c7398c9bc186c1e2396c4625ebbcc1"/>
</informationRequirement>
</decision>
<decision name="collateOrder" id="id-85c7398c9bc186c1e2396c4625ebbcc1" label="Collate Order" sigExt:shapeId="sid-C47674E0-8CDE-4A4A-84E8-3DD179DCF72C" sigExt:diagramId="8462cb232d98419493d4ef846516a070">
<extensionElements/>
<variable typeRef="sig:collateOrder" name="collateOrder" id="id-85c7398c9bc186c1e2396c4625ebbcc1_variable"/>
<informationRequirement>
<requiredInput href="#id-a47f651b80111a121d93cf07939b20dc"/>
</informationRequirement>
<literalExpression expressionLanguage="http://www.omg.org/spec/FEEL/20140401">
<text>zip(["Item Name", "Item Price", "Item Quantity"], order.itemName, order.price, order.quantity)</text>
</literalExpression>
</decision>
</definitions>
Результаты:
order: {
itemName: [item1, item2, item3]
quantity: [100, 20, 300]
price: [1000, 200, 3000]
}
collateOrder: [{Item Name=item1, Item Quantity=100, Item Price=1000}, {Item Name=item2, Item Quantity=20, Item Price=200}, {Item Name=item3, Item Quantity=300, Item Price=3000}]
calculatePrice: 1004000
determineDiscount: 25
calculatePriceAfterDiscount: 753000.00
Еще раз спасибо за сообщение о проблеме с MID, мы рассмотрим проблему в расширении Signavio. Пожалуйста, не забудьте принять этот ответ, если он дает четкое объяснение обнаруженных и исправленных проблем.