自定义工作流程步骤 - 从实体检索字段

时间:2012-09-25 12:43:25

标签: c# dynamics-crm-2011 workflow-activity

我有一个工作流程活动,我用它定期向供应商发送电子邮件,并安排后续电话等,如果没有回复。但是我的问题是我在发送消息之前需要为每个供应商检索电子邮件。

如何从CRM 2011中的特定实体检索特定字段中的值?

这是伪代码:

For each supplier entity in the system {

     if (sendSalesRequest) {

          Send Initial E-mail
          - wait 21 days
          if (noReply) {
              Send Follow up e-mail
              - wait 7 days
              if (noFollowupReply) {
                 schedule phone call activity everyday until reply
              }
          }
      }
}

但是,我需要一种从suppler实体检索电子邮件地址的方法。

我不是在找一个有效的解决方案(虽然我不会拒绝它!),只是关于如何开展这项任务的指导原则,因为我对CRM开发并不熟悉。

谢谢,

Tysin

1 个答案:

答案 0 :(得分:1)

如果您是2011年新手,我建议您阅读SDK。特别是你需要看看custom workflow activity开发。它有许多样本可以帮助你。

我建议:

  1. 主工作流程,只需一步即可调用处理供应商的自定义工作流程活动。只要您想处理所有供应商,就可以启动此工作流程。
  2. 发送初始电子邮件的按需工作流程
  3. 发送跟进电子邮件的按需工作流程
  4. 按需计划电话的工作流程
  5. 我建议这样做的原因是,这意味着您可以在工作流程中保持数据的创建,从而更易于管理和处理。例如。您可以更改电子邮件,而无需重新编译自定义工作流活动。

    因此,在您的主自定义工作流活动的第一步,是查询Crm,我建议开始QueryExpression。通过这种方式,您可以获得基于逻辑的数据。

    然后,您需要一些代码来启动针对记录的工作流程,以发送电子邮件和电话呼叫。有一个例子here

    然后你的代码会看起来像这样:

        QueryExpression query = new QueryExpression("supplier");
        query.ColumnSet = new ColumnSet("sendsalesrequest", "noreply", "nofollowupreply");
    
        EntityCollection entities = service.RetrieveMultiple(query);
        entities.Entities.ToList().ForEach(entity => 
            {
                if(entity["sendsalesrequest"] == "Yes")
                {
                    StartWorkflow(entity.Id, "Send Initial E Mail Workflow Name");
                }
                //etc
            }
    

    这是一个非常高的水平,但希望能让你朝着正确的方向前进。