最近看了一下工作流引擎Shark感觉还可以可扩展性和可配置性都很不错 步骤 定义流程主要是relevant date及applications等 编写调用的class文件见后面 运行Shark装载TestAppInvokexpdl增加Application Mapping选择应用程序为TestApp即在包中定义的应用程序ToolAgent类型为JavaClassToolAgentApplication Name一栏填入Class名称 在Process instantiation management中启动流程此时会自动执行应用程序 注意事项 应用程序中使用到的数据可定义为Workflow Relevant Date传入类型可为INOUT或INOUT运行应用程序的节点处增加Extended Attribute名称为VariableToProcess_UPDATE或VariableToProcess_VIEWvalue为参数名 程序需要在classpath里面使用的程序名称为全名包括包路径(不带class) 编译后的class文件放到repository/ storedprocedures路径下注意包的路径 有三种类型的活动节点可调用外部程序 l 活动节点为Tool类型执行者为System开始和结束模式为AUTOMATIC l 活动节点为Tool类型没有执行者开始和结束模式为AUTOMATIC l 活动节点为Tool类型执行者为System以外的类型开始模式为MANUAL结束模式为AUTOMATIC 如果在Shark中未定义程序映射Shark将调用默认的ToolAgent在nf中可定义 RuntimeApplicationToolAgent可执行其它外部程序比如notepad等此时传入的application mode如果为则Shark会等待应用程序的执行结束如果不为则Shark在应用程序开始后会继续流程的处理 JavaScriptToolAgent可用于执行JavaScriptapplication mode为则系统将搜索名为applicationName的文件执行 TestAppInvokejava public class TestAppInvoke { public TestAppInvoke() { } public static void execute(AppParameter p AppParameter p AppParameter p) { JOptionPaneshowMessageDialog(null 初始值param= + pthe_value + param= + pthe_value + param= + pthe_value); //这里可设置获取的参数注意在包定义中应定义参数类型为OUT或INOUT //pthe_mode可获取参数的权限类型可读可写还是可读写 pthe_value = new String(ABCDE); pthe_value = new Long(); //在Shark中将Integer类型做为Long类型来处理 pthe_value = new Boolean(true); JOptionPaneshowMessageDialog(null 更改后param= +pthe_mode +pthe_value + param= + pthe_value + param= + pthe_value); } } |