26.08.2008, 11:14 | #1 |
Гость
|
Как включить журнал изменений для программных изменений записей? Ах3.0
Есть таблица, пусть будет CustTable, у неё есть 2 группы свойств: Modified*, Created*, если они установлены в "1" то:
Если я изменяю данные на форме, то в Паспорт записи-журнал изменений попадает что, кто и когда менял. Если что-то изменит код - в журнал ничего не попадёт. Но мне кажется, что я где-то видел функции, которые включают механизм "логгинга" для программных изменений - я прав или нет? По форуму не придумал как найти |
|
26.08.2008, 13:25 | #2 |
Участник
|
Проверил на Ax 4 SP2. У меня попадают записи в DatabaseLog и при програмном изменении если до этого на курсоре не был вызван skipDatabaseLog(true)
|
|
26.08.2008, 14:27 | #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; } Может буть что-то не так настроено для журналирования операций по таблице? |
|
26.08.2008, 14:42 | #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. |
|
26.08.2008, 15:12 | #5 |
Участник
|
Цитата:
Сообщение от Shakr
Есть таблица, пусть будет CustTable, у неё есть 2 группы свойств: Modified*, Created*, если они установлены в "1" то:
Если я изменяю данные на форме, то в Паспорт записи-журнал изменений попадает что, кто и когда менял. Если что-то изменит код - в журнал ничего не попадёт. Но мне кажется, что я где-то видел функции, которые включают механизм "логгинга" для программных изменений - я прав или нет? По форуму не придумал как найти |
|
26.08.2008, 15:13 | #6 |
Участник
|
по хорошему, если у вас включено протоколирование изменений таблицы, то update_recordset не должен работать как операция над всей таблицей, должен разбиться как на много Update - ов отдельно над каждой записью. Если оно действительно настроено, то не важно писать update_recordset или отдельные update -ы написаны
Последний раз редактировалось crazysolntse; 26.08.2008 в 15:16. |
|
26.08.2008, 15:26 | #7 |
Участник
|
update_recordset тоже работает и так просто и в виде макроса
1. возможно просто никакие записи не меняются? 2. проверить настройки журналирования (хотя раз Update отрабатывает - все д.б. нормально) |
|
26.08.2008, 15:47 | #8 |
Участник
|
Скорее всего просто перед вызовом макроса где-то стоит skipDatabaseLog(true)
оффтопик: По-моему, изврат так писать код в макросах. Дебажите вы как? |
|
26.08.2008, 15:47 | #9 |
Гость
|
заработало. поковырялся с настройкой журнала базы данных, которую вы советовали, а вот что сковырнул - не заметил. Спасибо всем
upd: Нашёл, что сковырнул: раньше было настроено так: таблица, поле Executed, тип измененеия: update я снёс настройки изменения всех полей таблицы и сделал таблица, (пусто), тип изменения: Insert, Delete, Update после этого логгирование заработало Последний раз редактировалось Shakr; 26.08.2008 в 16:00. |
|
26.08.2008, 15:48 | #10 |
Гость
|
Цитата:
оффтопик: По-моему, изврат так писать код в макросах. Дебажите вы как
|
|
26.08.2008, 16:20 | #11 |
Участник
|
Фамилия, Имя, звание, будьте любезны.
Накажем |
|
26.08.2008, 16:57 | #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 |
|