Unsupported type EVENT ?
Posted on January 10, 2009 - Filed Under Workflow | Leave a Comment
碰到了估计不会再碰第二次的问题,记录一下。测试环境上载新的工作流时,系统报如下错误: 1406: Workflow definition contains unsupported feature, cannot be uploaded to this database. 1603: Unsupported type EVENT in attribute XMLTRANSFORM/NEWDOCUMENT 1603: Unsupported type EVENT in attribute XMLTRANSFORM/EVENT 1603: Unsupported type EXTJAVA in function WFSTD/XMLTRANSFORM 1603: Unsupported type EVENT in attribute XMLGETTAGVALUE/EVENT 1603: Unsupported type EXTJAVA in function WFSTD/XMLGETTAGVALUE 1603: Unsupported type EVENT in attribute XMLCOMPARETEXT/EVENT [...]
工作流之超时处理
Posted on December 25, 2008 - Filed Under Workflow | Leave a Comment
在用Workflow Builder绘制工作流的时候,说简单点就是做两件事:定义Activity(活动)和Transition(移动)。Activity可以是复杂的逻辑运算,也可以是简单的判断、通知和反馈。对于需要回应的活动(比如审批意见),因为各种因素可能令响应者并未在预想的时间内做出反馈,这时就需要制定超时策略,否则,随着时间的推移,系统中将存在大量的遗留数据,这些数据很可能无法被清理。 例子:如果一天内未审批,则视为拒绝: 如果活动超时,工作流会标识该活动为超时状态。如果是通知,并且要求回应,则会发送一封取消通知的邮件给执行者(Performer)。对于是否接收取消通知邮件,取决于个人首选项是否选择接收电子邮件。如果是EBS内置版本,则可以在全局设置中禁止发送取消通知邮件。 如果活动定义了超时属性但是没有Timeout这个Transition流向下面的活动,则系统会根据该活动或父流程的相关定义来触发错误流程。对于超时处理,必须启动工作流后台流程,一个建议的频率是1到24小时。
Oracle 工作流优化概要
Posted on December 15, 2008 - Filed Under Workflow | Leave a Comment
对于Oracle工作流的优化方式主要分两大类,一类是流程设计上的优化,一类是数据库性能的优化。 流程设计优化: 仔细选择同步处理和异步处理模式。如果选择同步处理模式,则在提交后系统立即进行工作流处理,在流程结束前,前端程序将一直处于等待状态。如果选择异步处理模式,程序提交工作流后控制权立即返回,工作流后台引擎会根据设定的频率在后台进行处理。另外一种很少用到的处理模式是强制同步,系统不将数据插入数据库,直接用一个SQL,并且在一个Session中处理完毕。 尽量减少项目属性(通常用于存储全局变量)。当工作流启动时,系统会将这些属性全部拷贝一份,因而这会直接印影响工作流启动速度。另外,这些属性最好引用或保存静态变量,而不要去引用存放在数据库中的值。 尽量减少消息属性。如果需要在消息中存放不同的变量,也建议用最少的消息属性来实现,比如用Document来动态生成消息内容。 减少子流程,因为这需要消耗额外的DML操作和状态信息拷贝。 延迟活动。这是缩短响应时间最简单有效的办法之一,让一些需要较多处理时间的活动在后台交给工作流引擎处理,主流程则继续。 数据库性能优化: 分区。这通常在安装阶段即可进行,当然,在后期也可以进行。操作步骤可参考之前的文章《给工作流大表分区》。 清理过期数据。清理过期的运行时数据和WF_CONTROL数据,减少数据表大小。 最简单的优化方式,自然是在DB进行优化,比如定期清理。但是从设计角度考虑,同步、异步和延迟处理的配合使用,是更为得体的方式。各种方式,因时而异,因人而异。
工作流之大表分区
Posted on December 12, 2008 - Filed Under Workflow | Leave a Comment
如果打过了Patch 348000 (ORACLE APPLICATIONS RELEASE 11.5.10.2 MAINTENANCE PACK),那么工作流管理员指南(115wfag.pdf)里的对于关键表分区的介绍就过时了。进去看wfupartb.sql,你可以看到它提示已经被新的程序所取代。 新的文件是wfpart.sql,在 $FND_TOP/patch/115/sql 路径下。参考SQL文件头的使用说明执行,会在utl_file_dir目录(需要手工指定一个目录)下生成wfpart.sql,这才是具体的分区创建语句。不过需要留意的是,默认生成的wfpart.sql有个BUG(参见Note:329738.1),创建WF_ITEM_ACTIVITY_STATUSES_N4这个索引时会报错并自动终止退出,因此需要先手工修改wfpart.sql,加上以下Index创建语句: create index WF_ITEM_ACTIVITY_STATUSES_N4 on WF_ITEM_ACTIVITY_STATUSES (ASSIGNED_USER,ITEM_TYPE) pctfree 10 initrans 10 tablespace [your_table_space] storage (initial 40K next 1048576 freelists 32 freelist groups 4 pctincrease 0 ) logging; 注意:需要注释掉原来的Alter语句: alter index WFN_WF_ITEM_ACTIVITY_STATUSES_ rename to WF_ITEM_ACTIVITY_STATUSES_N4 由于执行的都是DDL语句,因此一旦出错将无法自动回滚,在执行前需要备份关键表,分别为: WF_ITEM_ACTIVITY_STATUSES WF_ITEM_ACTIVITY_STATUSES_H WF_ITEM_ATTRIBUTE_VALUES WF_ITEMS 如果是在等到感觉到性能问题了再来进行分区,等待的过程将相当漫长……如果想要撤销分区,则以同样方式执行wfunpart.sql。
Workflow Notification Email charset
Posted on October 31, 2008 - Filed Under Workflow | Leave a Comment
非英语国家阅读电子邮件,最讨厌的莫过于乱码。在工作流邮件中,以前都用Outlook,它对语言编码的兼容性是最好的,所以也没发现过什么问题,最近将客户端迁移到Gmail,才发现工作流邮件的编码有点问题。 直接查看邮件源码。标题: Subject: =?WINDOWS-936?B?(……省略……)==?= 正文编码: Content-Type: text/plain; charset=WINDOWS-936 Content-Transfer-Encoding: quoted-printable Content-Language: en 查询工作流默认语言及编码配置: 1 SELECT wl.nls_codeset 2 FROM wf_languages wl 3 WHERE wl.code = ‘ZHS’; NLS_CODESET —————————— ZHS16CGB231280 在这里,WINDOWS-936 是Windows中的简体中文的字符集,工作流邮件的字符集,是默认为我的邮件客户端应该是运行在Windows上吗?不知道Linux中的Mutt能否正确显示中文……不管它,既然是charset的问题,总是能配置的。 进入Workflow Manager,选择Workflow Notification Mailer并编辑,进入高级编辑选项,一路next到第4步: 选中Rest NLS,意思就是工作流通知邮件根据收件人首选项设置的字符集进行编码。修改完毕后发送测试邮件,看邮件代码: 标题: Subject: =?UTF-8?B?(……省略……)?= 邮件正文: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Language: en OK,告别乱码。
停止发送工作流邮件
Posted on October 31, 2008 - Filed Under Workflow | Leave a Comment
Notification Mailer停用一段时间后,总会积累一些待发送邮件,因此如果有需要重启mailer,需要清理过期的邮件。步骤如下: 更新WF_NOTIFICATIONS 中的STATUS为CLOSED,MAIL_STATUS为SENT。 如果STATUS为OPEN,MAIL_STATUS为MAIL,表示这部分数据将被送入发送队列。因此,此处需要手工标记为已发送。 $FND_TOP/patch/115/sql/wfntfqup.sql 更新队列。 (更新数据到WF_NOTIFICATION_OUT表,这里存放格式化后的邮件发送队列。注意,必须在停止Mailer和相应的Service Container后才能进行此步操作。) 之后用$FND_TOP/sql/wfver.sql检查WF_NOTIFICATION_OUT的Ready数目。 然后重启Workflow Notification Mailer即可。 P.S: 你也可以修改WF_NOTIFICATIONS中的BEGIN_DATE来修改发送日期
