cancel
Showing results for 
Search instead for 
Did you mean: 

Change user permissions in custom Workflow

irenailievska
Champ on-the-rise
Champ on-the-rise
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 Smiley Happy
Irena
1 REPLY 1

irenailievska
Champ on-the-rise
Champ on-the-rise
I solved it. I don't need the content model and customWorkflow_processdefinition.xml. Only needed to work with one assignee (bpm_assignee.properties.userName) and not assignees. And I could not see the changes because I needed to undeploy the workflow version or to set redeploy true Smiley Very Happy