文档中心 > API文档

1.6.5.3.2. 节点动作代码

脚本节点参考实现

package com.seeyon.ctp.workflow.devnode;
 
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
 import com.seeyon.ctp.common.script.ScriptEvaluator;
 import com.seeyon.ctp.workflow.devnode.manager.GroovyNodeManager;
 import com.seeyon.ctp.workflow.supernode.BaseSuperNodeAction;
 import com.seeyon.ctp.workflow.supernode.SuperNodeActionUrl;
 import com.seeyon.ctp.workflow.supernode.SuperNodeResponse;
 
 /**
  * 工作流脚本节点
  * 
  * @author wayne
  * 
  */
 public class GroovyScriptNodeAction extends BaseSuperNodeAction {
 
     private static final Log logger = LogFactory
             .getLog(GroovyScriptNodeAction.class);
     private GroovyNodeManager groovyNodeManager;
 
     public GroovyNodeManager getGroovyNodeManager() {
         return groovyNodeManager;
     }
 
     public void setGroovyNodeManager(GroovyNodeManager groovyNodeManager) {
         this.groovyNodeManager = groovyNodeManager;
     }
 
     public int getOrder() {
         return 2;
     }
 
     public String getNodeId() {
         return "dev_node_groovy";
     }
 
     public String getNodeName() {
         return "脚本节点";
     }
 
     public SuperNodeResponse executeAction(String token, String activityId,
             Map<String, Object> params) {
 
         SuperNodeResponse response = new SuperNodeResponse();
         try {
             Map<String, Object> context = new HashMap<String, Object>();
             context.putAll(params);
             StringBuilder script = new StringBuilder(
                     "import static com.seeyon.ctp.common.constdef.ConstDefUtil.getConstDefValue as _;");
             script.append(groovyNodeManager.getScript(activityId));
             Object result = ScriptEvaluator.getInstance().eval(
                     script.toString(), context);
             Thread.sleep(10000);
             response.setDataId(String.valueOf(UUID.randomUUID()
                     .getMostSignificantBits()));
             response.setReturnCode(1);
             response.setReturnMsg("执行成功:" + result);
         } catch (Throwable e) {
             logger.error("脚本执行失败:" + e.getLocalizedMessage(), e);
             response.setReturnCode(0);
             response.setReturnMsg("脚本执行失败:" + e.getLocalizedMessage());
         }
         return response;
     }
 
     public void cancelAction(String token, String arg1) {
         logger.info("撤销脚本执行!");
     }
 
     public SuperNodeResponse confirmAction(String token, String activityId,
             Map<String, Object> params) {
         return this.executeAction(token, activityId, params);
     }
 
     /**
      * 动作配置信息查看页面,流转过程中查看节点信息。
      */
     public SuperNodeActionUrl getActionConfigDisplayUrl(String token,
             final String activityId) {
         // 偷懒了,管理员配置界面应该有别于普通用户的查看界面
         // 这样做的后果就是流转过程中也可以改脚本
         return new SuperNodeActionUrl() {
 
             @Override
             public String getUrl() {
                 return "/workflow/groovyNodeController.do?method=edit&activityId="
                         + activityId;
             }
 
             @Override
             public int getWidth() {
                 return 800;
             }
 
             @Override
             public int getHeight() {
                 return 600;
             }
 
             @Override
             public String getTitle() {
                 return "配置脚本节点";
             }
         };
     }
 
     /**
      * 动作配置信息编辑页面,表单管理员定义表单时可进行设置。
      */
     public SuperNodeActionUrl getActionConfigUrl(String activityId) {
         return this.getActionConfigDisplayUrl("", activityId);
     }
 
 }

配置页面的jsp

<%@ page contentType="text/html; charset=UTF-8" isELIgnored="false"%>
 <%@ include file="/WEB-INF/jsp/common/common.jsp"%>
 <html class="h100b">
  <head> 
   <title>Configuration</title> 
  </head>
  <body class="h100b"> 
   <form id="form" method="POST" action="groovyNodeController.do?method=save"> 
    <label>节点名称:</label>
    <br />
    <input id="name" name="name" value="${name}" />
    <br /> 
    <input type="hidden" name="activityId" value="${activityId}" /> 
    <label>脚本:</label>
    <br /> 
    <textarea name="script" rows="30" cols="120">${script}</textarea> 
   </form>  
   <script>
   function OK(){
     var name = $('#name').val();
     $('#form').submit();
     return [name];1
   }
   </script> 
  </body>
 </html>

1

返回的数组中0号元素为节点的名称,就是在这里,把“脚本节点”改成了“创建人员”

这个示例的Manager没有对脚本进行持久化,都是暂时保存在内存中,重启就得重新设置。