0

我创建了一个名为 Alert 的自定义实体。我已将此与开箱即用的帐户实体相关联。

我现在要做的是自定义 Account 表单,以便当用户打开它时,它会检查当前帐户是否有任何活动警报。如果是这样,它应该显示一条消息,通知他们这一点(javascript 警报?),然后导航到该帐户的警报视图。

我在 CRM 中做了一些基本的 javascript,但我不确定如何查询相关实体。

注意活动警报由警报活动日期中的显示起始日期和显示截止日期定义(显示起始日期 <= 今天和显示截止日期 >= 今天)。

更新

感谢您为我指明 oData 的方向。我现在有以下功能,它正在查找帐户集但扩展与警报的关系。我试图弄清楚如何检查是否有任何警报,目前我的代码总是触发 javascript 警报。

function CheckForAlerts(accountId)
{
    var odataSelect = "http://mscrmdev/Test/xrmservices/2011/OrganizationData.svc/AccountSet?$expand=new_account_new_alert_Account&$filter=AccountNumber eq '" + accountId + "'";

    $.ajax({
           type: "GET",
           contentType: "application/json; charset=utf-8",
           datatype: "json",
           url: odataSelect,
           beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); },
           success: function (data, textStatus, XmlHttpRequest) 
               { 
                   // Use only one of these two methods

                   // Use for a selection that may return multiple entities
                   ProcessReturnedEntities(data.d.results); 

               },
           error: function (XmlHttpRequest, textStatus, errorThrown) { alert('OData Select Failed: ' + odataSelect); }
       });
}

function ProcessReturnedEntities(ManyEntities)
{
    var oneEntity = ManyEntities[0];

    if (oneEntity != null)
    {
        alert('There are active alerts associated with this account.');
    }
}
4

1 回答 1

2

最好的方法是通过来自 javascript 的 oData 查询。CRM 2011 SDK 带有一些用于像这样的 oData 调用的辅助函数。您将需要使用“retrieveMultiple”方法,该方法允许您通过查找相关“帐户”来检索所有“警报”。

首先将 SDK 中的“RESTJQueryEditor.js”文件添加到您的表单中,然后您可以添加自己的自定义脚本来执行检索。然后我建议创建您希望在回调成功函数中向用户显示的消息,如下所示:-

retrieveMultiple('nameOfYourAlertEntitySet', '?$filter=myAccountLookupName eq ' + accountId, function(alerts){
    if(alerts.length > 0)
    {
        var message = '';

        for(var index = 0; index<alerts.length; index++)
        {
            message += 'alert: ' + alerts[index].name;
        }   

        alert('Found associated alerts: ' + message);
    }
    else
    {
        alert('No associated alerts found for this account');
    }
}, 
function(){
    // Log an exception
});

当然,您将希望使警报消息更好一点,并相应地调整您的属性名称,但我相信这是您想要做的事情的味道。此外,您可以使用“and”关键字在过滤器中的警报实体上添加任何其他条件。

如果您有任何问题,请告诉我。

于 2012-04-05T12:57:57.083 回答