Триггеры и журналирование
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
vtar Эксперт
Вступление в Клуб: 20.03.2009
|
Ср Ноя 02, 2016 14:37  Триггеры и журналирование |
|
Полезность: Нет оценки
|
Добрый день!
Возник тут вопрос. Может кто из местных гуров, просвятит незадачливого меня.
Почему ЦФТ придумало какую то мутную концепцию "журналирования реквизитов" ? А не использует запись истории значений через триггеры?
Еще, если вдруг есть пример где все таки через триггер история пишется, просьба кинуть ссылку, в каком ТБП. |
|
 |
Volod Эксперт
Вступление в Клуб: 19.09.2007
|
Ср Ноя 02, 2016 14:51   |
|
Полезность: Нет оценки
|
Так они вроде через триггер и пишутся. Или что-то новое появилось? |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Ср Ноя 02, 2016 15:01  Re: Триггеры и журналирование |
|
Полезность: 1
|
vtar пишет: | Добрый день!
Возник тут вопрос. Может кто из местных гуров, просвятит незадачливого меня.
Почему ЦФТ придумало какую то мутную концепцию "журналирования реквизитов" ? А не использует запись истории значений через триггеры?
Еще, если вдруг есть пример где все таки через триггер история пишется, просьба кинуть ссылку, в каком ТБП. |
Для примера возьмем PRODUCT
Журналирование для
C_DATE_CLOSE
C_COM_STATUS
Смотрим триггеры
Код: |
DECLARE c varchar2(16);
BEGIN c := nvl(:NEW.CLASS_ID,:OLD.CLASS_ID);
if not inserting then
if not ((:NEW.C_DATE_CLOSE is null and :OLD.C_DATE_CLOSE is null) or NVL((:NEW.C_DATE_CLOSE = :OLD.C_DATE_CLOSE),false)) or deleting then
rtl.log_vals(:OLD.ID, 'DATE_CLOSE', 'DATE', to_char(:OLD.C_DATE_CLOSE,constant.DATE_FORMAT), c);
end if;
if not ((:NEW.C_COM_STATUS is null and :OLD.C_COM_STATUS is null) or NVL((:NEW.C_COM_STATUS = :OLD.C_COM_STATUS),false)) or deleting then
rtl.log_vals(:OLD.ID, 'COM_STATUS', 'REFERENCE', :OLD.C_COM_STATUS||'.'||Z#COM_STATUS_PRD#INTERFACE.class$(:OLD.C_COM_STATUS,false)||'.'||Z#COM_STATUS_PRD#INTERFACE.g#code(:OLD.C_COM_STATUS), c);
end if;
end if;
if valmgr.trigger_flag then
if inserting then rtl.log_vals(:new.id,'#NEWOBJ#','STRUCTURE',nvl(:new.C_NUM_DOG,c),c);
elsif deleting then rtl.log_vals(:old.id,'#DELOBJ#','STRUCTURE',nvl(:old.C_NUM_DOG,c),c); end if;
end if;
END;
|
Код: |
DECLARE c varchar2(16):=:NEW.CLASS_ID;
BEGIN
if not ((:NEW.C_DATE_BEGINING is null and :OLD.C_DATE_BEGINING is null) or NVL((:NEW.C_DATE_BEGINING = :OLD.C_DATE_BEGINING),false)) then
if lib.is_parent('DAYDOCS',c) then
update IBS.Z#DAYDOCS set C_DATE_BEGINING= :NEW.C_DATE_BEGINING where ID=:NEW.ID;
end if;
if lib.is_parent('EXECUTORY_PROCES',c) then
update IBS.Z#EXECUTORY_PROCES set C_DATE_BEGINING= :NEW.C_DATE_BEGINING where ID=:NEW.ID;
end if;
end if;
if not ((:NEW.C_DATE_ENDING is null and :OLD.C_DATE_ENDING is null) or NVL((:NEW.C_DATE_ENDING = :OLD.C_DATE_ENDING),false)) then
if lib.is_parent('EXECUTORY_PROCES',c) then
update IBS.Z#EXECUTORY_PROCES set C_DATE_ENDING= :NEW.C_DATE_ENDING where ID=:NEW.ID;
end if;
end if;
if not ((:NEW.C_CREATE_USER is null and :OLD.C_CREATE_USER is null) or NVL((:NEW.C_CREATE_USER = :OLD.C_CREATE_USER),false)) then
if lib.is_parent('EXECUTORY_PROCES',c) then
update IBS.Z#EXECUTORY_PROCES set C_CREATE_USER= :NEW.C_CREATE_USER where ID=:NEW.ID;
end if;
end if;
if not ((:NEW.C_COM_STATUS is null and :OLD.C_COM_STATUS is null) or NVL((:NEW.C_COM_STATUS = :OLD.C_COM_STATUS),false)) then
if lib.is_parent('INKASS',c) then
update IBS.Z#INKASS set C_COM_STATUS= :NEW.C_COM_STATUS where ID=:NEW.ID;
end if;
if lib.is_parent('BANK_CLIENT',c) then
update IBS.Z#BANK_CLIENT set C_COM_STATUS= :NEW.C_COM_STATUS where ID=:NEW.ID;Z#BANK_CLIENT#INTERFACE.cache$del(:NEW.ID,:NEW.ID,c);
end if;
if lib.is_parent('EXECUTORY_PROCES',c) then
update IBS.Z#EXECUTORY_PROCES set C_COM_STATUS= :NEW.C_COM_STATUS where ID=:NEW.ID;
end if;
end if;
if not ((:NEW.C_DEPART is null and :OLD.C_DEPART is null) or NVL((:NEW.C_DEPART = :OLD.C_DEPART),false)) then
if lib.is_parent('INKASS',c) then
update IBS.Z#INKASS set C_DEPART= :NEW.C_DEPART where ID=:NEW.ID;
end if;
if lib.is_parent('PR_CRED',c) then
update IBS.Z#PR_CRED set C_DEPART= :NEW.C_DEPART where ID=:NEW.ID;
end if;
if lib.is_parent('RES_BASE_ACCS',c) then
update IBS.Z#RES_BASE_ACCS set C_DEPART= :NEW.C_DEPART where ID=:NEW.ID;
end if;
if lib.is_parent('AUR_DOCUM',c) then
update IBS.Z#AUR_DOCUM set C_DEPART= :NEW.C_DEPART where ID=:NEW.ID;
end if;
if lib.is_parent('EXECUTORY_PROCES',c) then
update IBS.Z#EXECUTORY_PROCES set C_DEPART= :NEW.C_DEPART where ID=:NEW.ID;
end if;
end if;
if not ((:NEW.C_FILIAL is null and :OLD.C_FILIAL is null) or NVL((:NEW.C_FILIAL = :OLD.C_FILIAL),false)) then
if lib.is_parent('INKASS',c) then
update IBS.Z#INKASS set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
end if;
if lib.is_parent('BANK_CLIENT',c) then
update IBS.Z#BANK_CLIENT set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;Z#BANK_CLIENT#INTERFACE.cache$del(:NEW.ID,:NEW.ID,c);
end if;
if lib.is_parent('DAYDOCS',c) then
update IBS.Z#DAYDOCS set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
end if;
if lib.is_parent('PR_CRED',c) then
update IBS.Z#PR_CRED set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
end if;
if lib.is_parent('RES_BASE_ACCS',c) then
update IBS.Z#RES_BASE_ACCS set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
end if;
if lib.is_parent('EXECUTORY_PROCES',c) then
update IBS.Z#EXECUTORY_PROCES set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
end if;
if lib.is_parent('DM_SDELKA',c) then
update IBS.Z#DM_SDELKA set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
end if;
if lib.is_parent('SDELKA',c) then
update IBS.Z#SDELKA set C_FILIAL= :NEW.C_FILIAL where ID=:NEW.ID;
end if;
end if;
if not ((:NEW.C_DATE_CLOSE is null and :OLD.C_DATE_CLOSE is null) or NVL((:NEW.C_DATE_CLOSE = :OLD.C_DATE_CLOSE),false)) then
if lib.is_parent('BANK_CLIENT',c) then
update IBS.Z#BANK_CLIENT set C_DATE_CLOSE= :NEW.C_DATE_CLOSE where ID=:NEW.ID;Z#BANK_CLIENT#INTERFACE.cache$del(:NEW.ID,:NEW.ID,c);
end if;
if lib.is_parent('EXECUTORY_PROCES',c) then
update IBS.Z#EXECUTORY_PROCES set C_DATE_CLOSE= :NEW.C_DATE_CLOSE where ID=:NEW.ID;
end if;
end if;
if not ((:NEW.C_DATE_BEGIN is null and :OLD.C_DATE_BEGIN is null) or NVL((:NEW.C_DATE_BEGIN = :OLD.C_DATE_BEGIN),false)) then
if lib.is_parent('EXECUTORY_PROCES',c) then
update IBS.Z#EXECUTORY_PROCES set C_DATE_BEGIN= :NEW.C_DATE_BEGIN where ID=:NEW.ID;
end if;
if lib.is_parent('DM_DAYDOCS',c) then
update IBS.Z#DM_DAYDOCS set C_DATE_BEGIN= :NEW.C_DATE_BEGIN where ID=:NEW.ID;
end if;
end if;
if not ((:NEW.C_NUM_DOG is null and :OLD.C_NUM_DOG is null) or NVL((:NEW.C_NUM_DOG = :OLD.C_NUM_DOG),false)) then
if lib.is_parent('INKASS',c) then
update IBS.Z#INKASS set C_NUM_DOG= :NEW.C_NUM_DOG where ID=:NEW.ID;
end if;
if lib.is_parent('PR_CRED',c) then
update IBS.Z#PR_CRED set C_NUM_DOG= :NEW.C_NUM_DOG where ID=:NEW.ID;
end if;
if lib.is_parent('EXECUTORY_PROCES',c) then
update IBS.Z#EXECUTORY_PROCES set C_NUM_DOG= :NEW.C_NUM_DOG where ID=:NEW.ID;
end if;
end if;
END;
|
|
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|