cancel
Showing results for 
Search instead for 
Did you mean: 

workflow aspect variable becoming undefined [SOLVED]

jimcornmell
Champ in-the-making
Champ in-the-making
Hi All,

I'm trying to change aspect properties within a workflow.  I can populate them in java and kickoff the workflow, I can then see the values in the javascript, change change them.  Unfortunately outside of the specific workflow task the value for wf_assigneeInfo is:

org.mozilla.javascript.Undefined@75cb15

Here is the relavent bit of the workflow, you can see I'm changing the value of wf_assigneeInfo and getting the undefined value, even though everything looks in order before and after:

<task-node name="Waiting for Artist">
   <task name="wf:waitingForArtistTask" swimlane="artistsPool">
      <event type="task-assign">
         <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
            <script>
               <variable name="wf_assigneeInfo" access="read,write"/>
               <variable name="wf_studio" access="read"/>
               <variable name="wf_team" access="read"/>
               <variable name="wf_artist" access="read"/>
               <variable name="wf_reader" access="read"/>
               <expression>
                  logger.log("WORKFLOW TASK Create");
                  logger.log("wf_assigneeInfo = " + wf_assigneeInfo);
                  logger.log("wf_studio = " + wf_studio);
                  logger.log("wf_team = " + wf_team);
                  logger.log("wf_artist = " + wf_artist);
                  logger.log("wf_reader = " + wf_reader);
                  wf_assigneeInfo = "GROUP_" + wf_studio + "-" + wf_team + "-Artists";
                  logger.log("wf_assigneeInfo = " + wf_assigneeInfo);
                  logger.log("wf_studio = " + wf_studio);
                  logger.log("wf_team = " + wf_team);
                  logger.log("wf_artist = " + wf_artist);
                  logger.log("wf_reader = " + wf_reader);
               </expression>
            </script>
         </action>
      </event>
   </task>
   <transition name="Send to Artist" to="Create">
      <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
         <script>
            <expression>
               logger.log("init.prop   = " + initiator.properties["cm:name"]);
               logger.log("bpm_wfDesc  = " + bpm_workflowDescription);
            </expression>
         </script>
      </action>
   </transition>
</task-node>

And here is the output when the workflow runs:

16:42:42,765 DEBUG [repo.jscript.ScriptLogger] WORKFLOW TASK Create
16:42:42,765 DEBUG [repo.jscript.ScriptLogger] wf_assigneeInfo = GROUP_Team1
16:42:42,765 DEBUG [repo.jscript.ScriptLogger] wf_studio = Studio1
16:42:42,765 DEBUG [repo.jscript.ScriptLogger] wf_team = Team1
16:42:42,781 DEBUG [repo.jscript.ScriptLogger] wf_artist = artist1
16:42:42,781 DEBUG [repo.jscript.ScriptLogger] wf_reader = reader1
16:42:42,781 DEBUG [repo.jscript.ScriptLogger] wf_assigneeInfo = GROUP_Studio1-Team1-Artists
16:42:42,781 DEBUG [repo.jscript.ScriptLogger] wf_studio = Studio1
16:42:42,781 DEBUG [repo.jscript.ScriptLogger] wf_team = Team1
16:42:42,781 DEBUG [repo.jscript.ScriptLogger] wf_artist = artist1
16:42:42,781 DEBUG [repo.jscript.ScriptLogger] wf_reader = reader1

Is it me or is it hard to use alfresco?  I have to admit I'm finding it slow going….?  :? Anyway as always thanks in advance for any help.

Jim
1 REPLY 1

jimcornmell
Champ in-the-making
Champ in-the-making
Hi,

I've managed to get my workflow working fine.  Here is the process definition.  This is also related to the following post:  http://forums.alfresco.com/viewtopic.php?f=34&t=10182

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

<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="mywf:my_migration_workflow">
   <!– ======================================================================= –>
   <!– Deploy to localhost 8080 /alfresco/jbpm/deployprocess –>

   <!– Swimlanes for the different users the advert may touch. –>
   <swimlane name="artistsPool">
      <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
         <pooledactors>#{people.getGroup(mywf_assigneeInfo)}</pooledactors>
      </assignment>
   </swimlane>

   <swimlane name="artist">
      <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
         <actor>#{mywf_artist}</actor>
      </assignment>
   </swimlane>

   <!– Need this for initial start task.  From then on it belongs to an artist or reader. –>
   <swimlane name="initiator">
      <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
         <actor>#{bpm_assignee}</actor>
      </assignment>
   </swimlane>

   <!– ======================================================================= –>
   <!– States the job goes through. –>
   <start-state name="Start">
      <task name="mywf:allocateToStudioTask" swimlane="initiator"/>
      <transition name="Send to Artists" to="Waiting for Artist">
         <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
            <script>
               <variable name="mywf_assigneeInfo" access="write" />
               <expression>
                  pinlog.info(person.properties.userName + " started " + mywf_orderNum);
                  mywf_assigneeInfo = "GROUP_" + mywf_studio + "-" + mywf_team + "-Artists";
               </expression>
            </script>
         </action>
      </transition>
   </start-state>

   <task-node name="Waiting for Artist">
      <task name="mywf:waitingForArtistTask" swimlane="artistsPool" />
      <transition name="Work this advert" to="Create">
         <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
            <script>
               <variable name="mywf_artist" access="write" />
               <expression>
                  var workDate = new Date();
                  var logLine = workDate.getFullYear() + "-" + utils.pad(workDate.getMonth()+1,2) + "-" + utils.pad(workDate.getDate(),2);
                  logLine += " " + utils.pad(workDate.getHours(),2) + ":" + utils.pad(workDate.getMinutes(),2) + ":" + utils.pad(workDate.getSeconds(),2);
                  logLine += " : Artist Working Advert ";
                  logLine += "(" + mywf_orderNum;
                  logLine += ", " + person.properties.userName;
                  logLine += ", " + mywf_studio;
                  logLine += ", " + mywf_team + ")\r\n";
                  var nodeParent = companyhome.childByNamePath("Completed");
                  var fileName = mywf_orderNum + ".log";

                  var logFile = nodeParent.childByNamePath(fileName);
                  if (logFile == null) {
                     logFile = nodeParent.createFile(fileName);
                  }
                  if (logFile != null) {
                     logFile.content += logLine;
                  }

                  pinlog.info(person.properties.userName + " working " + mywf_orderNum);
                  mywf_artist = person.properties.userName;
               </expression>
            </script>
         </action>
      </transition>
   </task-node>

   <task-node name="Create">
      <task name="mywf:createTask" swimlane="artist" />
      <transition name="Complete Job" to="Approved">
         <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
            <script>
               <expression>
                  var completedHome = companyhome.childByNamePath("Completed");
                  var completeDate = new Date();
                  var jobSpace = mywf_orderNum + "_" + completeDate.getFullYear() + utils.pad(completeDate.getMonth()+1,2) + utils.pad(completeDate.getDate(),2);
                  jobSpace += "_" + utils.pad(completeDate.getHours(),2) + utils.pad(completeDate.getMinutes(),2) + utils.pad(completeDate.getSeconds(),2);
                  var completedSpace = completedHome.createFolder(jobSpace);
                  var doneFileContents = jobSpace + "\r\n";
                  doneFileContents += mywf_orderNum + ".log\r\n";
                  doneFileContents += mywf_orderNum + ".xml\r\n";
                  doneFileContents += mywf_orderNum + "_import.txt\r\n";

                  for (var i = 0; i &lt; bpm_package.children.length; i++) {
                     bpm_package.children[i].move(completedSpace);
                     doneFileContents += bpm_package.children[i].name + "\r\n";
                  }

                  var jobFile = companyhome.childByNamePath(mywf_studio + "/" + mywf_team + "/" + mywf_orderNum + "_import.txt");

                  if (jobFile != null) {
                     jobFile.move(completedSpace);
                  
                     var completeLine = completeDate.getFullYear() + "-" + utils.pad(completeDate.getMonth()+1,2) + "-" + utils.pad(completeDate.getDate(),2);
                     completeLine += " " + utils.pad(completeDate.getHours(),2) + ":" + utils.pad(completeDate.getMinutes(),2) + ":" + utils.pad(completeDate.getSeconds(),2);
                     completeLine += " : Artist Completed Advert ";
                     completeLine += "(" + mywf_orderNum;
                     completeLine += ", " + person.properties.userName;
                     completeLine += ", " + mywf_studio;
                     completeLine += ", " + mywf_team + ")\r\n";
   
                     var completeFileName = mywf_orderNum + ".log";
                     var completeFile = completedHome.childByNamePath(completeFileName);

                     if (completeFile == null) {
                        completeFile = completedHome.createFile(completeFileName);
                     }

                     if (completeFile != null) {
                        completeFile.content += completeLine;
                        completeFile.move(completedSpace);
   
                        var xmlFileName = mywf_orderNum + ".xml";
                        var uploadAreaSpace = companyhome.childByNamePath("UploadArea");

                        if (uploadAreaSpace == null) {
                           pinlog.error("Unable to move completed files for " + mywf_orderNum);
                        } else {
                           var xmlFile = uploadAreaSpace.childByNamePath(xmlFileName);
                           
                           if (xmlFile == null) {
                              pinlog.error("Unable to move completed files for " + mywf_orderNum);
                           } else {
                              xmlFile.move(completedSpace);

                              var triggerFileName = mywf_orderNum + "_export.txt";
                              var triggerFile = completedSpace.childByNamePath(triggerFileName);

                              if (triggerFile == null) {
                                 triggerFile = completedHome.createFile(triggerFileName);
                              }

                              if (triggerFile == null) {
                                 pinlog.error("Unable to move completed files for " + mywf_orderNum);
                              } else {
                                 triggerFile.content += doneFileContents;
                                 triggerFile.move(completedSpace);
                                 pinlog.info(person.properties.userName + " completed " + mywf_orderNum + " : Into folder Completed/" + jobSpace);
                              }
                           }
                        }
                     }
                  }
               </expression>
            </script>
         </action>
      </transition>
   </task-node>

   <end-state name="Approved" />
   <!– ======================================================================= –>
</process-definition>

Jim