In meinem Dokument-Management-Prozess ist es oft notwendig, einige zusätzliche Dokumente (z. B. Liste der Kommentare, Liste der Unterschiede, einige Screenshots, etc.) zur Verfügung zu stellen.Wie füge ich zusätzliche Anhänge in den Workflow ein?
Diese zusätzlichen Dokumente sind bequem in den Activiti-Formularen hinzuzufügen. Ich möchte Dokumente in der Anfangsphase eines Geschäftsprozesses und in der Phase der Überarbeitung hinzufügen können.
Dazu habe ich einen Aspekt mit den Verbänden in dem workflow-model.xml
(relevanten Teil):
...
<type name="mswf:activitiRevise">
...
<mandatory-aspects>
...
<aspect>mswf:attachments</aspect>
</mandatory-aspects>
</type>
...
<aspect name="mswf:attachments">
<associations>
<association name="mswf:package">
<source>
<mandatory>false</mandatory>
<many>true</many>
</source>
<target>
<class>cm:content</class>
<mandatory>false</mandatory>
<many>true</many>
</target>
</association>
</associations>
</aspect>
...
etc
In share-config-custom.xml
Ich habe den folgenden (relevanten Teil):
...
<config evaluator="task-type" condition="bpm:startTask">
<forms>
<form id="workflow-details">
<field-visibility>
...
<show id="mswf:package" />
</field-visibility>
<appearance>
...
<set id="attachments" appearance="title" label-id="Additional docs" />
<field id="mswf:package" set="attachments" />
</appearance>
</form>
<form>
<field-visibility>
<show id="mswf:package" />
...
</field-visibility>
<appearance>
<set id="attachments" appearance="title" label-id="Additional docs" />
<field id="mswf:package" set="attachments" />
...
</appearance>
</form>
</forms>
</config>
...
etc
Jetzt habe ich eine zusätzliches Feld, in dem ich die passenden Dokumente auswählen kann.
Es funktioniert - ich einige Dokumente hinzugefügt und sie an allen Phasen des Dokumenten-Management-Prozess sehen.
Das Problem tritt auf, wenn ich versuche, eine Reihe von ursprünglich ausgewählten Dateien zu ändern. Zum Beispiel, wenn ich versuche, ein neues hinzuzufügen. Wenn ich eine neue hinzufügen (oder entfernen) - Änderungen werden nicht gespeichert und in der nächsten Aufgabe sehe ich die gleichen Dokumente, die am Anfang ausgewählt wurden.
Um Kontrolle über dieses Verhalten zu erhalten, habe ich WebScript entwickelt, in dem ich versuche, Eigenschaften zu verwalten. Ich nenne die WebScript von Teilen in der getAddedItems() Methode:
/**
* Returns items that have been added to the current value
*
* @method getAddedItems
* @return {array}
*/
getAddedItems: function ObjectFinder_getAddedItems() {
var addedItems = [],
currentItems = Alfresco.util.arrayToObject(this.options.currentValue.split(","));
for (var item in this.selectedItems) {
if (this.selectedItems.hasOwnProperty(item)) {
if (!(item in currentItems)) {
addedItems.push(item);
}
}
}
...
// here the call to the WebScript
return addedItems;
},
Teil meiner Java-backed WebScript:
...
public class WorkflowAttachmentsManipulator extends DeclarativeWebScript {
private static final String WORKFLOW_MODEL_URI = "...";
private WorkflowService workflowService;
@Override
protected Map<String, Object> executeImpl(WebScriptRequest req, Status status) {
Map<String, Object> model = new HashMap<>();
String taskId = req.getParameter("taskId");
String addedItem = req.getParameter("addedItem");
WorkflowTask workflowTask = workflowService.getTaskById(taskId);
Map<QName, Serializable> taskProperties = workflowTask.getProperties();
...
taskProperties.replace(
QName.createQName(WORKFLOW_MODEL_URI, "package"), oldValue, addedItem);
workflowService.updateTask(taskId, taskProperties, null, null);
...
Ich versuche, um die ausgewählten Dateien mit einer beliebigen und die replace(...)
Verfahren kehrt zu ersetzen true
. In alfrescotomcat-stdout.2017-09-06.log
Ich sehe auch, dass die Eigenschaft ersetzt wurde:
Vor dem WebScript (zwei Dateien im Paket) Aufruf:
key: {WORKFLOW_MODEL_URI_HERE}package
value: [workspace://SpacesStore/7f980005-2a1b-49a5-a8ff-ce9dff31a98a,
workspace://SpacesStore/30d9122f-4467-451b-aeab-ca8b164f7769]
Nach dem WebScript (eine Datei im Paket) Aufruf:
key: {WORKFLOW_MODEL_URI_HERE}package
value: workspace://SpacesStore/1a0b110f-1e09-4ca2-b367-fe25e4964a4e
Nach dem Aktualisieren des Formulars bei der aktuellen Aufgabe sehe ich meine neue Datei.
Aber der Wert wird nicht gespeichert (verloren) nach Überarbeitung/Überprüfung und in der nächsten Aufgabe sehe ich die gleichen Dateien. Lassen Sie uns sagen, war die Task-ID für den aktuellen Benutzer activiti$204587
, dann wurde es activiti$204647
gleich ...
Ich habe gefunden einige Debug-Code zu dem BPMN-Diagramm und dass der Inhalt der mswf_package
nicht nach dem Aufruf der WebScript geändert hat.
In 'Senden', Haupt config:
for(var i = 0; i < mswf_package.size(); i++) {
logger.log(mswf_package.get(i).nodeRef);
}
Ausgang:
DEBUG [repo.jscript.ScriptLogger] [http-apr-8080-exec-9] workspace://SpacesStore/7f980005-2a1b-49a5-a8ff-ce9dff31a98a
DEBUG [repo.jscript.ScriptLogger] [http-apr-8080-exec-9] workspace://SpacesStore/30d9122f-4467-451b-aeab-ca8b164f7769
In 'Überprüfung der Aufgabe', Hörer der create
und complete
Ereignisse:
for(var i = 0; i < mswf_package.size(); i++) {
logger.log(mswf_package.get(i).nodeRef);
}
Ausgang:
DEBUG [repo.jscript.ScriptLogger] [http-apr-8080-exec-9] workspace://SpacesStore/7f980005-2a1b-49a5-a8ff-ce9dff31a98a
DEBUG [repo.jscript.ScriptLogger] [http-apr-8080-exec-9] workspace://SpacesStore/30d9122f-4467-451b-aeab-ca8b164f7769
Wie weitere Anlagen im Workflow hinzufügen ... Ist es möglich, ...
ich für die Informationen sehr dankbar sein würde?. Dank an alle.