Как проверить данные popup lov изменено или нет в Oracle Apex - PullRequest
0 голосов
/ 11 декабря 2018

В настоящее время я создаю приложение в Oracle Apex 5.0.При этом одна из страниц содержит 7 popup lov (или список выбора), содержащий некоторое значение по умолчанию, которое было получено из более чем 1 таблицы из более чем 1 schemas.

Теперь моя задачасоздать и применить проверку, которая проверяет, что хотя бы одна из данных popup lov была изменена (независимо от того, все ли изменения), если нет, то выдается ошибка.

Я создал процедуру внутрипакет и выдать ошибку внутри него (я также создал функцию, которая возвращает значение boolean), но она не работает вообще.

Я также создал скрытые элементы для каждого popup lovпроверить их независимо, но это не сработало.

Итак, я подумал, может быть, это потому, что return val of lov влияет на мои данные.Итак, я изменил свой пакет, но он также не будет работать.

Вот мой пример кода:

 CREATE OR REPLACE package body KPC_CA is


 function find_change ( t_per_id      KPCPAY.EMP_INF.per_id%type, 
                        shift1        KPCPAY.EMP_INF.shft1%type,
                        shift2        KPCPAY.EMP_INF.shft2%type,
                        shift3        KPCPAY.EMP_INF.shft3%type,
                        wklyoff       KPCPAY.EMP_INF.wklyoff%type,
                        sup_name      KPCPAY.EMP_INF.emp_name%type,
                        sup_token_no  KPCPAY.EMP_INF.r_emp_no%type,
                        loc_desc      KPCPAY.EMP_INF.loc_desc%type,
                        dept_name     KPCPAY.EMP_INF.dept_name%type,
                        sbu           KPCPAY.EMP_INF.sbu_id%type,
                        effective_date          date
                  ) return number as

                        t_shift1        KPCPAY.EMP_INF.shft1%type;
                        t_shift2        KPCPAY.EMP_INF.shft2%type;
                        t_shift3        KPCPAY.EMP_INF.shft3%type;
                        t_wklyoff       KPCPAY.EMP_INF.wklyoff%type;
                        t_sup_name      KPCPAY.EMP_INF.emp_name%type;
                        t_sup_token_no  KPCPAY.EMP_INF.r_emp_no%type;
                        t_location      KPCPAY.EMP_INF.loc_desc%type;
                        t_dept_name     KPCPAY.EMP_INF.dept_name%type;
                        t_sbu           KPCPAY.EMP_INF.sbu_id%type;


                        flag                      boolean := false;


 begin
     begin
         select shft1, shft2, shft3, wklyoff, loc_desc, r_emp_no, 
                dept_name into t_shift1, t_shift2, t_shift3, t_wklyoff, 
                t_location, t_sup_token_no, t_dept_name                                
         from KPCPAY.EMP_INF 
         where per_id = t_per_id;


         select emp_name into t_sup_name
         from KPCPAY.EMP_INF 
         where emp_no = (select r_emp_no 
                         from KPCPAY.EMP_INF 
                         where per_id = t_per_id);                      


         SELECT distinct(decode ( SUBSTR(ORGANIZATION_CODE, 1, 1), 
                                                             '1','CORP',
                                                              '2','ACD',
                                                              '3','TRM',
                                                              '4','ACR',
                                                              '5','RR',
                                                              '6','RRS'
                            )) "decode" into t_sbu
            from apps.org_organization_definitions 
            where ORGANIZATION_ID= (select sbu_id 
                            from kpcpay.emp_inf 
                            where per_id = t_per_id);

     end;


     begin

         if t_shift1 != shift1 then
             flag := true;
         end if;

         if t_shift2 != shift2 then
             flag := true;
         end if;

         if t_shift3 != shift3 then
             flag := true;
         end if;

         if t_wklyoff != wklyoff then
                flag := true;
         end if;

         if t_sup_token_no != sup_token_no then
              flag := true;
         end if;

         if t_sup_name != sup_name then
              flag := true;
         end if;

         if t_location != loc_desc then
               flag := true;
         end if;

         if t_dept_name != dept_name then
                flag := true;
         end if;

         if t_sbu != sbu then
               flag := true;
         end if;                

      end;


      if flag = true then
         return 1;
      else
        return 0;
          -- or raise_application_error
      end if;              

    end find_change;
    end KPC_CA;

1 Ответ

0 голосов
/ 13 декабря 2018

Честно говоря, я бы сделал следующее:

  1. Создайте свои 7 всплывающих LOV, как вы уже сделали.Назовите их, скажем, P1_POPUP_1 и т. Д.
  2. . Для каждого из них создайте скрытый элемент с именем P1_POPUP_1_ORIG, где источником является элемент P1_POPUP_x.
  3. Затемсоздайте проверку типа PL / SQL Expression, и выражение будет иметь вид:

.

:P1_POPUP_1 != :P1_POPUP_1_ORIG AND :P1_POPUP_2 != :P1_POPUP_2_ORIG ...

Это работает, если вы знаете, что начальное и конечное значения не будутноль.Если вам нужно обработать нули, выражение немного изменится.

Вы также можете изменить различные проверки для каждого элемента, чтобы вы знали, какой пользователь не изменил.

Таким образом, нет сложной функции, которую необходимо поддерживать.

Редактировать : Есть несколько способов обработки нулевых значений.В этом случае я обычно делаю что-то вроде:

NVL( :P1_POPUP_1, '*' ) != NVL( :P1_POPUP_1_ORIG, '*' ) AND 
NVL( :P1_POPUP_2, '*' ) != NVL( :P1_POPUP_2_ORIG, '*' ) AND  ...

Здесь я выбрал '*' в качестве простой строки, которая, как я знаю, никогда не будет отображаться в качестве фактического значения, но вы можете выбрать что-нибудьбольше подходит для ваших ожидаемых значений.

...