Fix/retrivial expression refactoring and other findings (#102)
* Modify AddMessageEvent from Array to String * Merge Retrivial expression commit
This commit is contained in:
parent
7f7707838a
commit
285d154ebe
25
app/app.js
25
app/app.js
|
@ -245,19 +245,30 @@ bpmnModeler.on('spiff.messages.requested', (event) => {
|
|||
});
|
||||
|
||||
bpmnModeler.on('spiff.add_message.requested', (event) => {
|
||||
// event.eventBus.fire('spiff.add_message.returned', {
|
||||
// name: 'test_message',
|
||||
// correlation_properties: {
|
||||
// "c1": {
|
||||
// "retrieval_expressions": "c1_expression"
|
||||
// },
|
||||
// "c2": {
|
||||
// "retrieval_expressions": "c2_expression"
|
||||
// }
|
||||
// }
|
||||
// element: {}
|
||||
// });
|
||||
event.eventBus.fire('spiff.add_message.returned', {
|
||||
name: 'msgName',
|
||||
name: 'test_message',
|
||||
correlation_properties: {
|
||||
"c1": {
|
||||
"retrieval_expressions": [
|
||||
"c1x"
|
||||
]
|
||||
"retrieval_expressions": ["c1_expression"]
|
||||
},
|
||||
"c2": {
|
||||
"retrieval_expressions": [
|
||||
"cxxxx1x"
|
||||
]
|
||||
"retrieval_expressions": ["c2_expression"]
|
||||
}
|
||||
},
|
||||
element: {
|
||||
name: 'elementName'
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
@ -153,7 +153,7 @@ function getRetrievalExpressionFromCorrelationProperty(
|
|||
for (const retrievalExpression of correlationProperty.correlationPropertyRetrievalExpression) {
|
||||
if (
|
||||
retrievalExpression.$type ===
|
||||
'bpmn:CorrelationPropertyRetrievalExpression' &&
|
||||
'bpmn:CorrelationPropertyRetrievalExpression' &&
|
||||
retrievalExpression.messageRef &&
|
||||
retrievalExpression.messageRef.id === message.id
|
||||
) {
|
||||
|
@ -376,11 +376,12 @@ export function createOrUpdateCorrelationPropertiesV2(
|
|||
|
||||
if (propertiesConfig) {
|
||||
// Iterate over each property configuration
|
||||
propertiesConfig.forEach((propConfig) => {
|
||||
for (const propConfig of propertiesConfig) {
|
||||
let correlationProperty = findCorrelationPropertyById(
|
||||
definitions,
|
||||
propConfig.identifier
|
||||
);
|
||||
|
||||
const msgElement = findMessageElement(element.businessObject, messageId);
|
||||
|
||||
if (correlationProperty === null) {
|
||||
|
@ -435,7 +436,7 @@ export function createOrUpdateCorrelationPropertiesV2(
|
|||
element,
|
||||
properties: {},
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -495,8 +496,8 @@ function isMessageRefInCorrelationPropertiesRetrivalExpression(
|
|||
) {
|
||||
return correlationProperty.correlationPropertyRetrievalExpression
|
||||
? correlationProperty.correlationPropertyRetrievalExpression.some(
|
||||
(expr) => expr.messageRef === messageRef
|
||||
)
|
||||
(expr) => expr.messageRef === messageRef
|
||||
)
|
||||
: false;
|
||||
}
|
||||
|
||||
|
@ -616,11 +617,11 @@ export function setMessageRefToListofCorrelationProperties(
|
|||
retrievalExpression.messageRef = messageRef;
|
||||
rootElement.correlationPropertyRetrievalExpression
|
||||
? rootElement.correlationPropertyRetrievalExpression.push(
|
||||
retrievalExpression
|
||||
)
|
||||
retrievalExpression
|
||||
)
|
||||
: (rootElement.correlationPropertyRetrievalExpression = [
|
||||
retrievalExpression,
|
||||
]);
|
||||
retrievalExpression,
|
||||
]);
|
||||
} else if (
|
||||
rootElement.$type === 'bpmn:CorrelationProperty' &&
|
||||
!correlationPropertyIDs.includes(rootElement.id) &&
|
||||
|
@ -683,6 +684,7 @@ export function setParentCorrelationKeys(
|
|||
element,
|
||||
moddle
|
||||
) {
|
||||
|
||||
// Retrieve all correlation properties
|
||||
let correlationProperties = findCorrelationProperties(
|
||||
element.businessObject,
|
||||
|
@ -700,13 +702,13 @@ export function setParentCorrelationKeys(
|
|||
mainCorrelationKey.get('correlationPropertyRef').length = 0;
|
||||
|
||||
// Sync correlation properties
|
||||
correlationProperties.forEach((cP) => {
|
||||
for (const cP of correlationProperties) {
|
||||
const cPElement = bpmnFactory.create('bpmn:CorrelationProperty', {
|
||||
id: cP.id,
|
||||
name: cP.name,
|
||||
});
|
||||
mainCorrelationKey.get('correlationPropertyRef').push(cPElement);
|
||||
});
|
||||
}
|
||||
|
||||
// check if process has collaboration
|
||||
let collaboration = definitions
|
||||
|
@ -714,6 +716,7 @@ export function setParentCorrelationKeys(
|
|||
.find((element) => element.$type === 'bpmn:Collaboration');
|
||||
|
||||
if (collaboration) {
|
||||
|
||||
// Remove existing correlation keys other than the main correlation key
|
||||
collaboration.get('correlationKeys').forEach((key, index) => {
|
||||
if (key.name !== 'MainCorrelationKey') {
|
||||
|
@ -724,8 +727,15 @@ export function setParentCorrelationKeys(
|
|||
const existingKey = collaboration
|
||||
.get('correlationKeys')
|
||||
.find((key) => key.name === 'MainCorrelationKey');
|
||||
|
||||
if (!existingKey) {
|
||||
collaboration.get('correlationKeys').push(mainCorrelationKey);
|
||||
} else {
|
||||
// Replace the existing key with mainCorrelationKey
|
||||
const index = collaboration.get('correlationKeys').indexOf(existingKey);
|
||||
if (index !== -1) {
|
||||
collaboration.get('correlationKeys').splice(index, 1, mainCorrelationKey);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Handle case where no collaboration is found
|
||||
|
@ -745,8 +755,15 @@ export function setParentCorrelationKeys(
|
|||
key.$type === 'bpmn:CorrelationKey' &&
|
||||
key.name === 'MainCorrelationKey'
|
||||
);
|
||||
|
||||
if (!existingKey) {
|
||||
definitions.get('rootElements').push(mainCorrelationKey);
|
||||
} else {
|
||||
// Replace the existing key with mainCorrelationKey
|
||||
const index = definitions.get('rootElements').indexOf(existingKey);
|
||||
if (index !== -1) {
|
||||
definitions.get('rootElements').splice(index, 1, mainCorrelationKey);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -771,11 +788,10 @@ function findOrCreateMainCorrelationKey(definitions, bpmnFactory, moddle) {
|
|||
return mainCorrelationKey;
|
||||
}
|
||||
|
||||
export function synCorrleationProperties(element, definitions, moddle) {
|
||||
export function synCorrleationProperties(element, definitions, moddle, msgObject) {
|
||||
const { businessObject } = element;
|
||||
const correlationProps = findCorrelationProperties(businessObject, moddle);
|
||||
const expressionsToDelete = [];
|
||||
|
||||
for (let cProperty of correlationProps) {
|
||||
let isUsed = false;
|
||||
for (const cpExpression of cProperty.correlationPropertyRetrievalExpression) {
|
||||
|
@ -784,11 +800,16 @@ export function synCorrleationProperties(element, definitions, moddle) {
|
|||
cpExpression.messageRef.id,
|
||||
definitions
|
||||
);
|
||||
isUsed = msgRef ? true : isUsed;
|
||||
isUsed = (msgRef && msgObject && cpExpression.messageRef.id !== msgObject.identifier) ? true : isUsed;
|
||||
// if unused false, delete retrival expression
|
||||
if (!msgRef) {
|
||||
console.log('Delete expression', cpExpression);
|
||||
expressionsToDelete.push(cpExpression);
|
||||
} else if (msgObject && !msgObject.correlation_properties.some(obj => obj.identifier === cProperty.id)) {
|
||||
console.log('Delete expression', cpExpression);
|
||||
expressionsToDelete.push(cpExpression);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Delete the retrieval expressions that are not used
|
||||
|
@ -805,12 +826,13 @@ export function synCorrleationProperties(element, definitions, moddle) {
|
|||
}
|
||||
|
||||
// If Unused, delete the correlation property
|
||||
if (!isUsed) {
|
||||
const propertyToBeDeleted = (isUsed || msgObject && msgObject.correlation_properties && msgObject.correlation_properties.some(obj => obj.identifier === cProperty.id));
|
||||
if (!propertyToBeDeleted) {
|
||||
const index = definitions.get('rootElements').indexOf(cProperty);
|
||||
if (index > -1) {
|
||||
console.log('Delete property', cProperty);
|
||||
definitions.rootElements.splice(index, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -38,8 +38,12 @@ export function MessageLaunchEditorButton(props) {
|
|||
className: 'spiffworkflow-properties-panel-button',
|
||||
id: `message_launch_message_editor_button`,
|
||||
onClick: () => {
|
||||
|
||||
// eventBus.fire('spiff.add_message.requested', { eventBus });
|
||||
|
||||
eventBus.fire(sendEvent, {
|
||||
value: {
|
||||
elementId: element.id,
|
||||
messageId,
|
||||
correlation_properties: parsedCorrelationProperties,
|
||||
},
|
||||
|
|
|
@ -16,12 +16,15 @@ import {
|
|||
|
||||
export const spiffExtensionOptions = {};
|
||||
|
||||
let ELEMENT_ID;
|
||||
|
||||
/**
|
||||
* Allows the selection, or creation, of Message at the Definitions level of a BPMN document.
|
||||
*/
|
||||
export function MessageSelect(props) {
|
||||
const shapeElement = props.element;
|
||||
const { commandStack, element, moddle } = props;
|
||||
let shapeElement = props.element;
|
||||
const { commandStack, moddle, elementRegistry } = props;
|
||||
let { element } = props;
|
||||
const debounce = useService('debounceInput');
|
||||
const eventBus = useService('eventBus');
|
||||
const bpmnFactory = useService('bpmnFactory');
|
||||
|
@ -36,11 +39,19 @@ export function MessageSelect(props) {
|
|||
|
||||
const setValue = async (value) => {
|
||||
|
||||
if (ELEMENT_ID) {
|
||||
// ⚠️⚠️ Not sure if we can keep this
|
||||
// This condition verify if Setvalue trigger is about the same element triggered from spifarena
|
||||
const nwElement = elementRegistry.get(ELEMENT_ID);
|
||||
shapeElement = (nwElement) ? nwElement : shapeElement;
|
||||
element = (nwElement) ? nwElement : element;
|
||||
}
|
||||
|
||||
// Define variables
|
||||
const messageId = value;
|
||||
const { businessObject } = element;
|
||||
let oldMessageRef = (businessObject.eventDefinitions) ? businessObject.eventDefinitions[0].messageRef : businessObject.messageRef;
|
||||
let definitions = getRoot(element.businessObject);
|
||||
let definitions = getRoot(businessObject);
|
||||
if (!definitions || !definitions.get('rootElements')) {
|
||||
definitions.set('rootElements', []);
|
||||
}
|
||||
|
@ -61,6 +72,8 @@ export function MessageSelect(props) {
|
|||
name: messageId,
|
||||
});
|
||||
definitions.get('rootElements').push(bpmnMessage);
|
||||
} else if (bpmnMessage.id !== bpmnMessage.name) {
|
||||
bpmnMessage.id = bpmnMessage.name;
|
||||
}
|
||||
|
||||
// Update messageRef of current Element
|
||||
|
@ -110,6 +123,7 @@ export function MessageSelect(props) {
|
|||
|
||||
// Remove previous message in case it's not used anymore
|
||||
const isOldMessageUsed = isMessageRefUsed(definitions, oldMessageRef.id);
|
||||
|
||||
if (!isOldMessageUsed) {
|
||||
const rootElements = definitions.get('rootElements');
|
||||
const oldMessageIndex = rootElements.findIndex(
|
||||
|
@ -123,7 +137,7 @@ export function MessageSelect(props) {
|
|||
}
|
||||
|
||||
// Automatic deletion of previous message correlation properties
|
||||
synCorrleationProperties(element, definitions, moddle);
|
||||
synCorrleationProperties(element, definitions, moddle, msgObject);
|
||||
}
|
||||
|
||||
// Update Correlation key if Process has collaboration
|
||||
|
@ -135,17 +149,33 @@ export function MessageSelect(props) {
|
|||
|
||||
};
|
||||
|
||||
eventBus.on('spiff.add_message.returned', (event) => {
|
||||
eventBus.on('spiff.add_message.returned', async (event) => {
|
||||
|
||||
// Check if the received element matches the current element
|
||||
if (event.elementId !== element.id) {
|
||||
ELEMENT_ID = event.elementId;
|
||||
}
|
||||
|
||||
const cProperties = Object.entries(event.correlation_properties).map(([identifier, properties]) => ({
|
||||
identifier,
|
||||
retrieval_expression: properties.retrieval_expressions[0]
|
||||
retrieval_expression: Array.isArray(properties.retrieval_expressions) ? properties.retrieval_expressions[0] : properties.retrieval_expressions
|
||||
}));
|
||||
|
||||
let newMsg = {
|
||||
identifier: event.name,
|
||||
correlation_properties: cProperties
|
||||
};
|
||||
|
||||
spiffExtensionOptions['spiff.messages'] = (Array.isArray(spiffExtensionOptions['spiff.messages']) && spiffExtensionOptions['spiff.messages']) ? spiffExtensionOptions['spiff.messages'] : [];
|
||||
spiffExtensionOptions['spiff.messages'].push(newMsg);
|
||||
const messageIndex = spiffExtensionOptions['spiff.messages'].findIndex(
|
||||
(msg) => msg.identifier === newMsg.identifier
|
||||
);
|
||||
if (messageIndex !== -1) {
|
||||
spiffExtensionOptions['spiff.messages'][messageIndex] = newMsg;
|
||||
} else {
|
||||
spiffExtensionOptions['spiff.messages'].push(newMsg);
|
||||
}
|
||||
|
||||
setValue(event.name);
|
||||
});
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ export function createMessageGroup(
|
|||
isEdited: isTextFieldEntryEdited,
|
||||
moddle,
|
||||
commandStack,
|
||||
elementRegistry
|
||||
},
|
||||
{
|
||||
id: 'messageLaunchEditorButton',
|
||||
|
|
|
@ -54,14 +54,10 @@ describe('Messages should work', function () {
|
|||
name: 'msgName',
|
||||
correlation_properties: {
|
||||
"c1": {
|
||||
"retrieval_expressions": [
|
||||
"c1x"
|
||||
]
|
||||
"retrieval_expressions": "c1_expression"
|
||||
},
|
||||
"c2": {
|
||||
"retrieval_expressions": [
|
||||
"cxxxx1x"
|
||||
]
|
||||
"retrieval_expressions": "c2_expression"
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue