2010-11-29 9 views
1

Ich möchte eine Warnung in Ax senden, wenn sich ein Feld in der Tabelle des Kreditors ändert (und beim Erstellen/Löschen eines Datensatzes).Dynamics Ax: Benachrichtigung bei Datensatzänderungen

In der Warnung möchte ich den vorherigen und aktuellen Wert enthalten.

Aber es scheint, dass Sie keine Warnungen für das Ändern von Feldern in einer Tabelle festlegen können, sondern für jedes Feld ?! Ich hoffe, ich täusche mich. nur bestimmte Feldänderungen

Und wie kann ich diese Benachrichtigung an eine Gruppe von Menschen

Antwort

3

Ich habe eine neue Klasse mit einer statischen Methode erstellt, die ich einfach von jeder .update() Methode aufrufen kann mich aufmerksam zu machen, wenn ein Datensatz ändert, und das, was in der Aufzeichnung geändert.

Es verwendet auch die integrierten E-Mail-Vorlagen von 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); 
} 

Dann in der .update() Methode, die ich hinzufügen, nur diese eine Zeile

//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 
); 

Die einzigen Dinge, die ich auf verbessern will, sind:

  • die Vorlagennamen und Empfänger in eine Tabelle zu bewegen , für eine einfachere Wartung
  • bessere Formatierung für die Änderungsliste, ich weiß nicht, wie man das template (siehe: here)
2

senden Wie Sie das Alarmsystem beobachtet haben, ist nicht für „alle“ Feldänderungen entwickelt.

Dies ist eine gefälschte Anfrage sowieso, da es viele Alarts erzeugen würde. Sie müssen die Datenbankprotokollierung der Tabelle VendTable aktivieren und anschließend einen Tagesbericht (im Stapel) an die Interessenten senden.

Dies erfolgt in Administration \ Setup \ Datenbankprotokollierung. Es gibt einen Bericht in Administration \ Reports. Sie müssen die Tabellennummer kennen, um die Tabelle auszuwählen. Diese Lösung erfordert einen Lizenzschlüssel "Datenbankprotokollierung".

+0

Es ist keine "falsche Anfrage". Wenn Änderungen gespeichert werden, möchten wir eine einmalige E-Mail mit den geänderten Feldern und ihren vorherigen Werten senden. Senden einer täglichen Charge ist zu spät.Es ist 2010, wir sollten nicht mit nächtlichen Chargen arbeiten, um Informationen zu liefern. Anbieter werden nur selten aktualisiert, aber wenn sie geändert werden, möchten unsere Führungskräfte SOFORT wissen. – CaffGeek

+0

Ok, dann führen Sie den Bericht jede Minute oder Stunde, was auch immer Ihren Führungskräften entspricht. –

+0

Die Lösung, die ich zur Verfügung gestellt habe, ist recht einfach und liefert. Sie können nicht erwarten, dass AX jede vorstellbare Funktion bietet. Ihre Führungskräfte Anfrage ist nicht üblich! –

1

Wenn Sie diese Funktion wirklich benötigen, können Sie eine Klasse erstellen, die eine Nachricht/E-Mail mit dem Footprint des alten Datensatzes im Vergleich zum neuen Datensatz sendet. Dann fügen Sie einfach einen Code in die Tabellenmethode "write"/"update"/"save" ein, um sicherzustellen, dass Ihre Klasse immer dann ausgeführt wird, wenn vendtable bearbeitet wird. Aber ich muss Jan zustimmen. Dies wird viele Warnungen generieren. Ich würde ein wenig Energie darauf verwenden, zu überprüfen, ob die in vendtable vorgenommenen Änderungen den Geschäftsanforderungen entsprechen und illegale Änderungen verbieten. Dazu gehört, sicherzustellen, dass nur die richtigen Leute genügend Zugang haben.

Viel Glück!

+0

sicherstellen, dass die richtigen Leute Zugriff haben, ist getan. Es gibt nur 2 Personen mit Bearbeitungszugriff, aber das heißt nicht, dass sie nur wissen müssen, wann Änderungen vorgenommen werden. Und ich verstehe auch nicht, wie dies "viele Warnungen" generiert. Die Herstellerdatensätze werden im Durchschnitt insgesamt dreimal pro Tag aktualisiert (wir haben einige Statistiken über die Änderungshistorie in unserer alten Software durchgeführt). Das sind 3 E-Mails pro Tag. Eine für jeden Lieferanten, der geändert wurde, als er geändert wurde. Kaum "viele Warnungen". – CaffGeek

1

Ich stimme dem Vorschlag von Skaue.you nur schreiben und Klasse, um die Mail von Änderungen in der Tabelle zu senden. und führen Sie diese Klasse bei der Update-Methode von vendtable aus.

Dank und Grüße, Deepak Kumar

Verwandte Themen