我有一个插件,我正在创建一个新案例,我想发送一个电子邮件,因为它创建包括其ticketnumber。我试图在插件中调用它,但它回来说它不在字典中。我知道这个字段是使用CRM自己的自动编号填充的,所以我猜测正在发生的是我的插件正在触发并创建案例,但后来我试图在自动编号完成之前使用这个字段。
那么有没有一种方法可以让我的插件“等待”直到这个字段可用然后再使用它?
由于
编辑:以下代码:
string emailBody = entity.Attributes["description"].ToString();
int bodyLength = emailBody.Length;
int textStart = emailBody.IndexOf(">") + 1;
int newLength = bodyLength - (textStart + 7);
string description = emailBody.Substring(textStart, newLength);
//create complaint
Entity complaint = new Entity("incident");
complaint["description"] = description;
complaint["ts_case_type"] = 717750001;
complaint["ts_registration_datetime"] = DateTime.Now;
complaint["ownerid"] = Owner;
complaint["customerid"] = Organisation;
Service.Create(complaint);
答案 0 :(得分:1)
作为一方,如果可能的话,我建议发送带有工作流程的电子邮件,从长远来看,维护起来会容易得多,而且在短期内可以更快地实施。
在任何情况下,要回答您的问题,您需要更新代码以在创建事件后检索票证编号。您可以使用Retrieve消息执行此操作。
例如:
//Create the complaint
Entity complaint = new Entity("incident");
//This is the information that is being sent to the server,
//it will not be updated by CRM with any additional information post creation
complaint["description"] = description;
complaint["ts_case_type"] = 717750001;
complaint["ts_registration_datetime"] = DateTime.Now;
complaint["ownerid"] = Owner;
complaint["customerid"] = Organisation;
//Capture the id of the complaint, we will need this in a moment
Guid complaintId = Service.Create(complaint);
//complaint["ticketnumber"] <-- The server does not populate this information in your object
//Retrieve the ticketnumber from the incident we just created
Entity complaintRetrieved = service.Retrieve("incident", complaintId, new ColumnSet("ticketnumber"));
//Get the ticketnumber
String ticketNumber = (String)complaintRetrieved.Attributes["ticketnumber"];
答案 1 :(得分:0)
正如詹姆斯在评论中所说,如果您只想发送带有一些案例属性的电子邮件,最好使用工作流程(在创建案例时)。 在您的插件中,会生成ID,您可以通过以下方式获取ID:
entity.Attributes["ticketnumber"]