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)
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
Ok, dann führen Sie den Bericht jede Minute oder Stunde, was auch immer Ihren Führungskräften entspricht. –
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! –