|
|
#1 |
|
Гость
|
Как включить журнал изменений для программных изменений записей? Ах3.0
Есть таблица, пусть будет CustTable, у неё есть 2 группы свойств: Modified*, Created*, если они установлены в "1" то:
Если я изменяю данные на форме, то в Паспорт записи-журнал изменений попадает что, кто и когда менял. Если что-то изменит код - в журнал ничего не попадёт. Но мне кажется, что я где-то видел функции, которые включают механизм "логгинга" для программных изменений - я прав или нет? По форуму не придумал как найти |
|
|
|
|
#2 |
|
Участник
|
Проверил на Ax 4 SP2. У меня попадают записи в DatabaseLog и при програмном изменении если до этого на курсоре не был вызван skipDatabaseLog(true)
|
|
|
|
|
#3 |
|
Участник
|
AX 3.0 SP 2 все работает, как из форм так и из кода.
Например код: X++: static void Job28(Args _args) { tstTable t; ; // t.Number = 1.2134; // t.String = "213"; // t.insert(); ttsbegin; select forupdate t where t.Number == 1.2134 && t.String == "213"; t.String = "555555555"; t.update(); ttscommit; } Может буть что-то не так настроено для журналирования операций по таблице? |
|
|
|
|
#4 |
|
Гость
|
сейчас проверю, спасибо за маячок
апдейт написан вот так: Код: #localmacro.updateExecutedStatus
update_recordset %1 setting Executed = %2
where %1.TableId == this.RefTableId &&
%1.RecId == this.RefRecId &&
%1.Executed != %2
#endmacro
....
таблица tbl;
....
#updateExecutedStatus(tbl, executed);Код: select forupdate tbl
where tbl.TableId == this.RefTableId &&
tbl.RecId == this.RefRecId;
tbl.Executed = executed;
tbl.update();Внимание, вопрос: переделывать на *.update() или можно update_recordset заставить? Последний раз редактировалось Shakr; 26.08.2008 в 15:02. |
|
|
|
|
#5 |
|
Участник
|
Цитата:
Сообщение от Shakr
Есть таблица, пусть будет CustTable, у неё есть 2 группы свойств: Modified*, Created*, если они установлены в "1" то:
Если я изменяю данные на форме, то в Паспорт записи-журнал изменений попадает что, кто и когда менял. Если что-то изменит код - в журнал ничего не попадёт. Но мне кажется, что я где-то видел функции, которые включают механизм "логгинга" для программных изменений - я прав или нет? По форуму не придумал как найти |
|
|
|
|
#6 |
|
Участник
|
по хорошему, если у вас включено протоколирование изменений таблицы, то update_recordset не должен работать как операция над всей таблицей, должен разбиться как на много Update - ов отдельно над каждой записью. Если оно действительно настроено, то не важно писать update_recordset или отдельные update -ы написаны
Последний раз редактировалось crazysolntse; 26.08.2008 в 15:16. |
|
|
|
|
#7 |
|
Участник
|
update_recordset тоже работает и так просто и в виде макроса
1. возможно просто никакие записи не меняются? 2. проверить настройки журналирования (хотя раз Update отрабатывает - все д.б. нормально) |
|
|
|
|
#8 |
|
Участник
|
Скорее всего просто перед вызовом макроса где-то стоит skipDatabaseLog(true)
оффтопик: По-моему, изврат так писать код в макросах. Дебажите вы как? |
|
|
|
|
#9 |
|
Гость
|
заработало. поковырялся с настройкой журнала базы данных, которую вы советовали, а вот что сковырнул - не заметил. Спасибо всем
upd: Нашёл, что сковырнул: раньше было настроено так: таблица, поле Executed, тип измененеия: update я снёс настройки изменения всех полей таблицы и сделал таблица, (пусто), тип изменения: Insert, Delete, Update после этого логгирование заработало Последний раз редактировалось Shakr; 26.08.2008 в 16:00. |
|
|
|
|
#10 |
|
Гость
|
Цитата:
оффтопик: По-моему, изврат так писать код в макросах. Дебажите вы как
|
|
|
|
|
#11 |
|
Участник
|
Фамилия, Имя, звание, будьте любезны.
Накажем
|
|
|
|
|
#12 |
|
Axapta
|
Иван, по сравнению с нижеприведенным кодом, код автора - невинная детская шалость.
И это ты еще весь метод не видел. Но согласен, дебажить это невозможно...X++: #localmacro.dependedGUIDField_RContract
tableMapping.add(
new IntegrFieldMapping_LJourTransRContract(
#attrFilter(IntegrTableFieldAttribute::construct(
tableNum(#tableName), fieldNum(#tableName, %1)
))
, tableNum(%2), fieldNum(%2, %3)
)
);
#endmacro |
|
|