AnsweredAssumed Answered

Change user permissions in custom Workflow

Question asked by irenailievska on Jan 21, 2015
Latest reply on Feb 11, 2015 by irenailievska
Hi,
I have trouble changing user permissions in my custom Workflow. The plan is to start workflow and if the user does not belong to the site  (where the document belongs) to give him Collaborator permissions. The workflow works - as I can see but there is something missing

this is the customWorkflow.xml located in \src\main\amp\config\alfresco\module\neoarchive-workflow-repo\workflows



<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
  <process id="customProcess" name="My Custom Process" isExecutable="true">
    <startEvent id="alfrescoStartevent1" name="Alfresco start" activiti:formKey="wf:submitAdhocTask"></startEvent>
    <userTask id="alfrescoUsertask1" name="First Task" activiti:assignee="${bpm_assignee.properties.userName}" activiti:formKey="wf:adhocTask">
      <extensionElements>
        <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
          <activiti:field name="script">
            <activiti:string><![CDATA[if (typeof bpm_workflowDueDate != 'undefined') task.dueDate = bpm_workflowDueDate
                      if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority;]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
      
       <humanPerformer>
                <resourceAssignmentExpression>
                    <formalExpression>${bpm_assignee.properties.userName}</formalExpression>
                </resourceAssignmentExpression>
            </humanPerformer>
           
    </userTask>
    <userTask id="alfrescoUsertask2" name="Verify Completed Task" activiti:assignee="${initiator.exists() ? initiator.properties.userName : 'admin'}" activiti:formKey="wf:completedAdhocTask">
      <documentation>Verify the task was completed.</documentation>
     
       <extensionElements>
        <activiti:taskListener event="create" class="org.alfresco.repo.workflow.activiti.tasklistener.ScriptTaskListener">
           <activiti:field name="runAs"><activiti:string>admin</activiti:string></activiti:field>
          <activiti:field name="script">
            <activiti:string>
            <![CDATA[if (typeof bpm_workflowDueDate != 'undefined') task.dueDate = bpm_workflowDueDate
               if (typeof bpm_workflowPriority != 'undefined') task.priority = bpm_workflowPriority;
                       
                        for(var j = 0; j &lt; bpm_assignees.size(); j++) {
                   var userName = bpm_assignees.get(j).properties.userName;
                  for(var i = 0; i &lt; bpm_package.children.length; i++) {
                     var resource = bpm_package.children;
                     resource.setPermission("Contributor", userName);
                  }
               }]]></activiti:string>
          </activiti:field>
        </activiti:taskListener>
      </extensionElements>
     
    </userTask>
    <endEvent id="endevent1" name="End"></endEvent>
    <sequenceFlow id="flow1" sourceRef="alfrescoStartevent1" targetRef="alfrescoUsertask1"></sequenceFlow>
    <sequenceFlow id="flow2" sourceRef="alfrescoUsertask1" targetRef="alfrescoUsertask2"></sequenceFlow>
    <sequenceFlow id="flow3" sourceRef="alfrescoUsertask2" targetRef="endevent1"></sequenceFlow>
  </process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_customProcess">
    <bpmndi:BPMNPlane bpmnElement="customProcess" id="BPMNPlane_customProcess">
      <bpmndi:BPMNShape bpmnElement="alfrescoStartevent1" id="BPMNShape_alfrescoStartevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="40.0" y="240.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="alfrescoUsertask1" id="BPMNShape_alfrescoUsertask1">
        <omgdc:Bounds height="55.0" width="105.0" x="160.0" y="230.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="alfrescoUsertask2" id="BPMNShape_alfrescoUsertask2">
        <omgdc:Bounds height="55.0" width="105.0" x="360.0" y="230.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
        <omgdc:Bounds height="35.0" width="35.0" x="540.0" y="240.0"></omgdc:Bounds>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
        <omgdi:waypoint x="75.0" y="257.0"></omgdi:waypoint>
        <omgdi:waypoint x="160.0" y="257.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
        <omgdi:waypoint x="265.0" y="257.0"></omgdi:waypoint>
        <omgdi:waypoint x="360.0" y="257.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
        <omgdi:waypoint x="465.0" y="257.0"></omgdi:waypoint>
        <omgdi:waypoint x="540.0" y="257.0"></omgdi:waypoint>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</definitions>



This is the customWorkflow_processdefinition.xml located in src\main\amp\config\alfresco\module\neoarchive-workflow-repo\workflows
I have no idea what is the need of this or what it does and how I connect this with the upper file


  <?xml version="1.0" encoding="UTF-8"?>

<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="my:example">

   <swimlane name="initiator"/>

   <start-state name="start">
      <task name="wf:submitAdhocTask" swimlane="initiator"/>
      <transition name="" to="adhoc"/>
   </start-state>

   <swimlane name="assignee">
      <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
         <actor>#{bpm_assignee}</actor>
      </assignment>
   </swimlane>
  
   <task-node name="adhoc">
      <task name="wf:adhocTask" swimlane="assignee">
         <event type="task-create">
            <script>
               if (bpm_workflowDueDate != void) taskInstance.dueDate = bpm_workflowDueDate;
               if (bpm_workflowPriority != void) taskInstance.priority = bpm_workflowPriority;
            </script>
         </event>
      </task>
      <transition name="" to="completed">
         <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
         <runas>admin</runas>
            <script>
            <variable name="bpm_assignees" access="read" />
            <variable name="bpm_package" access="read,write" />
            <expression>
               for(var j = 0; j &lt; bpm_assignees.size(); j++) {
                   var userName = bpm_assignees.get(j).properties.userName;
                  for(var i = 0; i &lt; bpm_package.children.length; i++) {
                     var resource = bpm_package.children;
                     resource.setPermission("Contributor", userName);
                  }
               }
            </expression>
         </script>
         </action>
      </transition>
   </task-node>
  
   <task-node name="completed">
      <task name="wf:completedAdhocTask" swimlane="initiator"/>
      <transition name="" to="end"/>
   </task-node>
     
   <end-state name="end"/>
  
</process-definition>


My contentModel.xml located in the model folder


   <?xml version="1.0" encoding="UTF-8"?>
<!– Definition of new Model –>
<model name="my:myworkflowmodel" xmlns="http://www.alfresco.org/model/dictionary/1.0">

    <!– Optional meta-data about the model –>
    <description>My Example Workflow Model</description>
    <author>Irena</author>
    <version>1.0</version>

    <!– Imports are required to allow references to definitions in other models –>
    <imports>
        <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d" />
        <import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm" />
    </imports>

    <!– Introduction of new namespaces defined by this model –>
    <namespaces>
        <namespace uri="http://www.myexample.com/model/workflow/1.0" prefix="my" />
    </namespaces>

    <types>
        <type name="my:sendForReviewWorkflowTask">
            <parent>bpm:startTask</parent>
            <overrides>
            <property name="bpm:packageActionGroup">
               <default>add_package_item_actions</default>
            </property>
         </overrides>
        </type>       
    </types>

</model>


The code in share-config-custom is clear and I think there is no need to post it here.
I add the code in service-context.xml and add the conten model in the same file

    <props>
                <prop key="engineId">activiti</prop>
                <prop key="location">alfresco/module/${project.artifactId}/workflows/customWorkflow.bpmn</prop>
                <prop key="mimetype">text/xml</prop>
                <prop key="redeploy">false</prop>           
            </props>


Sorry for the long post but I need help very much!
Thanks in advance :)
Irena

Outcomes