【问题标题】:Show popup/alert if account has related entity records如果帐户有相关实体记录,则显示弹出窗口/警报
【发布时间】:2012-04-05 11:05:52
【问题描述】:

我创建了一个名为 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.');
    }
}

【问题讨论】:

    标签: javascript dynamics-crm-2011


    【解决方案1】:

    最好的方法是通过来自 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”关键字在过滤器中的警报实体上添加任何其他条件。

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

    【讨论】:

    • 谢谢,我已经更新了我上面的问题。如果您能提供帮助,我们将不胜感激。谢谢。
    • 我认为这是因为你总是会在成功函数中返回数据,所以你不会触发你的空检查。如果您在调用“ProcessReturnedEntities”方法时设置一个断点,我想您会看到总会有结果。另外,我认为在您的 oData 请求中扩展关系可能过于复杂,因为您可以通过查找 accountSet 来查询 alertSet 以获取警报,但这可能只是个人喜好。检查结果的另一种方法是将查询放入浏览器并检查提要。
    • 是的,我设法通过使用 alertSet 使其工作,感谢您的帮助。
    • 没问题,很高兴你把事情整理好了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    相关资源
    最近更新 更多