CRM定制开发中,工作流是我们需要经常去用的工具之一,它通过监控应用程序中某些实体的状态及变更,在满足条件后执行特定的预期动作来达到我们的目的,大大的简化了很多操作。应用CRM内置的Workflow编辑器和使用Workflow Foundation来开发可插拔的WF组件是两种方法。有些情况下,我们可能需要做一些周期行的处理,例如,对于某个Employee我们在其生日的时候发送一封邮件,而这时就遇到一个问题,发送邮件是个周期性的过程,不能一次性发送工作流就完成,如何解决呢?本篇讨论一个小方法去完成这样的功能。

 

同样我们可以选择开发自定义的Custom Workflow Activity或者Client SideJavascript + Workflow定制完成。为了简单期间,我们首先看看怎么用Client Side Script来实现:

 

首先为了方便我们建立一个隐含字段,来计算下一个即将到达的提示日期。需要与界面上的Birthday类型保持一致:Date Only.假设名称为:new_UpcomingBirthday. 为了更新这个字段的值我们需要将它加入到Form中,并将Lable设置为不显示。

 

 

FormonLoad事件中隐藏输入框:

documentfindElementById(new_upcomingbirthday_d).style.display=none;

Birthday Date 字段添加onChange事件,在Birthday Date改变时来计算/改变Upcoming Birthday:

if(crmForm.all.new_dateofbirth.DataValue != null)

{

       var birthday = crmForm.all.new_dateofbirth.DataValue;      

 

       var today = new Date();

       birthday.setFullYear(today.getFullYear());

 

       if (Date() > birthday)

       {

           birthday.setFullYear(today.getFullYear() + 1);

        }

       crmForm.all.new_upcomingbirthday.DataValue = birthday;

}

else

{

     crmForm.all.new_upcomingbirthday.DataValue = null;

}

为了将隐藏的Upcoming birthday字段提交给服务端,需要在onSave事件中添加:

crm.new_ upcomingbirthday.ForceSubmit = true;

 

接下来在Workflow设计其中定制你的工作流程,但需要记住的是:工作流必须要设为As a Child Workflow.因为在后面的步骤中需要再次调用这个工作流本身==为了下一次生日提醒。

 

假设我们工作流是为了发一封邮件。和平常的工作流一样,需要添加一个Wait活动来等待条件满足时发生,可以简单的设置Timeout Equals “Upcoming Birthday”. 在满足条件后需要执行三个是活动:

·         Send Email

根据你自己的要求来设置发邮件的模板

·         Reset Upcoming Birthday

需要重新来根据生日计算下一个发邮件的日期。我们可以利用Dynamic Value来帮助我们设置为12 months after Upcoming Birthday.

·         Start  workflow again for next reminder

将本身作为子工作流调用,重新启动工作流。

设计好的工作流会类似于下图:

 

 

posted on 2008-11-03 21:27  Allan.  阅读(1685)  评论(2编辑  收藏  举报