cancel
Showing results for 
Search instead for 
Did you mean: 

Email and Workflow?

vinaxwater
Champ in-the-making
Champ in-the-making
Dear friends,
I have notify email in workflow but email action is execute before workflow task execute? ie: when I start workflow with check notify by email I often recieve email before have task in system alfresco. I want do opposite? Help me.

Thanks and Regards.
4 REPLIES 4

cjimenez2581
Champ in-the-making
Champ in-the-making
can we see the workflow code?

vinaxwater
Champ in-the-making
Champ in-the-making
Dear friend,
This is my workflow process define, It's have customise for my company everything work fine. but process send mail execute before create task :mrgreen: because when user start workflow for 500 users, those users received mail while server still process start workflow when those users login into Alfresco not see task? Process complete (about 10minutes) those users can see their task. I don't want this, I want received  mail I login into Alfresco I can see my task  :mrgreen:

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

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

   <swimlane name="initiator"></swimlane>
   <swimlane name="assignee"></swimlane>

   <start-state name="start">
      <task name="wf:startTaskTemp" swimlane="initiator"></task>
      <transition to="nodeSubmit" name="startInternalMemo">
         <action
            class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
            <script>
               <variable name="bpm_NTISgroupAssignees" access="read" />
               <variable name="bpm_sendto" access="read,write" />
               <expression>
                  if(bpm_NTISgroupAssignees == null) alert("NTIS-IVB");
                  var result = people.getIVBUsersAssignFilterGroup(bpm_NTISgroupAssignees);
                  var listUser = ""; for(var p = 0; p &lt;
                  result.length; p++) { listUser += result[p] + " "; } bpm_sendto = listUser;
               </expression>
            </script>
         </action>
      </transition>
   </start-state>

   <node name="nodeSubmit">
      <event type="node-enter">
         <script>
            <variable name="wf_dueDate" access="write" />
            <variable name="wf_priority" access="write" />
            <variable name="wf_isEnd" access="write" />
            <variable name="wf_countMail" access="write" />
            <variable name="wf_countCcMail" access="write" />
            <expression>
               if (bpm_workflowDueDate != void) wf_dueDate =
               bpm_workflowDueDate; if
               (bpm_workflowPriority.equals("Urgent")) wf_priority
               = 1; if
               (bpm_workflowPriority.equals("Intermediate"))
               wf_priority = 2; if
               (bpm_workflowPriority.equals("Normal")) wf_priority
               = 3; wf_isEnd = 0; wf_countMail = 0; wf_countCcMail
               = 0;
            </expression>
         </script>
      </event>
      <transition to="decision"></transition>
   </node>

   <decision name="decision">
      <transition to="fork" name="notnull"></transition>
      <transition to="nodeReview" name="null">
         <condition>#{bpm_ivbassignees == null}</condition>
      </transition>
   </decision>

   <fork name="fork">
      <transition to="nodeReview" name="reviewed"></transition>
      <transition to="nodeCc" name="Cced"></transition>
   </fork>

   <node name="nodeReview">
      <action class="org.alfresco.repo.workflow.jbpm.ForEachFork">
         <foreach>
            #{people.getIVBMembers(bpm_NTISgroupAssignees)}
         </foreach>
         <var>userMain</var>
      </action>
      <transition to="reView"></transition>
   </node>

   <decision name="Redecision">
      <transition to="viewed" name="isTrue">
         <condition>#{wf_isEnd == 0}</condition>
      </transition>
      <transition to="tmp" name="isFalse">
         <condition>#{wf_isEnd!=0}</condition>
      </transition>
   </decision>

   <node name="nodeCc">
      <action class="org.alfresco.repo.workflow.jbpm.ForEachFork">
         <foreach>#{people.getIVBMembers(bpm_ivbassignees)}</foreach>
         <var>userCc</var>
      </action>
      <transition to="taskCc"></transition>
   </node>

   <task-node name="taskCc">
      <task name="wf:taskTaskCc">
         <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <pooledactorsNTIS>#{userCc}</pooledactorsNTIS>
         </assignment>
         <event type="task-create">
            <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <script>
                  <variable name="bpm_package" access="read" />
                  <variable name="userCc" access="read" />
                  <variable name="bpm_ivbassignees" access="read" />
                  <variable name="initiator" access="read" />
                  <variable name="bpm_workflowDescription" access="read" />
                  <variable name="wf_inmemoNotifyMe" access="read" />
                  <variable name="wf_countCcMail" access="read" />
                  <expression>
                     var userCcs = people.getIVBMembers(bpm_ivbassignees).length;
                     if (wf_inmemoNotifyMe) { var mail =
                     actions.create("mail"); mail.parameters.to =
                     userCc.properties.email;
                     mail.parameters.subject = "IVB-EDOCUMENT";
                     mail.parameters.from = initiator.properties.email;
                     mail.parameters.text = "Than chao Anh/Chi "
                     + userCc.properties.firstName + " "
                     + userCc.properties.lastName + ". Cam on da su
                     dung he thong EDOCUMENT(ALFRESCO):\n\nYou have a
                     MEMO TASK.\nFrom: " + people.getPersonInfo(initiator)[0] + "\nDescription: "
                     + bpm_workflowDescription + "\n\n" + "De dang
                     nhap vao he thong, xin vui long truy cap Indovina BookMarks "
                     + "tu Internet Explorer, sau do click Alfresco.\n\n"
                     + "Neu khong vao duoc he thong, xin vui long goi ve Hoi So so noi bo 406.\n\n"
                     + "Tran trong!\n" + "Quan tri he thong. ";
                     mail.execute(bpm_package);
                     var resultCc = people.getIVBUsersAssignFilterGroup(bpm_ivbassignees);
                     var listMailCc = "";
                     for(var p = 0; p &lt; resultCc.length; p++) { listMailCc +=
                     resultCc[p] + " "; }
                     if(wf_countCcMail == (userCcs-1)) {
                     var mail1 = actions.create("mail");
                     mail1.parameters.to =
                     initiator.properties.email;
                     mail1.parameters.subject = "IVB-EDOCUMENT";
                     mail1.parameters.from = initiator.properties.email;
                     mail1.parameters.text = "Than chao Anh/Chi "
                     + initiator.properties.firstName + " "
                     + initiator.properties.lastName
                     + ". Cam on da su dung he thong EDOCUMENT(ALFRESCO):\n\nYou have sent a MEMO TASK.\nCc: "
                     + listMailCc
                     + "\nDescription: " + bpm_workflowDescription
                     + "\n\n"
                     + "De dang nhap vao he thong, xin vui long truy cap Indovina BookMarks tu "
                     + "Internet Explorer, sau do chon Alfresco.\n\n"
                     + "Neu khong vao duoc he thong, xin vui long goi ve Hoi So so noi bo 406.\n\n"
                     + "Tran trong!\n" + "Quan tri he thong. ";
                     mail1.execute(bpm_package); }
                     }
                     for (var k = 0; k &lt; bpm_package.children.length; k++) { var resource
                     = bpm_package.children[k]; var hasPermiss =
                     resource.hasPermission("Coordinator"); if
                     (hasPermiss){
                     resource.setInheritsPermissions(false);
                     resource.setPermission("Consumer",userCc.properties.userName);
                     } }
                  </expression>
               </script>
            </action>
            <script>
               <variable name="wf_dueDate" access="read,write" />
               <variable name="wf_priority" access="read,write" />
               <variable name="wf_countCcMail" access="read,write" />
               <expression>
                  taskInstance.dueDate = wf_dueDate;
                  taskInstance.priority = wf_priority;
                  bpm_ivbassignees = null;
                  wf_countCcMail = wf_countCcMail + 1;
               </expression>
            </script>
         </event>
      </task>
      <transition to="tmp" name="End"></transition>
   </task-node>
   
   <task-node name="reView">
      <task name="wf:reViewTask">
         <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
            <pooledactorsNTIS>#{userMain}</pooledactorsNTIS>
         </assignment>
         <event type=""></event>
         <event type="task-create">
            <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <script>
                  <variable name="bpm_package" access="read" />
                  <variable name="userMain" access="read" />
                  <variable name="bpm_workflowDescription" access="read" />
                  <variable name="bpm_NTISgroupAssignees" access="read" />
                  <variable name="initiator" access="read" />
                  <variable name="wf_inmemoNotifyMe" access="read" />
                  <variable name="wf_countMail" access="read" />
                  <expression>
                     var users = people.getIVBMembers(bpm_NTISgroupAssignees).length;
                     var listMail = ""; if (wf_inmemoNotifyMe) {
                     var mail = actions.create("mail");
                     mail.parameters.to = userMain.properties.email;
                     mail.parameters.subject = "IVB-EDOCUMENT";
                     mail.parameters.from = initiator.properties.email;
                     var tmpUser = initiator.properties.userName;
                     mail.parameters.text = "Than chao Anh/Chi "
                     + userMain.properties.firstName + " "
                     + userMain.properties.lastName + ". Cam on da su
                     dung he thong EDOCUMENT(ALFRESCO):\n\nYou have a
                     MEMO TASK.\nFrom: " + people.getPersonInfo(initiator)[0] + "\nDescription: "
                     + bpm_workflowDescription + "\n\n" + "De dang nhap vao he thong, xin vui long truy cap Indovina BookMarks "
                     + "tu Internet Explorer, sau do chon Alfresco.\n\n"
                     + "Neu khong vao duoc he thong, xin vui long goi ve Hoi So so noi bo 406.\n\n"
                     + "Tran trong!\n" + "Quan tri he thong. ";
                     mail.execute(bpm_package);
                     var result = people.getIVBUsersAssignFilterGroup(bpm_NTISgroupAssignees);
                     for(var t = 0; t &lt; result.length; t++) {
                        listMail += result[t] + " "; }
                     if(wf_countMail == (users-1)) {
                     var mail1 = actions.create("mail");
                     mail1.parameters.to = initiator.properties.email;
                     mail1.parameters.subject = "IVB-EDOCUMENT";
                     mail1.parameters.from = initiator.properties.email;
                     mail1.parameters.text = "Than chao Anh/Chi "
                     + initiator.properties.firstName + " "
                     + initiator.properties.lastName + ". Cam on da su dung he thong EDOCUMENT(ALFRESCO):\n\nYou have sent a MEMO TASK.\nTo: " + listMail          + "\nDescription: " + bpm_workflowDescription
                     + "\n\n"
                     + "De dang nhap vao he thong, xin vui long
                     truy cap Indovina BookMarks tu Internet Explorer, sau do
                     chon Alfresco.\n\n" + "Neu khong vao duoc he
                     thong, xin vui long goi ve Hoi So so noi bo 406.\n\n"
                     + "Tran trong!\n" + "Quan tri he thong. ";
                     mail1.execute(bpm_package); } }
                     var assignUser=userMain.properties.userName;
                     var initUser=initiator.properties.userName;
                     for (var i = 0; i &lt; bpm_package.children.length; i++)
                     { var resource = bpm_package.children[i];
                     var hasPermiss = resource.hasPermission("Coordinator");
                     if (hasPermiss) {
                        resource.setInheritsPermissions(false);
                        resource.setPermission("Consumer",assignUser); }
                     }
                  </expression>
            </script>
         </action>
            <script>
               <variable name="wf_dueDate" access="read,write" />
               <variable name="wf_priority" access="read,write" />
               <variable name="wf_countMail" access="read,write" />
               <expression>
                  taskInstance.dueDate = wf_dueDate;
                  taskInstance.priority = wf_priority;
                  bpm_NTISgroupAssignees = null;
                  wf_countMail = wf_countMail + 1;
               </expression>
            </script>
         </event>
      </task>
      <transition to="Redecision" name="Continue"></transition>
   </task-node>

   <task-node name="viewed">
      <task name="wf:approvedViewTask" swimlane="initiator">
         <event type="task-create">
            <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <script>
                  <variable name="bpm_package" access="read" />
                  <variable name="initiator" access="read" />
                  <variable name="userMain" access="read" />
                  <expression>
                     var curUser=userMain.properties.userName; var
                     initUser=initiator.properties.userName; for (var
                     n = 0; n &lt; bpm_package.children.length; n++)
                     { var resource = bpm_package.children[n]; var
                     hasPermiss =
                     resource.hasPermission("Coordinator"); if
                     (hasPermiss){
                     resource.setInheritsPermissions(false);
                     resource.setPermission("Consumer",initUser); } }
                  </expression>
               </script>
            </action>
               <script>
                  <variable name="wf_dueDate" access="read,write" />
                  <variable name="wf_priority" access="read,write" />
                  <expression>
                     taskInstance.dueDate = wf_dueDate;
                     taskInstance.priority = wf_priority;
                  </expression>
               </script>
         </event>
      </task>
      <transition to="tmp" name="End">
         <script>
            <variable name="wf_isEnd" access="read,write" />
            <expression>wf_isEnd = wf_isEnd + 1;</expression>
         </script>
      </transition>
   </task-node>

   <task-node name="tmp">
      <task name="wf:tmpViewTask" swimlane="assignee">
         <event type="task-create">
            <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <script>
                  <variable name="bpm_package" access="read" />
                  <variable name="initiator" access="read" />
                  <expression>
                     <!– logger.log("Come to Task node viewed "); –>
                     var initUser=initiator.properties.userName; for
                     (var n = 0; n &lt; bpm_package.children.length;
                     n++) { var resource = bpm_package.children[n];
                     var hasPermiss = resource.hasPermission("Coordinator");
                     if(hasPermiss) {
                     resource.setInheritsPermissions(false);
                     resource.setPermission("Consumer",initUser); } }
                  </expression>
               </script>
            </action>
               <script>
                  <variable name="wf_dueDate" access="read,write" />
                  <variable name="wf_priority" access="read,write" />
                  <expression>
                     taskInstance.dueDate = wf_dueDate;
                     taskInstance.priority = wf_priority;
                  </expression>
               </script>
         </event>
      </task>
      <transition to="end" name="End"></transition>
   </task-node>

   <end-state name="end"></end-state>

</process-definition>

Help me, Thanks.

cjimenez2581
Champ in-the-making
Champ in-the-making
hello dear vinaxwater,

why dont you try to create script in event task-end?  I shoulf be useful

<start-state name="start">
      <task name="wf:startTaskTemp" swimlane="initiator"></task>
      <event type="task-end">
         <action
            class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
            <script>
               <variable name="bpm_NTISgroupAssignees" access="read" />
               <variable name="bpm_sendto" access="read,write" />
               <expression>
                  if(bpm_NTISgroupAssignees == null) alert("NTIS-IVB");
                  var result = people.getIVBUsersAssignFilterGroup(bpm_NTISgroupAssignees);
                  var listUser = ""; for(var p = 0; p &lt;
                  result.length; p++) { listUser += result[p] + " "; } bpm_sendto = listUser;
               </expression>
            </script>
         </action>
           </event>
      <transition to="nodeSubmit" name="startInternalMemo">
      </transition>
   </start-state>

I think it could work

vinaxwater
Champ in-the-making
Champ in-the-making
Dear cjimenez2581,
I think put it in start-state with task-end the same task-create in task-node because start-state end when task-node created Smiley Very Happy. Maybe it's script so it have read before, I think must customize in code.
What do you know it execute in class? Please tell me. Thanks….