AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 07.11.2013, 20:34   #1  
Kabardian ist offline
Kabardian
Талантливый разгвоздяй
Benutzerbild von Kabardian
 
424 / 338 (12) ++++++
Registriert seit: 14.12.2008
Ort: Москва
Blog-Einträge: 14
AX 2012 Must-have доработка журнала базы данных
Добрый вечер!

Наверно, надо опубликовать это в разделе "Полезное", но у меня нет прав доступа на это .

ЗАДАЧА
Сделать журнал базы данных более user-friendly. Сейчас в нем ничего не понять, если ты не системный администратор:
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	ЖБД - до.JPG
Hits:	485
Größe:	29,4 KB
ID:	8587

РЕШЕНИЕ
Очевидно, вместе с системными именами полей таблицы надо выводить еще и ее метку. Для этого в форме 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();
}
И получил вот такой красивый журнал базы данных:
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	ЖБД - после.JPG
Hits:	445
Größe:	31,3 KB
ID:	8588

Вообще не понимаю, почему журнал базы данных изначально так не разработали , это настолько очевидно и гениально просто, что само напрашивается.

Geändert von Kabardian (07.11.2013 um 20:36 Uhr) Grund: добавил щепотку маркетинга в название темы)
This post has been rated by: Player1 (2).
Alt 07.11.2013, 20:55   #2  
lvan ist offline
lvan
Участник
Benutzerbild von lvan
Лучший по профессии 2014
 
858 / 82 (4) ++++
Registriert seit: 15.04.2011
Blog-Einträge: 1
а ничего, что журнал базы данных как раз для администратора и сделан?
юзер не должен в него лазить
Alt 07.11.2013, 21:02   #3  
Kabardian ist offline
Kabardian
Талантливый разгвоздяй
Benutzerbild von Kabardian
 
424 / 338 (12) ++++++
Registriert seit: 14.12.2008
Ort: Москва
Blog-Einträge: 14
Zitat:
Zitat von lvan Beitrag anzeigen
а ничего, что журнал базы данных как раз для администратора и сделан?
юзер не должен в него лазить
Да ладно?) А когда юзеры хотят узнать кто изменил значение такого-то поля, то каждый раз к админу бегать? Полезный инструмент и для юзеров я считаю, и по опыту могу сказать очень даже любимый юзерами :-)

Я еще делал так, чтобы рядом с кодом пользователя выводилось ФИО, так юзеры совсем полюбили этот инструмент ;-)

Geändert von Kabardian (07.11.2013 um 21:11 Uhr)
Alt 07.11.2013, 21:09   #4  
Ivanhoe ist offline
Ivanhoe
Участник
Benutzerbild von Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4.143 / 2161 (81) +++++++++
Registriert seit: 29.09.2005
Ort: Санкт-Петербург
Zitat:
Zitat von lvan Beitrag anzeigen
а ничего, что журнал базы данных как раз для администратора и сделан?
юзер не должен в него лазить
На многих проектах, настроив доступ к журналу базы данных, удается отказаться от кучи модификаций по отслеживанию истории всего чего угодно. Просто пользователь смотрит журнал не из общего запроса, а через паспорт записи по конкретной сущности.

P.S. для сравнения трудоемкости - обратите внимание на "историю" в модуле CRM.
__________________
Ivanhoe as is..
This post has been rated by: Kabardian (1).
Alt 08.11.2013, 07:30   #5  
TasmanianDevil ist offline
TasmanianDevil
Мрачный тип
Benutzerbild von TasmanianDevil
Злыдни
 
887 / 389 (14) ++++++
Registriert seit: 24.01.2005
Ort: Томск
Хмм ...

Мы подобное еще с тройки пользуем
Miniaturansicht angehängter Grafiken
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	sysdatabaselog.jpg
Hits:	530
Größe:	151,7 KB
ID:	8589   Klicken Sie auf die Grafik für eine größere Ansicht

Name:	sysdatabaselog2.jpg
Hits:	620
Größe:	167,6 KB
ID:	8590  

__________________
Мы летаем, кружимся, нагоняем ужасы ...

Geändert von TasmanianDevil (08.11.2013 um 07:34 Uhr)
This post has been rated by: Kabardian (1).
Alt 08.11.2013, 10:32   #6  
sukhanchik ist offline
sukhanchik
Administrator
Benutzerbild von sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3.343 / 3563 (125) ++++++++++
Registriert seit: 13.06.2004
Ort: Москва
Мы для лучшей читабельности делали метку поля отдельным столбцом. Ну и добавляли кнопку Стек вызовов. Это в качестве идеи расширения функциональности.
__________________
Возможно сделать все. Вопрос времени
This post has been rated by: Kabardian (2).
Alt 08.11.2013, 11:11   #7  
Ivanhoe ist offline
Ivanhoe
Участник
Benutzerbild von Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4.143 / 2161 (81) +++++++++
Registriert seit: 29.09.2005
Ort: Санкт-Петербург
В 2012 актуальнее что-нибудь придумать с отслеживанием по наследуемым таблицам (или как они там называются). Попробуйте настроить отслеживание договоров например:
1. В настройке увидите целую кучку таблиц со словом "Договор".
2. Из паспорта записи увидите только основную таблицу "Договор".
3. Если смотреть через общую форму - то будут отдельные строки для "Договора" и "Договора покупки", например. Смотреть так изменения - еще то удовольствие.

После этого упражнения можно перейти на какой-нибудь еще более интересный справочник типа Клиентов...
__________________
Ivanhoe as is..
Alt 08.11.2013, 12:54   #8  
Kabardian ist offline
Kabardian
Талантливый разгвоздяй
Benutzerbild von Kabardian
 
424 / 338 (12) ++++++
Registriert seit: 14.12.2008
Ort: Москва
Blog-Einträge: 14
Zitat:
Zitat von Ivanhoe Beitrag anzeigen
В 2012 актуальнее что-нибудь придумать с отслеживанием по наследуемым таблицам (или как они там называются). Попробуйте настроить отслеживание договоров например:
1. В настройке увидите целую кучку таблиц со словом "Договор".
2. Из паспорта записи увидите только основную таблицу "Договор".
3. Если смотреть через общую форму - то будут отдельные строки для "Договора" и "Договора покупки", например. Смотреть так изменения - еще то удовольствие.

После этого упражнения можно перейти на какой-нибудь еще более интересный справочник типа Клиентов...
Я думаю для конкретных форм при острой необходимости можно в том же метод buildHistory написать кастомизацию, которая будет подменять стандартные имена более читабельными. Но это конечно уже разовая ювелирная работа.
Stichworte
sysdatabaselog, полезное

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Dynamics AX Sustained Engineering: Announcing Compatibility Certification of App-V 5.0 and TFS 2012 with Dynamics AX 2012 CU5 and Dynamics AX 2012 R2 CU1 Blog bot DAX Blogs 0 01.06.2013 04:38
dynamicsaxbi: Better together: Microsoft Dynamics AX 2012 R2 and SQL Server Power View Blog bot DAX Blogs 0 12.12.2012 13:11
DAX: Official Dynamics AX 2012 R2 Content (update) - Where is it, and how can you find out about updates? Blog bot DAX Blogs 0 03.12.2012 11:11
sumitsaxfactor: Create Your First Custom Service [AX 2012] Blog bot DAX Blogs 0 19.05.2012 19:14
ukax: AX 2012 Training content available on CustomerSource Blog bot DAX Blogs 0 09.09.2011 23:12

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 17:27 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.