0
  procedure event(event_name varchar2) is 

form_name        VARCHAR2 (30)   := NAME_IN ('system.current_form');
   block_name       VARCHAR2 (30)   := NAME_IN ('system.cursor_block');
   item_name        VARCHAR2 (100)  := NAME_IN ('system.current_item');

  BEGIN   

 If  (  (event_name='PRE-UPDATE') or (EVENT_NAME = 'WHEN-VALIDATE-RECORD'   ) ) and 
           form_name ='HRWSPSF'  and block_name ='POSITIONS' and item_name IN ('SEGMENT1','SEGMENT2','SEGMENT3','LOCATION_ID')
           and   NAME_IN('SYSTEM.RECORD_STATUS')IN ('CHANGED') 
           then     
         DECLARE
                L_SEGMENT    NUMBER;
            L_POS       NUMBER;
                P_SEGMENT1 VARCHAR2(255):=NAME_IN('POSITIONS.SEGMENT1');
                P_SEGMENT2 VARCHAR2(255):=NAME_IN('POSITIONS.SEGMENT2');
                P_SEGMENT3 VARCHAR2(255):=NAME_IN('POSITIONS.SEGMENT3');
                P_LOCATION_ID NUMBER:=NAME_IN('POSITIONS.LOCATION_ID');
         BEGIN

                  SELECT count(*) into L_SEGMENT
                FROM  hr_all_positions_f hapf,
                per_position_definitions ppd
                WHERE hapf.position_definition_id = ppd.position_definition_id
                AND PPD.SEGMENT1 = P_SEGMENT1
                AND PPD.SEGMENT2=P_SEGMENT2
                AND hapf.business_group_id = 111
                AND HAPF.LOCATION_ID = P_LOCATION_ID;

           IF (L_SEGMENT>=1) THEN
            FND_MESSAGE.SET_NAME('PER','IGFMIS_DUPLICATE_POSITION');
                  FND_MESSAGE.error;
              RAISE form_trigger_failure;
           END IF;

                SELECT count(*) into L_POS
                FROM per_position_definitions ppd
                WHERE PPD.SEGMENT3 = P_SEGMENT3;

         IF (L_POS>=1) THEN
           FND_MESSAGE.SET_NAME('PER','IGFMIS_DUPLICATE_POSITION_CODE');
                  FND_MESSAGE.error;
              RAISE form_trigger_failure;
         END IF;

         END;
         END IF;
end event;

動作していません。検証は、位置と場所フィールドの挿入と更新で行う必要があります。IF 条件が機能していないと思います。適切な IF 条件を知る必要があります。特定のフィールドのみを検証する方法。

4

1 に答える 1

0

EBS はわかりませんが、チェックされたイベント名は Oracle Forms トリガーと同じです。

PRE-UPDATEプログラムがコミット フォーム プロセスの一部としてデータベース内のレコードを更新する前に、トリガーが起動します。たとえば、ユーザーが F10 を押してデータをコミットした後に起動します。

WHEN-VALIDATE-RECORDユーザーが「レコードを離れた」後にトリガーが起動します。ユーザーが他のレコードまたはブロックに移動したときを意味します。また、ユーザーがデータをコミットした後にも発生します。ユーザーが同じレコード内のアイテム (フィールド) 間を移動するときは発生しません。

ユーザーがアイテムを離れた後にアイテムを検証する必要がある場合は、 を使用しますWHEN-VALIDATE-ITEM。多分それはEBSでも動作します。

于 2015-12-27T15:54:27.750 に答える