在CRM定制开发中,工作流是我们需要经常去用的工具之一,它通过监控应用程序中某些实体的状态及变更,在满足条件后执行特定的预期动作来达到我们的目的,大大的简化了很多操作。应用CRM内置的Workflow编辑器和使用Workflow Foundation来开发可插拔的WF组件是两种方法。有些情况下,我们可能需要做一些周期行的处理,例如,对于某个Employee我们在其生日的时候发送一封邮件,而这时就遇到一个问题,发送邮件是个周期性的过程,不能一次性发送工作流就完成,如何解决呢?本篇讨论一个小方法去完成这样的功能。
同样我们可以选择开发自定义的Custom Workflow Activity或者Client Side的Javascript + Workflow定制完成。为了简单期间,我们首先看看怎么用Client Side Script来实现:
首先为了方便我们建立一个隐含字段,来计算下一个即将到达的提示日期。需要与界面上的Birthday类型保持一致:Date Only.假设名称为:new_UpcomingBirthday. 为了更新这个字段的值我们需要将它加入到Form中,并将Lable设置为不显示。
在Form的onLoad事件中隐藏输入框:
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
将本身作为子工作流调用,重新启动工作流。
设计好的工作流会类似于下图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端