我正在为Microsoft CRM创建一个计时器应用程序。我已经将应用程序创建为Web资源并且可以正常工作。它使用CRM的XRM客户端代码来完成工作。它需要更新CRM中的自定义实体中的数据。但是,计时器应用程序的要求已经改变,即使用户离开页面,它现在也需要保持活动状态。因此需要在事件表单上打开,但随后用户可以在CRM中的任何其他位置导航,并且需要保持开放并主动跟踪时间。
我的第一个想法是将Web资源弹出到按钮单击的新单独窗口中,让它独立运行。但是,如果代码嵌入在表单中的Web资源中,如果它们离开,代码是否会被卸载?
我只使用Microsoft CRM几个月,所以我可能不知道所有选项。
所以具体问题:
是否可以在新窗口中打开一个独立的Web资源,当它们离开表单并仍然可以访问XRM客户端库时保持活动状态? (如果是这样,怎么样?)
如果答案是否定的,那么我很乐意听取其他想法。
谢谢。
答案 0 :(得分:0)
为解决这个问题,我使用了2个网络资源。一个表单上有一个自定义按钮,用于收集所需的案例信息并将其发送到第二个Web资源:
// Collect fields we know exist at this point, because they are required fields on the case
var caseId = window.parent.Xrm.Page.data.entity.getId();
if (caseId != '') {
var caseName = window.parent.Xrm.Page.data.entity.getPrimaryAttributeValue();
var accountId = window.parent.Xrm.Page.getAttribute("customerid").getValue()[0].id;
var accountName = window.parent.Xrm.Page.getAttribute("customerid").getValue()[0].name;
// package paramters to pass to timer web resource
var customParameters = encodeURIComponent("caseid=" + caseId + "&casename=" + caseName + "&accountid=" + accountId + "&accountname=" + accountName);
// Open web resource
window.parent.Xrm.Utility.openWebResource("sp_casetimer", customParameters, 500, 200);
} else {
// Error message would go here - case must be saved first.
}

然后,sp_casetimer Web资源将变量解析并存储到隐藏字段中,并且可以独立运行。我使用/XRMServices/2011/OrganizationData.svc然后在我的自定义案例时间实体上执行CRUD操作。