AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.11.2013, 20:34   #1  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
AX 2012 Must-have доработка журнала базы данных
Добрый вечер!

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

ЗАДАЧА
Сделать журнал базы данных более user-friendly. Сейчас в нем ничего не понять, если ты не системный администратор:
Нажмите на изображение для увеличения
Название: ЖБД - до.JPG
Просмотров: 480
Размер:	29.4 Кб
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();
}
И получил вот такой красивый журнал базы данных:
Нажмите на изображение для увеличения
Название: ЖБД - после.JPG
Просмотров: 430
Размер:	31.3 Кб
ID:	8588

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

Последний раз редактировалось Kabardian; 07.11.2013 в 20:36. Причина: добавил щепотку маркетинга в название темы)
За это сообщение автора поблагодарили: Player1 (2).
Теги
sysdatabaselog, полезное

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:09.