在Microsoft CRM中的新窗口中弹出Web资源

时间:2017-02-19 17:13:04

标签: javascript microsoft-dynamics xrm webresource

我正在为Microsoft CRM创建一个计时器应用程序。我已经将应用程序创建为Web资源并且可以正常工作。它使用CRM的XRM客户端代码来完成工作。它需要更新CRM中的自定义实体中的数据。但是,计时器应用程序的要求已经改变,即使用户离开页面,它现在也需要保持活动状态。因此需要在事件表单上打开,但随后用户可以在CRM中的任何其他位置导航,并且需要保持开放并主动跟踪时间。

我的第一个想法是将Web资源弹出到按钮单击的新单独窗口中,让它独立运行。但是,如果代码嵌入在表单中的Web资源中,如果它们离开,代码是否会被卸载?

我只使用Microsoft CRM几个月,所以我可能不知道所有选项。

所以具体问题:

是否可以在新窗口中打开一个独立的Web资源,当它们离开表单并仍然可以访问XRM客户端库时保持活动状态? (如果是这样,怎么样?)

如果答案是否定的,那么我很乐意听取其他想法。

谢谢。

1 个答案:

答案 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操作。