.updateAttributes on a sub-element like bpmn:Documentation


#1

I’ve been successful updating attributes like “id” and “name”, but I’m not clear on how to update an attribute (element??) like bpmn:Documentation, which has attributes of it’s own, like “text” and “textFormat”.

When I use updateProperties on id and name, I have a handle to the business object and it works well. If I try to use updateProperties on bpmn:Documentation’s text attribute and I use the same handle to the BO, it just adds the a orphaned and non-standard “text” attribute at the root level of the BO.

I guess I’ll have the same problem with extension elements as I’m having with documentation…though I recall there may be a specific function to update extension elements.


#2

I no longer use documentation elements but if I remember correctly, bpmn:Documentation is part of the “extensionElements” right?

var moddle = bpmnDiagram.get('moddle');
var modeling = bpmnDiagram.get('modeling');

var documentation = moddle.create('bpmn:Documentation');
var extensionElements = moddle.create('bpmn:Documentation');
extensionElements.values = [ documentation ];

modeling.updateProperties(myElement, {extensionElements : extensionElements});

I’m not sure if this is correct, if you have any problem feel free to ask.

Cheers.


#3

Thanks @gcalvo . That mostly works and would have worked if documentation was an extension element. You did mis-remember ;-). Documentation is odd in that it sits in business object as its own ModdleElement - but in an array of documentation ModdleElements. I believe that is per the standard.

In any case, yes, I needed to do a moddle.create to create a bpmn:Documentation ModdleElement. Unfortunately, I didn’t know how to pass it into the modeling.updateProperties function because, for documentation, the newly created ModdleElement is actually a member of an array. I am still hack when it comes to javascript and couldn’t figure out how to use updateProperties when the update is a member of an array. I got what I wanted by simply setting it on the updatedObject.businessObject.documentation[0] object path. I guess I lose undo/redo functionality, but that is fine with me.

Thanks again for your help!

S.


#4

Then you just have to update using an array:

var myDocEntry = moddle.create('bpmn:Documentation');
modeling.updateProperties(myElement, {documentation : [ myDocEntry ]});

Cheers.
Gonzalo.