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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.08.2008, 11:14   #1  
Shakr
Гость
 
n/a
Как включить журнал изменений для программных изменений записей? Ах3.0
Есть таблица, пусть будет CustTable, у неё есть 2 группы свойств: Modified*, Created*, если они установлены в "1" то:

Если я изменяю данные на форме, то в Паспорт записи-журнал изменений попадает что, кто и когда менял. Если что-то изменит код - в журнал ничего не попадёт. Но мне кажется, что я где-то видел функции, которые включают механизм "логгинга" для программных изменений - я прав или нет? По форуму не придумал как найти
Старый 26.08.2008, 13:25   #2  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Проверил на Ax 4 SP2. У меня попадают записи в DatabaseLog и при програмном изменении если до этого на курсоре не был вызван skipDatabaseLog(true)
Старый 26.08.2008, 14:27   #3  
snirk is offline
snirk
Участник
 
36 / 12 (1) ++
Регистрация: 11.07.2007
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  
Shakr
Гость
 
n/a
сейчас проверю, спасибо за маячок

апдейт написан вот так:
Код:
#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  
DocSerzh is offline
DocSerzh
Участник
 
51 / 22 (0) +++
Регистрация: 28.06.2004
Цитата:
Сообщение от Shakr Посмотреть сообщение
Есть таблица, пусть будет CustTable, у неё есть 2 группы свойств: Modified*, Created*, если они установлены в "1" то:

Если я изменяю данные на форме, то в Паспорт записи-журнал изменений попадает что, кто и когда менял. Если что-то изменит код - в журнал ничего не попадёт. Но мне кажется, что я где-то видел функции, которые включают механизм "логгинга" для программных изменений - я прав или нет? По форуму не придумал как найти
форма "Настройка журнала базы данных" [SysDatabaseLogSetup] ?
Старый 26.08.2008, 15:13   #6  
crazysolntse is offline
crazysolntse
Участник
Аватар для crazysolntse
 
21 / 11 (1) +
Регистрация: 24.07.2006
Адрес: Москва
по хорошему, если у вас включено протоколирование изменений таблицы, то update_recordset не должен работать как операция над всей таблицей, должен разбиться как на много Update - ов отдельно над каждой записью. Если оно действительно настроено, то не важно писать update_recordset или отдельные update -ы написаны

Последний раз редактировалось crazysolntse; 26.08.2008 в 15:16.
Старый 26.08.2008, 15:26   #7  
snirk is offline
snirk
Участник
 
36 / 12 (1) ++
Регистрация: 11.07.2007
update_recordset тоже работает и так просто и в виде макроса

1. возможно просто никакие записи не меняются?
2. проверить настройки журналирования (хотя раз Update отрабатывает - все д.б. нормально)
Старый 26.08.2008, 15:47   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Скорее всего просто перед вызовом макроса где-то стоит skipDatabaseLog(true)
оффтопик: По-моему, изврат так писать код в макросах. Дебажите вы как?
Старый 26.08.2008, 15:47   #9  
Shakr
Гость
 
n/a
заработало. поковырялся с настройкой журнала базы данных, которую вы советовали, а вот что сковырнул - не заметил. Спасибо всем

upd:
Нашёл, что сковырнул:
раньше было настроено так:
таблица, поле Executed, тип измененеия: update

я снёс настройки изменения всех полей таблицы и сделал
таблица, (пусто), тип изменения: Insert, Delete, Update

после этого логгирование заработало

Последний раз редактировалось Shakr; 26.08.2008 в 16:00.
Старый 26.08.2008, 15:48   #10  
Shakr
Гость
 
n/a
Цитата:
оффтопик: По-моему, изврат так писать код в макросах. Дебажите вы как
этот код писали великие, не мне их судить.
Старый 26.08.2008, 16:20   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от Shakr Посмотреть сообщение
этот код писали великие, не мне их судить.
Фамилия, Имя, звание, будьте любезны.
Накажем
Старый 26.08.2008, 16:57   #12  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Иван, по сравнению с нижеприведенным кодом, код автора - невинная детская шалость. И это ты еще весь метод не видел. Но согласен, дебажить это невозможно...
X++:
#localmacro.dependedGUIDField_RContract
        tableMapping.add(
            new IntegrFieldMapping_LJourTransRContract(
                #attrFilter(IntegrTableFieldAttribute::construct(
                    tableNum(#tableName), fieldNum(#tableName, %1)
                ))
                , tableNum(%2), fieldNum(%2, %3)
            )
        );
  #endmacro
Теги
ax3.0, ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
вывод количества записей в таблице на web форме и указание текущей страницы таблицы bambuk1960 DAX: Программирование 1 06.07.2006 13:27
Права доступа - Журнал платежей SDA DAX: Прочие вопросы 1 20.09.2004 23:10
Как включить контроль изменений в журнале накладных ? NEO DAX: Функционал 0 17.06.2004 12:30
Журнал спецификаций Lol14 DAX: Функционал 13 16.06.2003 13:10
Журнал коммерческих соглашений Роман Кошелев DAX: Функционал 4 08.08.2002 16:59
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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