07.11.2013, 20:34 | #1 |
Талантливый разгвоздяй
|
AX 2012 Must-have доработка журнала базы данных
Добрый вечер!
Наверно, надо опубликовать это в разделе "Полезное", но у меня нет прав доступа на это . ЗАДАЧА Сделать журнал базы данных более user-friendly. Сейчас в нем ничего не понять, если ты не системный администратор: РЕШЕНИЕ Очевидно, вместе с системными именами полей таблицы надо выводить еще и ее метку. Для этого в форме SysDatabaseLog поработал напильником в методе buildHistory и всем советую это сделать (это просто must-have хотфикс): X++: void buildHistory() { //Метки в ЖБД -> SysDictField dictFieldName; str fieldLabel; //Метки в ЖБД <- DictTable dictTable; DictField dictField; DatabaseLog databaseLog; fieldId arrFieldId[]; int idx; int k; FormListItem item; int i, j; fieldId fieldId, extFieldId; #Properties; startLengthyOperation(); element.lockWindowUpdate(true); list.deleteAll(); imageArr[0] = 0; fieldArr[0] = 0; if (sysDatabaseLog.Table) dictTable = new DictTable(sysDatabaseLog.Table); if (dictTable) { while select LogTable,LogType,LogField from databaseLog where databaseLog.LogTable == dictTable.id() && databaseLog.LogType == DatabaseLogType::Update { if (databaseLog.LogField) { arrFieldId[databaseLog.LogField] = true; } else { for (i = 1; i<=dictTable.fieldCnt(); i++) { fieldId = dictTable.fieldCnt2Id(i); dictField = new DictField(dictTable.id(), fieldId); for (j=1; j<= dictField.arraySize(); j++) { extFieldId = fieldId2Ext(fieldId, j); arrFieldId[extFieldId] = true; } } } } for (i = dictTable.fieldCnt(); i; i--) { fieldId = dictTable.fieldCnt2Id(i); dictField = new DictField(dictTable.id(), fieldId); // Do not display values for Del_CreatedTime and Del_ModifiedTime in the database log as they are deprecated fields and there values are not updated if (dictField && (dictField.name() == #PropertyDel_ModifiedTime || dictField.name() == #PropertyDel_CreatedTime)) { continue; } for (j=dictField.arraySize(); j; j--) { extFieldId = fieldId2Ext(fieldId, j); k++; //BP Deviation Documented //Метки в ЖБД -> dictFieldName = new SysDictField(dictTable.id(), extFieldId); fieldLabel = dictFieldName.label(); //TODO: выбирай разделитель на свой вкус и цвет, нужно раскомментировать только 1 строку -> //fieldLabel = fieldLabel + " (" + fieldId2name(dictTable.id(), extFieldId) + ")"; //fieldLabel = fieldLabel + " [" + fieldId2name(dictTable.id(), extFieldId) + "]"; fieldLabel = fieldLabel + " / " + fieldId2name(dictTable.id(), extFieldId); //вариант по-умолчанию //fieldLabel = fieldLabel + " | " + fieldId2name(dictTable.id(), extFieldId); //fieldLabel = fieldLabel + " \\ " + fieldId2name(dictTable.id(), extFieldId); //fieldLabel = fieldLabel + " - " + fieldId2name(dictTable.id(), extFieldId); //fieldLabel = fieldLabel + " ~ " + fieldId2name(dictTable.id(), extFieldId); //fieldLabel = fieldLabel + " « " + fieldId2name(dictTable.id(), extFieldId); //fieldLabel = fieldLabel + " » " + fieldId2name(dictTable.id(), extFieldId); //fieldLabel = fieldLabel + " # " + fieldId2name(dictTable.id(), extFieldId); //выбирай разделитель на свой вкус и цвет, нужно раскомментировать 1 строку <- item = new FormListItem(fieldLabel); //item = new FormListItem(fieldId2name(dictTable.id(), extFieldId)); //Shame on you Microsoft //Метки в ЖБД <- if (arrFieldId[extFieldId] || arrFieldId[fieldId]) item.image(imagelist.image(#ImageLog)); else item.image(imagelist.image(#ImageLogBlank)); imageArr[k] = item.image(); fieldArr[k] = extFieldId; idx = list.addItem(item); item = list.getItem(idx); item.data(k); list.setItem(item); } } } element.lockWindowUpdate(false); endLengthyOperation(); } Вообще не понимаю, почему журнал базы данных изначально так не разработали , это настолько очевидно и гениально просто, что само напрашивается. Последний раз редактировалось Kabardian; 07.11.2013 в 20:36. Причина: добавил щепотку маркетинга в название темы) |
|
|
За это сообщение автора поблагодарили: Player1 (2). |
07.11.2013, 20:55 | #2 |
Участник
|
а ничего, что журнал базы данных как раз для администратора и сделан?
юзер не должен в него лазить |
|
07.11.2013, 21:02 | #3 |
Талантливый разгвоздяй
|
Цитата:
Я еще делал так, чтобы рядом с кодом пользователя выводилось ФИО, так юзеры совсем полюбили этот инструмент ;-) Последний раз редактировалось Kabardian; 07.11.2013 в 21:11. |
|
07.11.2013, 21:09 | #4 |
Участник
|
Цитата:
P.S. для сравнения трудоемкости - обратите внимание на "историю" в модуле CRM.
__________________
Ivanhoe as is.. |
|
|
За это сообщение автора поблагодарили: Kabardian (1). |
08.11.2013, 07:30 | #5 |
Мрачный тип
|
Хмм ...
Мы подобное еще с тройки пользуем
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 08.11.2013 в 07:34. |
|
|
За это сообщение автора поблагодарили: Kabardian (1). |
08.11.2013, 10:32 | #6 |
Administrator
|
Мы для лучшей читабельности делали метку поля отдельным столбцом. Ну и добавляли кнопку Стек вызовов. Это в качестве идеи расширения функциональности.
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Kabardian (2). |
08.11.2013, 11:11 | #7 |
Участник
|
В 2012 актуальнее что-нибудь придумать с отслеживанием по наследуемым таблицам (или как они там называются). Попробуйте настроить отслеживание договоров например:
1. В настройке увидите целую кучку таблиц со словом "Договор". 2. Из паспорта записи увидите только основную таблицу "Договор". 3. Если смотреть через общую форму - то будут отдельные строки для "Договора" и "Договора покупки", например. Смотреть так изменения - еще то удовольствие. После этого упражнения можно перейти на какой-нибудь еще более интересный справочник типа Клиентов...
__________________
Ivanhoe as is.. |
|
08.11.2013, 12:54 | #8 |
Талантливый разгвоздяй
|
Цитата:
Сообщение от Ivanhoe
В 2012 актуальнее что-нибудь придумать с отслеживанием по наследуемым таблицам (или как они там называются). Попробуйте настроить отслеживание договоров например:
1. В настройке увидите целую кучку таблиц со словом "Договор". 2. Из паспорта записи увидите только основную таблицу "Договор". 3. Если смотреть через общую форму - то будут отдельные строки для "Договора" и "Договора покупки", например. Смотреть так изменения - еще то удовольствие. После этого упражнения можно перейти на какой-нибудь еще более интересный справочник типа Клиентов... |
|
Теги |
sysdatabaselog, полезное |
|
|