随笔 - 58  文章 - 0  评论 - 277  阅读 - 46万 

 

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   Allan.  阅读(1686)  评论(2编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示