0

Alert というカスタム エンティティを作成しました。これをすぐに使用できる Account エンティティに関連付けました。

ここでやりたいことは、アカウント フォームをカスタマイズして、ユーザーがフォームを開いたときに、現在のアカウントにアクティブなアラートがあるかどうかを確認することです。その場合は、これを通知するメッセージ (javascript アラート?) を表示し、アカウントのアラート ビューに移動します。

CRM でいくつかの基本的な JavaScript を実行しましたが、関連するエンティティを照会する方法がわかりません。

アクティブなアラートは、アクティブな日付であるアラートの表示開始日と表示終了日によって定義されます (表示開始日 <= 今日 AND 表示終了日 >= 今日)。

アップデート

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 に答える