我正在研究CRM 我想用约会实体中的值更新联系人实体。 联系实体有两个字段最后约会日期和下一个约会日期。 约会实体中的两个字段称为开始日期和结束日期。应将这两个值复制到联系人字段值。 我希望使用JavaScript发生这种情况
答案 0 :(得分:0)
有几种方法可以通过Web服务调用CRM实体。使用javsacript可能非常耗时,因为通常很难确定错误发生的原因。我通常倾向于创建一个小的ASP .Net应用程序,将CRM SDK添加为Web服务,显式调用它并使用HTTP Fiddler观察SOAP请求。然后,当我进行实际的SOAP调用后,我可以复制调用,将其转换为字符串,以便我可以操作所需的值,然后通过javsacript请求将其激活到SDK URL。
以下是使用javascript调用CRM SDK进行更新/提取的一些示例:
这是一个官方的Microsoft CRM javascript示例包:
答案 1 :(得分:0)
我强烈建议您不要使用JavaScript,而是使用Callouts(CRM 3.0)或插件(CRM 4.0),这完全是因为JavaScript将在Save click上执行,但是一旦JavaScript执行,保存可能会失败其他原因(即更新前的Callout或插件失败)。
使用相关ID访问联系人的更新后标注或插件将(在我看来)是一个更强大的解决方案。但是,如果绝对希望通过JavaScript完成此操作,那么是的,Brian Scott建议遵循他给出的示例是要走的路。
答案 2 :(得分:0)
如果它是一个插件对我来说也没问题..实际上我首先尝试插件。我没有通过它。所以我转向java脚本。 这是我使用的代码。 public void Execute(IPluginExecutionContext context) { DynamicEntity entity = null;
if (context.InputParameters.Properties.Contains("Target") &&
context.InputParameters.Properties["Target"] is DynamicEntity)
{
entity = (DynamicEntity)context.InputParameters.Properties["Target"];
if (entity.Name != EntityName.appointment.ToString())
return;
}
else
{
return;
}
try
{
Guid appointmentID = new Guid(context.OutputParameters["id"].ToString());
ICrmService crmservice = context.CreateCrmService(true);
appointment appObj = (appointment)crmservice.Retrieve(EntityName.appointment.ToString(), appointmentID, new ColumnSet(new string[] { "regardingobjectid", "location" }));
if (appObj.regardingobjectid == null || appObj.regardingobjectid.type != "contact")
{
return;
}
Guid contactID = appObj.regardingobjectid.Value;
contact cnt = new contact();
cnt.contactid = new Key();
cnt.contactid.Value = contactID;
cnt.firstname = appObj.location;
crmservice.Update(cnt);
}
catch (System.Web.Services.Protocols.SoapException ex)
{
throw new InvalidPluginExecutionException(
"Invalid plug-in.", ex);
}
}