我创建了一个名为Alert的自定义实体。我已将其与开箱即用的帐户实体相关联。
我现在要做的是自定义帐户表单,以便在用户打开它时检查当前帐户是否有任何活动警报。如果是,它应该显示一条消息通知他们(一个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.');
}
}
答案 0 :(得分: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
});
当然,您需要使警报消息更好一点并相应地调整您的属性名称,但这是您想要做的事情我相信。此外,您可以使用'和'关键字在过滤器中的警报实体上添加任何其他条件。
如果您有任何问题,请告诉我。