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

.
ЗАДАЧА
Сделать журнал базы данных более 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();
}
И получил вот такой красивый журнал базы данных:
Вообще не понимаю, почему журнал базы данных изначально так не разработали

, это настолько очевидно и гениально просто, что само напрашивается.