0

我有一个插件,我正在创建一个新案例,我想在创建时发送一封电子邮件,包括它的票号。我试图在插件中调用它,但它回来说它不在字典中。我知道这个字段是使用 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);
4

2 回答 2

1

作为一个方面,如果可能的话,我建议发送带有工作流程的电子邮件,从长远来看,它会更容易维护,并且在短期内实施起来会更快。

无论如何,要回答您的问题,您需要在创建事件后更新您的代码以检索票号。您可以使用检索消息来执行此操作。

例如:

//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"];
于 2012-10-23T13:57:19.000 回答
0

就像 James 在评论中所说的那样,如果您只想发送带有某些案例属性的电子邮件,最好使用工作流(在案例创建时)来做到这一点。在您的插件中,会生成 ID,您可以通过以下方式获取它:

entity.Attributes["ticketnumber"]
于 2012-10-23T13:09:24.883 回答