2010-11-29 12 views
1

ベンダーテーブル内のフィールドが変更されたとき(およびレコードの作成/削除時)、Axでアラートを送信したい。Dynamics Ax:レコードが変更されたときの警告

アラートには、以前の値と現在の値を含めます。

しかし、テーブルのフィールドが変更されたときにアラートを設定することはできませんが、すべてのフィールドに対して1つのフィールドを設定する必要があるようです。私は誤解されることを願っています。

そして、どのようにあなたが警告システムは、「任意の」フィールドの変更、のみ特定のフィールドの変更のために設計されていない観察していると私は人々

答えて

3

は、私は私に警告するために、私は簡単に任意の.update()メソッドから呼び出すことができる静的メソッドを使用して新しいクラスを作成しました。

Axの組み込みメールテンプレートも使用します。

static void CompareAndEmail(str emailTemplateName, str nameField, str recipient, Common original, Common modified) 
{ 
    UserInfo userInfo; 
    Map   emailParameterMap = new Map(Types::String, Types::String); 
    str   changes; 
    int   i, fieldId;  
    DictTable dictTable = new DictTable(original.TableId); 
    DictField dictField; 
; 

    for (i=1; i<=dictTable.fieldCnt(); i++) 
    { 
     fieldId = dictTable.fieldCnt2Id(i); 
     dictField = dictTable.fieldObject(fieldId); 

     if (dictField.isSystem()) 
      continue; 

     if (original.(fieldId) != modified.(fieldId)) 
     { 
      changes += strfmt("%1: %2 -> %3 \n\r", 
       dictField.name(), 
       original.(fieldId), 
       modified.(fieldId) 
      ); 
     } 
    } 

    //Send Notification Email 
    select Name from UserInfo where userInfo.id == curUserId(); 
    emailParameterMap.insert("modifiedBy", userInfo.Name); 
    emailParameterMap.insert("tableName", dictTable.name()); 
    emailParameterMap.insert("recordName", original.(dictTable.fieldName2Id(nameField))); 
    emailParameterMap.insert("recordChanges", changes); 

    SysEmailTable::sendMail(emailTemplateName, "en-us", recipient, emailParameterMap); 
} 

はその後 .update()方法で私はこの1行を追加します

//Compare and email differences 
RecordChangeNotification::CompareAndEmail(
    "RecChange",   //Template to use 
    "Name",     //Name field of the record (MUST BE VALID) 
    "[email protected]", //Recipient email 
    this_Orig,    //Original record 
    this     //Modified record 
); 

私は時に改善したいだけのものがあります:

  • は、テーブルにテンプレート名と受信者を移動しますメンテナンスを容易にするために
  • 変更リストのフォーマットを改善しましたが、テンプレートの作成方法はわかりません(here参照)
2

のグループにこの通知を送信することができます。

これは、とにかく多くのアラートが生成されるため、偽のリクエストです。適切な作業は、VendTableテーブルのデータベースロギングを有効にして、関心のある人に毎日のレポートを(バッチで)送信することです。

これは、Administration \ Setup \ Database loggingで行われます。 Administration \ Reportsにレポートがあります。テーブルを選択するには、テーブル番号を知る必要があります。 このソリューションには、「データベースロギング」ライセンスキーが必要です。

+0

「偽のリクエスト」ではありません。変更が保存されると、変更されたフィールドとその以前の値を含む単一の電子メールを送信します。毎日のバッチを送信するのが遅すぎます。2010年ですから、情報を提供するために夜間のバッチで作業するべきではありません。ベンダーはめったに更新されませんが、変更された場合、当社の経営幹部は直ちに知りたいと考えています。 – CaffGeek

+0

あなたのエグゼクティブに合ったものであれば、毎分または毎分レポートを実行してください。 –

+0

私が提供した解決策は非常に簡単で、実現します。あなたは、AXがボックスから想像を絶する機能を提供することを期待することはできません。あなたのエグゼクティブのリクエストは一般的ではありません! –

1

本当にこの機能が必要な場合は、古いレコードのフットプリントと新しいレコードのフットプリントを含むメッセージ/電子メールを送信するクラスを作成できます。次に、テーブルメソッド "write"/"update"/"save"にコードを追加して、vendtableが編集されるたびにクラスが実行されるようにします。 しかし、私はJanと同意する必要があります。これは、多くのアラートを生成します。私は、ベンディングテーブルで行われた変更がビジネスニーズに合っているかどうかを確認し、違法な改造を禁じています。それには、適切な人だけに十分なアクセス権があることを確認することが含まれます。

幸運を祈る!

+0

適切な人にアクセス権があることを確認します。編集アクセスを持つ人は2人しかいませんが、変更が発生したときにそれを知る必要があるのは唯一の人ではありません。また、これがどのように「多くのアラート」を生成するのかも理解していません。ベンダーの記録は平均して1日に合計3回更新されます(以前のソフトウェアでは変更履歴に関する統計をいくつか実行しました)。それは1日あたり3つの電子メールです。それが変更されたときに、変更されたベンダーごとに1つ。ほとんど「多くのアラート」。 – CaffGeek

1

私はSkaueの提案に同意します。あなたは売り上げテーブルの変更のメールを送るだけです。 を使用して、このクラスをvendtableの更新メソッドで実行します。レコードの変更、および何がレコードに変更されたとき

おかげに関して、 ディーパック・クマール

関連する問題