EBS_FORM_開發:關於切換不同BLOCK的時候彈出需要保存的窗口


 

在開發的時候發現這樣一個問題,當切換不同BLOCK的時候彈出需要保存的窗口,於是想在切換record的時候,自動commit一下,結果發現很多觸發器都不允許commit_form的函數.於是就有了兩個思路:

1.利用KEY-NEXT-ITEM


Declare
l_LINE_record Number;
l_MID_record Number;
l_MEND_record Number;
Begin

If :MEND.MEND_SCORE Is Not Null Then
:PARAMETER.CURRENT_KEY_MODE := 'KEY-NEXT-ITEM';
APP_CUSTOM.open_window('LINES');
Go_Block('MID');
l_MID_record := :MID.LINE_NUMBER;
:PARAMETER.CUR_MID_REC := l_MID_record+1;
l_MID_record := :PARAMETER.CUR_MID_REC;
if :PARAMETER.CUR_MID_REC > :MID.MAX_LINE_NUMBER THEN 
     FND_MESSAGE.SET_STRING('該項已完成評價!');
   FND_MESSAGE.HINT;
ELSE NULL;
END IF;
Go_record(l_MID_record);
clear_message;
Go_Block('MEND');
GO_ITEM('MEND.MEND_SCORE');
:PARAMETER.CURRENT_KEY_MODE := 'WHEN-VALIDATE-ITEM';

End If;
End;

 

在item的WHEN-VALIDATE-ITEM加入

Begin
---當有變更,而且CURRENT_KEY_MODE(輸入之后的導航類型)不是KEY-NEXT-ITEM的時候,必須用tab按鍵或者enter導航! --FND_MESSAGE.DEBUG('WHEN-VALIDATE-ITEM1'); IF :MEND.MEND_SCORE IS NOT NULL AND NVL(:PARAMETER.CURRENT_KEY_MODE,'WHEN-VALIDATE-ITEM') <> 'KEY-NEXT-ITEM' THEN FND_MESSAGE.SET_STRING('請注意:該欄位輸入之后,請按Tab按鍵或者Enter按鍵導航!'); FND_MESSAGE.HINT; --RAISE FORM_TRIGGER_FAILURE;---禁止用戶用鼠標點擊導航! END IF; --FND_MESSAGE.DEBUG('WHEN-VALIDATE-ITEM2'); End; 

代碼這里可能存在一點問題,依據自己的需要進行修改.

2.利用POST-RECORD

這里利用函數:

/*后來直接在post-record中寫ddl語句,
如果record_status是INSERT或者CHANGED就觸發,
然后form_ddl('commit');再把record_status設為query,就完成了自動保存*/

declare
    CURSOR row_id
  IS    SELECT rowid
       FROM CUX_HRPE_MEND_T
      WHERE MEND_ID = :MEND.MEND_ID;
BEGIN 
    if     GET_RECORD_PROPERTY(:SYSTEM.CURSOR_RECORD,'MEND',Status ) = 'INSERT' 
  THEN --MEND_DATA.LOCK_ROW;
       --FND_MESSAGE.DEBUG('插入');
    IF :LINES.LINE_ID IS NULL THEN
      SELECT CUX_HRPE_LINES_t_S.NEXTVAL INTO :LINES.LINE_ID FROM SYS.DUAL;
      :MEND.LINE_ID := :LINES.LINE_ID;
    END IF;
    
    IF :MID.MID_ID IS NULL THEN
      SELECT CUX_HRPE_MID_t_S.NEXTVAL INTO :MID.MID_ID FROM SYS.DUAL;
      :MEND.MID_ID := :MID.MID_ID;
    END IF;
  
    IF :MEND.MEND_ID IS NULL THEN
           SELECT CUX_HRPE_MEND_T_S.NEXTVAL
              INTO :MEND.MEND_ID
              FROM SYS.DUAL;
    END IF;
        
        fnd_standard.set_who;
        INSERT INTO CUX_HRPE_MEND_T (
     MEND_ID,
     MID_ID,
     LINE_ID,
     HEADER_ID,
     MEND_ORGANIZATION_ID,
     MEND_PERSON_ID,
     MEND_SCORE,
     MEND_VALUE,
     MEND_CAUSE,
     MEND_DATE,
     MEND_SUBMIT_FLAG,
     CREATED_BY,
     CREATION_DATE,
     LAST_UPDATED_BY,
     LAST_UPDATE_DATE,
     LAST_UPDATE_LOGIN,
     ATTRIBUTE_CATEGORY,
     ATTRIBUTE1,
     ATTRIBUTE2,
     ATTRIBUTE3,
     ATTRIBUTE4,
     ATTRIBUTE5,
     PEOPLE_COUNT,
     SCD_PERCENT)
  VALUES (
     :MEND.MEND_ID,
     :MEND.MID_ID,
     :MEND.LINE_ID,
     :MEND.HEADER_ID,
     :MEND.MEND_ORGANIZATION_ID,
     :MEND.MEND_PERSON_ID,
     :MEND.MEND_SCORE,
     :MEND.MEND_VALUE,
     :MEND.MEND_CAUSE,
     :MEND.MEND_DATE,
     :MEND.MEND_SUBMIT_FLAG,
     :MEND.CREATED_BY,
     :MEND.CREATION_DATE,
     :MEND.LAST_UPDATED_BY,
     :MEND.LAST_UPDATE_DATE,
     :MEND.LAST_UPDATE_LOGIN,
     :MEND.ATTRIBUTE_CATEGORY,
     :MEND.ATTRIBUTE1,
     :MEND.ATTRIBUTE2,
     :MEND.ATTRIBUTE3,
     :MEND.ATTRIBUTE4,
     :MEND.ATTRIBUTE5,
     :MEND.PEOPLE_COUNT,
     :MEND.SCD_PERCENT);
          OPEN row_id;
          FETCH row_id INTO :MEND.row_id;
              IF (row_id%NOTFOUND) THEN
                 CLOSE row_id;
                 RAISE NO_DATA_FOUND;
              END IF;
              CLOSE row_id;
    forms_ddl('COMMIT');   
    set_record_property(:system.trigger_record,:system.trigger_block, STATUS,QUERY_STATUS);
    
  ELSIF      GET_RECORD_PROPERTY(:SYSTEM.CURSOR_RECORD,'MEND',Status ) = 'CHANGED' 
  THEN  
   IF :MEND.MEND_ID IS NOT NULL THEN 
         fnd_standard.set_who;

   UPDATE CUX_HRPE_MEND_T SET
      MEND_ID                        = :MEND.MEND_ID,
      MID_ID                         = :MEND.MID_ID,
      LINE_ID                        = :MEND.LINE_ID,
      HEADER_ID                      = :MEND.HEADER_ID,
      MEND_ORGANIZATION_ID           = :MEND.MEND_ORGANIZATION_ID,
      MEND_PERSON_ID                 = :MEND.MEND_PERSON_ID,
      MEND_SCORE                     = :MEND.MEND_SCORE,
      MEND_VALUE                     = :MEND.MEND_VALUE,
      MEND_CAUSE                     = :MEND.MEND_CAUSE,
      MEND_DATE                      = :MEND.MEND_DATE,
      MEND_SUBMIT_FLAG               = :MEND.MEND_SUBMIT_FLAG,
      CREATED_BY                     = :MEND.CREATED_BY,
      CREATION_DATE                  = :MEND.CREATION_DATE,
      LAST_UPDATED_BY                = :MEND.LAST_UPDATED_BY,
      LAST_UPDATE_DATE               = :MEND.LAST_UPDATE_DATE,
      LAST_UPDATE_LOGIN              = :MEND.LAST_UPDATE_LOGIN,
      ATTRIBUTE_CATEGORY             = :MEND.ATTRIBUTE_CATEGORY,
      ATTRIBUTE1                     = :MEND.ATTRIBUTE1,
      ATTRIBUTE2                     = :MEND.ATTRIBUTE2,
      ATTRIBUTE3                     = :MEND.ATTRIBUTE3,
      ATTRIBUTE4                     = :MEND.ATTRIBUTE4,
      ATTRIBUTE5                     = :MEND.ATTRIBUTE5,
      PEOPLE_COUNT                   = :MEND.PEOPLE_COUNT,
      SCD_PERCENT                    = :MEND.SCD_PERCENT
  WHERE ROWID = :MEND.row_id;
    IF (SQL%NOTFOUND) THEN
     RAISE NO_DATA_FOUND;
    END IF;
    forms_ddl('COMMIT'); 
      set_record_property(:system.trigger_record,:system.trigger_block, STATUS,QUERY_STATUS);
  else FND_MESSAGE.DEBUG('UPDATE插change的時候沒有mendid');
  END IF; 
else
      null;
end if;
END; 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM