cancel
Showing results for 
Search instead for 
Did you mean: 

Failed to signal transition 'null' from workflow task

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

I am trying a custom advanced workflow  but I am not able to finish my job .I am getting the below error. " Please correct the errors below then click Finish.* A system error happened during the operation: 06070004 Failed to signal transition 'null' from workflow task 'jbpm$17'"."

Below are my codes.

(1)bootstrap-context.xml(/opt/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/extension/bootstrap-context.xml)

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>


<!–
    Repository Bootstrap Sequence.

    This file specifies the initialisation (and order of initialisation) to perform during Repository startup.

    The pattern for adding new initialisation to the bootstrap sequence is as follows:

    1) Develop a bean that implements the Spring interface ApplicationListener
    2) Place the initialisation logic in the method onApplicationEvent(ApplicationEvent event)…

       public void onApplicationEvent(ApplicationEvent event)
       {
          if (event instanceof ContextRefreshedEvent)
          {
             // initialisation logic here
          }
       }

    3) Add the bean definition to this file - Note: the beans are initialised in the order they are specified.
–>

<beans>

    <!–
    The Shutdown Backstop Bean is a special bean which is used to terminate Alfresco if its
    normal shutdown does not complete in a reasonable time - it needs to go first so it can
    terminate any of the following beans if they misbehave.
    –>
    <bean id="shutdownBackstop" class="org.alfresco.repo.shutdown.ShutdownBackstop">
       <property name="timeout">
            <value>${shutdown.backstop.timeout}</value>
       </property>
       <property name="enabled">
          <value>${shutdown.backstop.enabled}</value>
       </property>  
    </bean> 


    <!– ensure that the schema is bootstrapped –>
    <bean id="schemaBootstrap" class="org.alfresco.repo.domain.schema.SchemaBootstrap" >
       <property name="localSessionFactory">
          <ref bean="&amp;sessionFactory"></ref>  <!– inject the actual factory, not a session –>
       </property>
       <property name="dialect">
          <ref bean="dialect" />
       </property>
       <property name="maximumStringLength">
          <value>${system.maximumStringLength}</value>
       </property>
       <property name="hibernateMaxExecutions">
          <value>${system.hibernateMaxExecutions}</value>
       </property>
       <property name="updateSchema">
          <value>${db.schema.update}</value>
       </property>
       <property name="stopAfterSchemaBootstrap">
          <value>${db.schema.stopAfterSchemaBootstrap}</value>
       </property>
       <property name="schemaUpdateLockRetryCount">
          <value>${db.schema.update.lockRetryCount}</value>
       </property>
       <property name="schemaUpdateLockRetryWaitSeconds">
          <value>${db.schema.update.lockRetryWaitSeconds}</value>
       </property>
       <property name="preCreateScriptUrls">
          <list>
          </list>
       </property>
       <property name="postCreateScriptUrls">
          <list>
             <value>classpath:alfresco/dbscripts/create/2.2/${db.script.dialect}/AlfrescoPostCreate-2.2-MappedFKIndexes.sql</value>
             <value>classpath:alfresco/dbscripts/create/2.2/${db.script.dialect}/AlfrescoPostCreate-2.2-Extra.sql</value>
             <value>classpath:alfresco/dbscripts/create/2.2/${db.script.dialect}/post-create-indexes-04.sql</value>
             <value>classpath:alfresco/dbscripts/create/3.0/${db.script.dialect}/create-activities-extras.sql</value>
             <value>classpath:alfresco/dbscripts/create/3.2/${db.script.dialect}/AlfrescoPostCreate-3.2-LockTables.sql</value>
             <value>classpath:alfresco/dbscripts/create/3.2/${db.script.dialect}/AlfrescoPostCreate-3.2-ContentTables.sql</value>
             <value>classpath:alfresco/dbscripts/create/3.2/${db.script.dialect}/AlfrescoPostCreate-3.2-PropertyValueTables.sql</value>
             <value>classpath:alfresco/dbscripts/create/3.2/${db.script.dialect}/AlfrescoPostCreate-3.2-AuditTables.sql</value>
             <value>classpath:alfresco/dbscripts/create/3.2/${db.script.dialect}/AlfrescoPostCreate-3.2-AvmTables.sql</value>
          </list>
       </property>
       <property name="validateUpdateScriptPatches">
          <list>
          </list>
       </property>
       <property name="preUpdateScriptPatches">
          <list>
             <ref bean="patch.schemaUpdateScript-V1.4-1" />
             <ref bean="patch.schemaUpdateScript-V1.4-2" />
             <ref bean="patch.db-V2.1-NotNullColumns" />
             <ref bean="patch.db-V2.2-ACL-From-2.1-A" />
             <ref bean="patch.db-V2.2-ACL" />
             <ref bean="patch.db-V2.2-0-CreateMissingTables" />
             <ref bean="patch.db-V2.2-Upgrade-From-2.1" />
             <ref bean="patch.db-V2.2-Upgrade-From-2.2SP1" />
             <ref bean="patch.db-V2.2-Person-3" />
             <ref bean="patch.db-V3.2-LockTables" />
             <ref bean="patch.db-V3.2-ContentTables" />
             <ref bean="patch.db-V3.2-PropertyValueTables" />
             <ref bean="patch.db-V3.2-AuditTables" />
          </list>
       </property>
       <property name="postUpdateScriptPatches">
          <list>
             <ref bean="patch.db-V1.4-TxnCommitTimeIndex" />
             <ref bean="patch.db-V2.0-ContentUrls" />
             <ref bean="patch.db-V2.1-JBPMData" />
             <ref bean="patch.db-V2.1-VersionColumns2" />
             <ref bean="patch.db-V2.1-JBPMProcessKey" />
             <ref bean="patch.db-V2.1-RemoveWcmSubmittedAspect" />
             <ref bean="patch.db-V2.1-AuditPathIndex" />
             <ref bean="patch.db-V3.0-0-CreateActivitiesExtras" />
             <ref bean="patch.db-V3.2-Remove-AVM-Issuer" />
             <ref bean="patch.db-V3.2-Modify-AVM-MimeType" />
             <ref bean="patch.db-V3.2-Upgrade-JBPM" />
          </list>
       </property>
    </bean>

    <!– Set up JGroups communication, if necessary –>
    <bean name="jgroupsChannelFactory" class="org.alfresco.repo.jgroups.AlfrescoJGroupsChannelFactory">
        <property name="clusterName">
            <value>${alfresco.cluster.name}</value>
        </property>
        <property name="protocolStackMapping">
            <map>
                <entry key="DEFAULT">
                    <value>${alfresco.jgroups.defaultProtocol}</value>
                </entry>
            </map>
        </property>
        <property name="jgroupsConfigurationUrl">
            <value>${alfresco.jgroups.configLocation}</value>
        </property>
    </bean>

    <!– Bootstrap the AVM –>
    <bean id="avmBootstrap" class="org.alfresco.repo.avm.AvmBootstrap" >
       <property name="avmLockingAwareService">
            <ref bean="avmLockingAwareService"/>
       </property>
       <property name="avmRepository">
         <ref bean="avmRepository"/>
       </property>
       <property name="permissionService">
         <ref bean="permissionService"/>
       </property>
       <property name="avmSyncService">
            <ref bean="avmSyncService"/>
       </property>
    </bean>

    <!– Bootstrap AVM Locking Service. –>
    <bean id="avmLockingBootstrap" class="org.alfresco.repo.avm.locking.AVMLockingBootstrap">
       <property name="avmLockingService" ref="avmLockingService"/>
       <property name="transactionService" ref="transactionService"/>
    </bean>
   
    <!– Load models –>
    <bean id="dictionaryRepositoryBootstrap" class="org.alfresco.repo.dictionary.DictionaryRepositoryBootstrap">

      <property name="dictionaryDAO" ref="dictionaryDAO"/>
      <property name="contentService" ref="ContentService"/>     
      <property name="searchService" ref="SearchService"/>
      <property name="transactionService" ref="transactionService"/>
      <property name="namespaceService" ref="namespaceService"/>
      <property name="nodeService" ref="NodeService"/>
      <property name="messageService" ref="messageService"/>
      <property name="tenantAdminService" ref="tenantAdminService"/>
        
      <property name="repositoryModelsLocations">
         <list>
            <ref bean="customModelsRepositoryLocation" />
         </list>       
      </property>
        
      <property name="repositoryMessagesLocations">
         <list>
            <ref bean="customMessagesRepositoryLocation" />
         </list>       
      </property>
          
   </bean>

    <!– Bootstrap Data: Concrete instances for the basic Alfresco bootstrap –>
    <bean id="systemInfoBootstrap" parent="systemInfoBootstrap-base" singleton="true" />
    <bean id="userBootstrap" parent="userBootstrap-base" singleton="true" />
    <bean id="systemBootstrap" parent="systemBootstrap-base" singleton="true" />
    <bean id="versionBootstrap" parent="versionBootstrap-base" singleton="true" />
    <bean id="version2Bootstrap" parent="version2Bootstrap-base" singleton="true" />
    <bean id="spacesArchiveBootstrap" parent="spacesArchiveBootstrap-base" singleton="true" />
    <!–
        NOOP for fresh bootstrap (will skip store creation) - provides ordering when performing a repo restore (bootstrap import)
    –>
    <bean id="spacesModelsBootstrap" parent="storeImporter" singleton="true" />
    <bean id="spacesBootstrap" parent="spacesBootstrap-base" singleton="true" />
   
    <bean id="siteAVMBootstrap" class="org.alfresco.repo.site.SiteAVMBootstrap">
        <property name="avmService" ref="AVMService" />
        <property name="permissionService" ref="PermissionService" />
        <property name="transactionService" ref="TransactionService" />
        <property name="storename">
            <value>sitestore</value>
        </property>
        <property name="rootdir">
            <value>alfresco</value>
        </property>
    </bean>
  
    <bean id="workflowBootstrap" parent="workflowDeployer">
        <property name="workflowDefinitions">
            <list>
                <props>
                    <prop key="engineId">jbpm</prop>
                    <prop key="location">alfresco/workflow/review_processdefinition.xml</prop>
                    <prop key="mimetype">text/xml</prop>
                    <prop key="redeploy">false</prop>
                </props>
                <props>
                    <prop key="engineId">jbpm</prop>
                    <prop key="location">alfresco/workflow/adhoc_processdefinition.xml</prop>
                    <prop key="mimetype">text/xml</prop>
                    <prop key="redeploy">false</prop>
                </props>
                <props>
                    <!– WCM workflow definition –>
                    <prop key="engineId">jbpm</prop>
                    <prop key="location">alfresco/workflow/submit_processdefinition.xml</prop>
                    <prop key="mimetype">text/xml</prop>
                    <prop key="redeploy">false</prop>
               </props>
               <props>
                    <!– WCM workflow definition –>
                    <prop key="engineId">jbpm</prop>
                    <prop key="location">alfresco/workflow/changerequest_processdefinition.xml</prop>
                    <prop key="mimetype">text/xml</prop>
                    <prop key="redeploy">false</prop>
               </props>
               <props>
                    <!– WCM workflow definition –>
                    <prop key="engineId">jbpm</prop>
                    <prop key="location">alfresco/workflow/submitdirect_processdefinition.xml</prop>
                    <prop key="mimetype">text/xml</prop>
                    <prop key="redeploy">false</prop>
                </props>
           
             <!– Invitation service workflow definition –>
            <props>
               <prop key="engineId">jbpm</prop>
               <prop key="location">alfresco/workflow/invitation-nominated_processdefinition.xml</prop>
               <prop key="mimetype">text/xml</prop>
               <prop key="redeploy">false</prop>
            </props>
           
            <!– Invitation service workflow definition –>
            <props>
               <prop key="engineId">jbpm</prop>
               <prop key="location">alfresco/workflow/invitation-moderated_processdefinition.xml</prop>
               <prop key="mimetype">text/xml</prop>
               <prop key="redeploy">false</prop>
            </props>

            <props>
                    <prop key="engineId">jbpm</prop>
                    <prop key="location">alfresco/workflow/publishwhitepaper_processdefinition.xml</prop>
                    <prop key="mimetype">text/xml</prop>
                    <prop key="redeploy">false</prop>
                </props>

            </list>
        </property>
        <property name="models">
            <list>
               <value>alfresco/workflow/workflowModel.xml</value>
               <value>alfresco/workflow/wcmWorkflowModel.xml</value>
               <value>alfresco/workflow/invitation-nominated-workflow-model.xml</value>
               <value>alfresco/workflow/invitation-moderated-workflow-model.xml</value>
       <value>alfresco/workflow/scWorkflowModel.xml</value>
            </list>
        </property>
        <property name="labels">
            <list>
               <value>alfresco/workflow/workflow-messages</value>
               <value>alfresco/workflow/wcm-workflow-messages</value>
               <value>alfresco/workflow/invitation-nominated-workflow-messages</value>
               <value>alfresco/workflow/invitation-moderated-workflow-messages</value>
               <value>alfresco/workflow/scWorkflow</value>
            </list>
        </property>
        <property name="repositoryWorkflowDefsLocations" ref="customWorkflowDefsRepositoryLocation"/>
    </bean>
   
    <!– Bootstrap MT (multi-tenancy) if applicable –>
    <bean id="multiTenantBootstrap" class="org.alfresco.repo.tenant.MultiTenantBootstrap" >
        <property name="tenantAdminService" ref="tenantAdminService" />
    </bean>
   
    <bean id="personDaoBootstrap" class="org.alfresco.repo.security.person.PersonDaoBootstrap" >
       <property name="personDaoImpl">
         <ref bean="personDaoImpl"/>
       </property>
    </bean>
  
    <!– Bootstrap any extensions –>
  
    <import resource="classpath*:alfresco/extension/bootstrap/*-context.xml" />

    <!– Perform index recovery before applying any patches –>
    <!– rebuild the index if required - before we check that it is there –>
   
    <bean id="indexRecoveryBootstrap" class="org.alfresco.repo.node.index.IndexRecoveryBootstrapBean" >
       <property name="indexRecoveryComponent">
           <ref bean="indexRecoveryComponent"/>
       </property>
    </bean>
   
    <bean id="avmIndexRecoveryBootstrap" class="org.alfresco.repo.node.index.IndexRecoveryBootstrapBean" >
       <property name="indexRecoveryComponent">
          <ref bean="avmIndexRecoveryComponent"/>
       </property>
    </bean>

    <!– Descriptor Service –>
    <bean id="descriptorComponent" class="org.alfresco.repo.descriptor.DescriptorServiceImpl">
       <property name="serverDescriptorDAO">
           <ref bean="serverDescriptorDAO"/>
       </property>
       <property name="currentRepoDescriptorDAO">
           <ref bean="currentRepoDescriptorDAO"/>
       </property>
       <property name="installedRepoDescriptorDAO">
           <ref bean="installedRepoDescriptorDAO"/>
       </property>
       <property name="transactionService">
           <ref bean="transactionService"/>
       </property>
    </bean>

    <!– This component checks the interconnection between the metadata, indexes and content –>
    <bean id="configurationChecker" class="org.alfresco.repo.admin.ConfigurationChecker">
       <property name="strict">
           <value>${system.bootstrap.config_check.strict}</value>
       </property>
       <property name="dirRoot">
           <value>${dir.root}</value>
       </property>
       <property name="indexRecoveryMode">
           <value>${index.recovery.mode}</value>
       </property>
       <!– helper beans –>
       <property name="transactionService">
           <ref bean="transactionService"/>
       </property>
       <property name="systemBootstrap">
           <ref bean="systemBootstrap"/>
       </property>
       <property name="namespaceService">
           <ref bean="namespaceService"/>
       </property>
       <property name="nodeService">
           <ref bean="nodeService"/>
       </property>
       <property name="searchService">
           <ref bean="searchService"/>
       </property>
       <property name="contentService">
           <ref bean="contentService"/>
       </property>
    </bean>


    <!– This component ensures that patches get applied on startup –>

    <bean id="patchExecuter" class="org.alfresco.repo.admin.patch.PatchExecuter">
        <property name="transactionService">
            <ref bean="transactionService" />
        </property>
        <property name="patchService">
            <ref bean="PatchService" />
        </property>
    </bean>

    <!– Import other Alfresco bootstrap components –>
    <import resource="classpath*:alfresco/alfresco-*-bootstrap-context.xml" />

    <!– Start module components –>

    <bean id="moduleStarter" class="org.alfresco.repo.module.ModuleStarter">
        <property name="transactionService">
            <ref bean="transactionService" />
        </property>
        <property name="moduleService">
            <ref bean="ModuleService" />
        </property>
    </bean>

    <!–  File Servers Subsystem –>
    <bean id="fileServers" class="org.alfresco.repo.management.subsystems.ChildApplicationContextFactory" parent="abstractPropertyBackedBean">
        <property name="autoStart">
            <value>true</value>
        </property>
        <property name="compositePropertyTypes">
            <map>
                <entry key="nfs.user.mappings">
                    <value>org.alfresco.filesys.auth.nfs.UserMapping</value>
                </entry>
                <entry key="filesystem.acl.global.domainAccessControls">
                    <value>org.alfresco.filesys.config.acl.DomainAccessControlBean</value>
                </entry>
                <entry key="filesystem.acl.global.protocolAccessControls">
                    <value>org.alfresco.filesys.config.acl.ProtocolAccessControlBean</value>
                </entry>
                <entry key="filesystem.acl.global.userAccessControls">
                    <value>org.alfresco.filesys.config.acl.UserAccessControlBean</value>
                </entry>
                <entry key="filesystem.domainMappings">
                    <value>org.alfresco.filesys.config.DomainMappingConfigBean</value>
                </entry>
            </map>
        </property>
    </bean>

   <bean id="fileServerConfiguration" class="org.alfresco.repo.management.subsystems.SubsystemProxyFactory">
      <property name="sourceApplicationContextFactory">
         <ref bean="fileServers" />
      </property>
      <property name="interfaces">
         <list>
            <!–  Allow authentication subsystem to see file server config at runtime –>
            <value>org.alfresco.filesys.ExtendedServerConfigurationAccessor</value>
            <!– Allow export as MBean –>
            <value>org.alfresco.filesys.FileServerConfigMBean</value>
         </list>
      </property>
   </bean>

    <!– IMAP Subsystem –>
    <bean id="imap" class="org.alfresco.repo.management.subsystems.ChildApplicationContextFactory" parent="abstractPropertyBackedBean">
        <property name="autoStart">
            <value>true</value>
        </property>
        <property name="compositePropertyTypes">
            <map>
               <entry key="imap.config.server.mountPoints">
                   <value>org.alfresco.repo.imap.config.ImapConfigMountPointsBean</value>
               </entry>
               <entry key="imap.config.ignore.extraction">
                   <value>org.alfresco.util.config.RepositoryFolderConfigBean</value>
               </entry>
            </map>
        </property>
    </bean>

    <!– Start the quartz scheduler –>

    <bean id="schedulerStarter" class="org.alfresco.util.SchedulerStarterBean" >
       <property name="scheduler">
           <ref bean="schedulerFactory"/>
       </property>
    </bean>

    <!–  Third party transformer Subsystem –>
    <bean id="thirdparty" class="org.alfresco.repo.management.subsystems.ChildApplicationContextFactory" parent="abstractPropertyBackedBean">
        <property name="autoStart">
            <value>true</value>
        </property>
    </bean>

    <!– User registry synchronization jobs (e.g. LDAP) –>
    <bean id="Synchronization" class="org.alfresco.repo.management.subsystems.ChildApplicationContextFactory" parent="abstractPropertyBackedBean">
        <property name="autoStart">
            <value>true</value>
        </property>
    </bean>

    <!– Workflow Scheduler –>
    <bean id="workflowScheduler" class="org.alfresco.repo.workflow.jbpm.JBPMScheduler">
       <property name="JBPMTemplate" ref="jbpm_template" />
    </bean>

    <!– Email Server –>
    <bean id="emailServer" class="org.alfresco.email.server.impl.subetha.SubethaEmailServer">
        <property name="enabled">
            <value>${email.server.enabled}</value>
        </property>
        <property name="domain">
            <value>${email.server.domain}</value>
        </property>
        <property name="port">
            <value>${email.server.port}</value>
        </property>
        <property name="blockedSenders">
            <value>${email.server.blocked.senders}</value>
        </property>
        <property name="allowedSenders">
            <value>${email.server.allowed.senders}</value>
        </property>
        <property name="emailService">
            <ref bean="EmailService" />
        </property>
    </bean>

    <!–  Start Auditing –>
    <bean id="audit.bootstrap" class="org.alfresco.repo.audit.AuditBootstrap">
        <property name="transactionService" ref="transactionService"/>
        <property name="auditModelRegistry" ref="auditModel.modelRegistry"/>
    </bean>

   <!– Repository helper class –>
   <bean id="repositoryHelper" class="org.alfresco.repo.model.Repository">
      <property name="transactionHelper" ref="retryingTransactionHelper" />
      <property name="namespaceService" ref="namespaceService" />
      <property name="nodeService" ref="nodeService" />
      <property name="personService" ref="personService" />
      <property name="fileFolderService" ref="fileFolderService" />
      <property name="searchService" ref="searchService" />
      <property name="tenantAdminService" ref="tenantAdminService" />
      <property name="avmService" ref="AVMService" />
      <property name="companyHomeStore"><value>${spaces.store}</value></property>
      <property name="companyHomePath"><value>/${spaces.company_home.childname}</value></property>
   </bean>

    <!– Startup Message –>

    <bean id="startupLog" class="org.alfresco.repo.descriptor.DescriptorStartupLog">
       <property name="descriptorService">
           <ref local="descriptorComponent"/>
       </property>
       <property name="tenantService">
           <ref bean="tenantService"/>
       </property>
    </bean>
   
</beans>


(2) publishwhitepaper_processdefinition.xml(/opt/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/workflow)

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

<process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="scwfSmiley Tongueublishwhitepaper">
   <swimlane name="initiator" />

   <swimlane name="marketing">
      <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
         <pooledactors>#{people.getGroup('GROUP_marketing')}</pooledactors>
      </assignment>
   </swimlane>
   
   <swimlane name="engineering">      
      <assignment class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
         <pooledactors>#{people.getGroup('GROUP_engineering')}</pooledactors>
      </assignment>
   </swimlane>

   <start-state name="start">
      <task name="scwf:submitReviewTask" swimlane="initiator" />
      <transition name="" to="Submit"></transition>
   </start-state>
  
   <node name="Submit">
      <event type="node-enter">
         <script>
            <variable name="approveCount" access="read,write"/>
            <expression>
               approveCount = 0;
            </expression>
         </script>
      </event>
      <transition name="" to="fork1"></transition>
   </node>

   <fork name="fork1">
      <transition name="" to="Marketing Review"></transition>
      <transition name="tr2" to="Engineering Review"></transition>
   </fork>

   <task-node name="Marketing Review">
      <task name="scwf:marketingReview" swimlane="marketing" />
      <transition name="approve" to="join1">
         <script>
            <variable name="approveCount" access="read,write"/>
            <expression>
                  approveCount = approveCount + 1;
            </expression>
         </script>
      </transition>
      <transition name="reject" to="join1"></transition>
   </task-node>
  
   <task-node name="Engineering Review">

      <task name="scwf:engineeringReview" swimlane="engineering" />

      <transition name="approve" to="join1">
         <script>
            <variable name="approveCount" access="read,write"/>
            <expression>
                  approveCount = approveCount + 1;
            </expression>
         </script>     
      </transition>
      <transition name="reject" to="join1"></transition>
   </task-node>

   <join name="join1">
      <transition name="" to="All Approved"></transition>
   </join>
  
   <decision name="All Approved">
      <transition name="reject" to="Revise"></transition>
      <transition name="" to="Third Party">
         <condition>#{approveCount == 2}</condition>
      </transition>
   </decision>

   <decision name="Third Party">
      <transition name="tr2" to="Approved"></transition>
      <transition name="" to="Third Party Review">
         <condition>#{scwf_reviewerEmail!=""}</condition>
      </transition>
   </decision>
  
   <task-node name="Third Party Review">
      <event type="node-enter">
         <script>
            <variable name="notificationRecipient" access="read,write" />
            <variable name="scwf_reviewerEmail" access="read" />
            <expression>
               notificationRecipient = scwf_reviewerEmail;
            </expression>
         </script>
         <action class="org.alfresco.repo.workflow.ExternalReviewNotification"/>
      </event>

      <task name="scwf:thirdPartyReview" swimlane="initiator" >
         <timer name="thirdPartyTimer" duedate="1 minutes" transition="approve">
            <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
               <script>
                  logger.log("Third-party timer expired…approving");
               </script>
            </action>
         </timer>         
      </task>

      <transition name="approve" to="Approved"></transition>
      <transition name="reject" to="Revise"></transition>
  
   </task-node>

   <node name="Approved">
      <transition name="" to="end1">
         <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
            <script>
               <variable name="bpm_package" access="read" />
               <expression>
                  var setWebFlagAction = actions.create("set-web-flag");
                  setWebFlagAction.parameters["active"] = true;
                  for (var i = 0; i &lt; bpm_package.children.length; i++) {
                     setWebFlagAction.execute(bpm_package.children);
                  }         
               </expression>   
            </script>
         </action>
      </transition>
   </node>
  
   <task-node name="Revise">
      <task name="scwf:revise" swimlane="initiator"></task>
      <transition name="submit" to="Submit"></transition>
      <transition name="done" to="end1"></transition>
   </task-node>

   <end-state name="end1"></end-state>
  
</process-definition>

(3)scWorkflow.properties

#
# Submit to SC Web Workflow
#

# scWorkflowModel related strings
scwf_workflowmodel.type.scwf_submitReviewTask.title=Start SC Web Review
scwf_workflowmodel.type.scwf_submitReviewTask.description=Submit SC Web documents for review & approval to a group of people
scwf_workflowmodel.type.scwf_marketingReview.title=Marketing Review
scwf_workflowmodel.type.scwf_marketingReview.description=Review documents for impact on SomeCo marketing message
scwf_workflowmodel.type.scwf_engineeringReview.title=Engineering Review
scwf_workflowmodel.type.scwf_engineeringReview.description=Review documents for technical accuracy and best practices
scwf_workflowmodel.type.scwf_thirdPartyReview.title=Third-Party Review
scwf_workflowmodel.type.scwf_thirdPartyReview.description=Third-party reviews documents as necessary
scwf_workflowmodel.property.scwf_reviewerEmail.title=Reviewer email
scwf_workflowmodel.property.scwf_reviewerEmail.description=Third-party reviewer email address

# processdefinition related strings
scwf_publishwhitepaper.workflow.title=Publish Whitepaper to SC Web
scwf_publishwhitepaper.workflow.description=Review and approve SC Whitepaper content

scwf_publishwhitepaper.node.Marketing\ Review.transition.approve.title=Approve
scwf_publishwhitepaper.node.Marketing\ Review.transition.approve.description=Approve this change

scwf_publishwhitepaper.node.Marketing\ Review.transition.reject.title=Reject
scwf_publishwhitepaper.node.Marketing\ Review.transition.reject.description=Reject this change

scwf_publishwhitepaper.node.Engineering\ Review.transition.approve.title=Approve
scwf_publishwhitepaper.node.Engineering\ Review.transition.approve.description=Approve this change

scwf_publishwhitepaper.node.Engineering\ Review.transition.reject.title=Reject
scwf_publishwhitepaper.node.Engineering\ Review.transition.reject.description=Reject this change

scwf_publishwhitepaper.node.Third\ Party\ Review.transition.approve.title=Approve
scwf_publishwhitepaper.node.Third\ Party\ Review.transition.approve.description=Approve this change

scwf_publishwhitepaper.node.Third\ Party\ Review.transition.reject.title=Reject
scwf_publishwhitepaper.node.Third\ Party\ Review.transition.reject.description=Reject this change

scwf_publishwhitepaper.node.Revise.transition.submit.title=Resubmit
scwf_publishwhitepaper.node.Revise.transition.submit.description=Resubmit after revision

scwf_publishwhitepaper.node.Revise.transition.done.title=Abort
scwf_publishwhitepaper.node.Revise.transition.done.description=Stop the review process for this content


(4)scWorkflowModel.xml (/opt/tomcat/webapps/alfresco/WEB-INF/classes/alfresco/workflow)

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

   <!– Optional meta-data about the model –>
   <description>Someco Workflow Model</description>
   <author>Optaros</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.someco.com/model/workflow/1.0"
         prefix="scwf" />
   </namespaces>

   <types>

      <type name="scwf:submitReviewTask">
         <parent>bpm:startTask</parent>
         <mandatory-aspects>
            <aspect>scwf:thirdPartyReviewable</aspect>
         </mandatory-aspects>
      </type>

      <type name="scwf:marketingReview">
         <parent>bpm:workflowTask</parent>
         <overrides>
            <property name="bpmSmiley TongueackageItemActionGroup">
               <default>read_package_item_actions</default>
            </property>
         </overrides>
      </type>

      <type name="scwf:engineeringReview">
         <parent>bpm:workflowTask</parent>
         <overrides>
            <property name="bpmSmiley TongueackageItemActionGroup">
               <default>read_package_item_actions</default>
            </property>
         </overrides>
      </type>

      <type name="scwf:thirdPartyReview">
         <parent>bpm:workflowTask</parent>
         <overrides>
            <property name="bpmSmiley TongueackageItemActionGroup">
               <default>read_package_item_actions</default>
            </property>
         </overrides>
      </type>

      <type name="scwf:revise">
         <parent>bpm:workflowTask</parent>
         <overrides>
            <property name="bpmSmiley TongueackageItemActionGroup">
               <default>edit_package_item_actions</default>
            </property>
         </overrides>
      </type>
      
   </types>

   <aspects>
      <aspect name="scwf:thirdPartyReviewable">
         <title>Someco Third Party Reviewable</title>
         <properties>
            <property name="scwf:reviewerEmail">
               <type>d:text</type>
               <mandatory>false</mandatory>
               <multiple>false</multiple>
            </property>
         </properties>
      </aspect>   
   </aspects>
</model>

(5)ExternalReviewNotification.java(org.alfresco.repo.workflow.ExternalReviewNotification.java)
package org.alfresco.repo.workflow;

import java.util.Iterator;
import java.util.List;

import org.alfresco.repo.action.executer.MailActionExecuter;
import org.alfresco.repo.workflow.jbpm.JBPMSpringActionHandler;
import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionService;
import org.apache.log4j.Logger;
import org.jbpm.graph.def.Transition;
import org.jbpm.graph.exe.ExecutionContext;
import org.springframework.beans.factory.BeanFactory;

public class ExternalReviewNotification extends JBPMSpringActionHandler {
   private static final long serialVersionUID = 1L;

   private static final String FROM_ADDRESS = "alfresco@localhost";
   private static final String SUBJECT = "Workflow task requires action";
   private static final String RECIP_PROCESS_VARIABLE = "notificationRecipient";
   
   private static Logger logger = Logger.getLogger(ExternalReviewNotification.class);
   
   private ActionService actionService;
   
   @Override
   protected void initialiseHandler(BeanFactory factory) {
      actionService = (ActionService)factory.getBean("actionService");
   }

   public void execute(ExecutionContext executionContext) throws Exception {
      logger.debug("Inside ExternalReviewNotification.execute()");
      String recipient = (String) executionContext.getVariable(ExternalReviewNotification.RECIP_PROCESS_VARIABLE);
      
      StringBuffer sb = new StringBuffer();
      sb.append("You have been assigned to a task named ");
      sb.append(executionContext.getToken().getNode().getName());
      sb.append(". Take the appropriate action by clicking one of the links below:\r\n\r\n");
      List transitionList = executionContext.getNode().getLeavingTransitions();
      for (Iterator it = transitionList.iterator(); it.hasNext(); ) {
         Transition transition = (Transition)it.next();
         sb.append(transition.getName());
         sb.append("\r\n");
         sb.append("http://localhost:8080/alfresco/service/someco/bpm/review?id=jbpm$");
         sb.append(executionContext.getProcessInstance().getId());
         sb.append("-@");
         sb.append("&action=");
         sb.append(transition.getName());
         sb.append("\r\n\r\n");
      }
      
      logger.debug("Message body:" + sb.toString());
      
      Action mailAction = this.actionService.createAction(MailActionExecuter.NAME);
        mailAction.setParameterValue(MailActionExecuter.PARAM_SUBJECT, ExternalReviewNotification.SUBJECT);       
        mailAction.setParameterValue(MailActionExecuter.PARAM_TO, recipient);
        mailAction.setParameterValue(MailActionExecuter.PARAM_FROM, ExternalReviewNotification.FROM_ADDRESS);
        mailAction.setParameterValue(MailActionExecuter.PARAM_TEXT, sb.toString());
       
        this.actionService.executeAction(mailAction, null);
      
        logger.debug("Mail action executed");
       
      return;
   }

}

I had taken this example from a tutorial and trying to run a new custom advanced workflow.
But getting the above mentioned error.

Can you please help me whats wrong with my code.

Thanks in advance.

Regards
PP
13 REPLIES 13

zaizi
Champ in-the-making
Champ in-the-making
2What error is logged in the alfresco.log file? That will most likely tell you what is wrong with your code.

Ainga

pp20218
Champ in-the-making
Champ in-the-making
Hi,
Thanx for ur reply.
I saw the log it says org.jbpm.graph.def.DelegationException: 06070005 pooledactors expression '#{people.getGroup('GROUP_engineering')}' evaluates to null.

But I have already a group called "GROUP_engineering" and "GROUP_marketing" with 3 and 1 users respectively.Below are the loog trace.

14:14:50,863 ERROR [org.alfresco.web.ui.common.Utils] A system error happened during the operation: 06070006 Failed to signal transition 'null' from workflow task 'jbpm$19'
org.alfresco.service.cmr.workflow.WorkflowException: 06070006 Failed to signal transition 'null' from workflow task 'jbpm$19'
   at org.alfresco.repo.workflow.jbpm.JBPMEngine.endTask(JBPMEngine.java:1742)
   at org.alfresco.repo.workflow.WorkflowServiceImpl.endTask(WorkflowServiceImpl.java:544)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:304)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
   at org.alfresco.repo.security.permissions.impl.AlwaysProceedMethodInterceptor.invoke(AlwaysProceedMethodInterceptor.java:40)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
   at org.alfresco.repo.security.permissions.impl.ExceptionTranslatorMethodInterceptor.invoke(ExceptionTranslatorMethodInterceptor.java:49)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
   at org.alfresco.repo.audit.AuditMethodInterceptor.invoke(AuditMethodInterceptor.java:147)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
   at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
   at $Proxy43.endTask(Unknown Source)
   at org.alfresco.web.bean.workflow.StartWorkflowWizard.finishImpl(StartWorkflowWizard.java:230)
   at org.alfresco.web.bean.dialog.BaseDialogBean$1.execute(BaseDialogBean.java:124)
   at org.alfresco.web.bean.dialog.BaseDialogBean$1.execute(BaseDialogBean.java:120)
   at org.alfresco.repo.transaction.RetryingTransactionHelper.doInTransaction(RetryingTransactionHelper.java:326)
   at org.alfresco.web.bean.dialog.BaseDialogBean.finish(BaseDialogBean.java:130)
   at org.alfresco.web.bean.wizard.WizardManager.finish(WizardManager.java:599)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:132)
   at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
   at javax.faces.component.UICommand.broadcast(UICommand.java:109)
   at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:97)
   at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:171)
   at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:32)
   at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
   at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
   at javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.alfresco.web.app.servlet.AuthenticationFilter.doFilter(AuthenticationFilter.java:110)
   at sun.reflect.GeneratedMethodAccessor445.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:122)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
   at $Proxy186.doFilter(Unknown Source)
   at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:88)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.alfresco.repo.web.filter.beans.NullFilter.doFilter(NullFilter.java:74)
   at sun.reflect.GeneratedMethodAccessor445.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.alfresco.repo.management.subsystems.ChainingSubsystemProxyFactory$1.invoke(ChainingSubsystemProxyFactory.java:122)
   at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
   at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
   at $Proxy186.doFilter(Unknown Source)
   at org.alfresco.repo.web.filter.beans.BeanProxyFilter.doFilter(BeanProxyFilter.java:88)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
   at java.lang.Thread.run(Thread.java:595)
Caused by: org.jbpm.graph.def.DelegationException: 06070005 pooledactors expression '#{people.getGroup('GROUP_engineering')}' evaluates to null
   at org.jbpm.taskmgmt.exe.TaskMgmtInstance.performAssignment(TaskMgmtInstance.java:298)
   at org.jbpm.taskmgmt.exe.TaskMgmtInstance.getInitializedSwimlaneInstance(TaskMgmtInstance.java:260)
   at org.jbpm.taskmgmt.exe.TaskInstance.assign(TaskInstance.java:202)
   at org.jbpm.taskmgmt.exe.TaskMgmtInstance.createTaskInstance(TaskMgmtInstance.java:223)
   at org.jbpm.graph.node.TaskNode.execute(TaskNode.java:174)
   at org.jbpm.graph.def.Node.enter(Node.java:390)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
   at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$f12830cc.enter(<generated>)
   at org.jbpm.graph.def.Transition.take(Transition.java:167)
   at org.jbpm.graph.def.Node.leave(Node.java:479)
   at org.jbpm.graph.def.Node.leave(Node.java:451)
   at org.jbpm.graph.node.Fork.execute(Fork.java:146)
   at org.jbpm.graph.def.Node.enter(Node.java:390)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
   at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$f12830cc.enter(<generated>)
   at org.jbpm.graph.def.Transition.take(Transition.java:167)
   at org.jbpm.graph.def.Node.leave(Node.java:479)
   at org.jbpm.graph.def.Node.leave(Node.java:438)
   at org.jbpm.graph.def.Node.execute(Node.java:429)
   at org.jbpm.graph.def.Node.enter(Node.java:390)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
   at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$f12830cc.enter(<generated>)
   at org.jbpm.graph.def.Transition.take(Transition.java:167)
   at org.jbpm.graph.def.Node.leave(Node.java:479)
   at org.jbpm.graph.node.StartState.leave(StartState.java:82)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:585)
   at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.invoke(CGLIBLazyInitializer.java:157)
   at org.jbpm.graph.def.Node$$EnhancerByCGLIB$$f12830cc.leave(<generated>)
   at org.jbpm.graph.exe.Token.signal(Token.java:223)
   at org.jbpm.graph.exe.Token.signal(Token.java:150)
   at org.jbpm.taskmgmt.exe.TaskInstance.end(TaskInstance.java:490)
   at org.alfresco.repo.workflow.jbpm.WorkflowTaskInstance.end(WorkflowTaskInstance.java:141)
   at org.jbpm.taskmgmt.exe.TaskInstance.end(TaskInstance.java:406)
   at org.alfresco.repo.workflow.jbpm.JBPMEngine$26.doInJbpm(JBPMEngine.java:1718)
   at org.springmodules.workflow.jbpm31.JbpmTemplate$1.doInHibernate(JbpmTemplate.java:87)
   at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:372)
   at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:338)
   at org.springmodules.workflow.jbpm31.JbpmTemplate.execute(JbpmTemplate.java:80)
   at org.alfresco.repo.workflow.jbpm.JBPMEngine.endTask(JBPMEngine.java:1695)
   … 71 more
Caused by: org.alfresco.service.cmr.workflow.WorkflowException: 06070005 pooledactors expression '#{people.getGroup('GROUP_engineering')}' evaluates to null
   at org.alfresco.repo.workflow.jbpm.AlfrescoAssignment.assign(AlfrescoAssignment.java:140)
   at org.jbpm.taskmgmt.exe.TaskMgmtInstance.performAssignmentDelegation(TaskMgmtInstance.java:320)
   at org.jbpm.taskmgmt.exe.TaskMgmtInstance.performAssignment(TaskMgmtInstance.java:274)
   … 124 more


Regards
PP

pp20218
Champ in-the-making
Champ in-the-making
Hi,

Can anyone help me pls.

Thanx

thestorm
Champ in-the-making
Champ in-the-making
you have a group "engineering" with at least 1 user inside??

pp20218
Champ in-the-making
Champ in-the-making
you have a group "engineering" with at least 1 user inside??


YES

thestorm
Champ in-the-making
Champ in-the-making
must be a typo somewhere

did u start a new workflow task or are you trying with the one created with an older version?`(I changed the transition and wondered why i cant execute my wf now till i realized that i need to start a new one that worked fine)

pp20218
Champ in-the-making
Champ in-the-making
Started a new WF. But didnt work out for me

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

I have placed
(1)The process definition,  publishwhitepaper_processdefinition.xml
(2)Model FilescWorkflowModel.xml
(3)Properties file  scWorkflow.properties
under  tomcat/webapps/alfresco/WEB-INF/classes/alfresco/workflow  location and a class file ExternalReviewNotification.class placed under tomcat/webapps/alfresco/WEB-INF/classes/com/someco/bpm folder.

So when I finish the work flow from Advanced workflow option, I am getting the same error.  This example I had taken from Jeff's article on Advanced workflow.

These are the only 4 file changes I have done. But still I am getting the same problem.

Can anyone help me If they have the same problem or used this article before.

Thanks
PP

pp20218
Champ in-the-making
Champ in-the-making
Can anyone help me pls?

Thanks