EBS開發筆記-1

freshairpeng發表於2014-05-04
1:判斷資料塊的項是否為空
IF :BlockName.Item1 is null
THEN message(?Item1為空‘);
END IF; 這個和一般的程式語言使用字串比較很不一致,但從PL/SQL的語句來看,卻也是正常的。

2:資訊提示框之基本用法
 1、message Usage:message('提示資訊'); Effect:在FORMS左下角會出現這個提示資訊。
2、fnd_message用法大全
    2.1 FND_Message.Debug Usage::fnd_message.debug('提示資訊');
          Effect:會直接彈出一個對話方塊,與vb中的msgbox("提示資訊")類似。
    2.2、fnd_message.question . Usage:
       declare v_num number;
        begin FND_MESSAGE.SET_STRING('確要執行此操作嗎?');                
          v_num := FND_MESSAGE.QUESTION('否', '是',NULL, 1,2);
           if v_num=2 then fnd_message.debug('選擇了是');
           elsif v_num=1 then fnd_message.debug('選擇了否');
           end if;
          end;
          Effect: Effect:會直接彈出一個選擇框,與vb中的msgbox("提示資訊",vbokcancel)類似。
    2.3、FND_MESSAGE.show 這是一個Procedure,把資訊以最基本的方式顯示給使用者,和FND_MESSAGE.DEBUG一樣的效果。但分成了兩步來寫。
           begin fnd_message.set_string('show a string!);
           fnd_message.show;
           end;
     2.4、FND_MESSAGE.hint 這是一個Procedure這種方式不會彈出對話方塊給使用者,而是顯示在左下腳的狀態列上面。
     2.5、FND_MESSAGE.error 這是一個Procedure以Error資訊的方式顯示給使用者
  3: 用程式碼控制ITEM屬性
    1、用程式碼控制ITEM的可用性。
   1.1、SET_ITEM_PROPERTY和SET_ITEM_INSTANCE_PROPERTY:  
     如果是控制單行記錄或者多行記錄中的全部記錄:SET_ITEM_PROPERTY
     如果是控制多行記錄中的單一行記錄:SET_ITEM_INSTANCE_PROPERTY
   1.2、理解它們的最好區別就是親自動手寫一例子。
    例: ①控制資料塊T_TEST(多條記錄)的ITEM的某一條記錄是否可更改。
       SET_ITEM_INSTANCE_PROPERTY(?T_TEST.TID‘, CURRENT_RECORD,UPDATE_ALLOWED,PROPERTY_FALSE);
      SET_ITEM_INSTANCE_PROPERTY('T_TEST.TID', CURRENT_RECORD,INSERT_ALLOWED,PROPERTY_FALSE);
     Effect:
   ③ 控制資料塊T_TEST(多條記錄)的單個ITEM的全部記錄是否可更改。
      SET_ITEM_PROPERTY('T_TEST.TID',ENABLED,PROPERTY_FALSE);--ITEM不可獲得焦點
      或:
      SET_ITEM_PROPERTY('T_TEST.TID‘,INSERT_ALLOWED,PROPERTY_FALSE);
     -- ITEM可以獲得焦點 SET_ITEM_PROPERTY('T_TEST.TID',UPDATE_ALLOWED,PROPERTY_FALSE);
    /* 如果此時使用SET_ITEM_INSTANCE_PROPERTY進行更改可用狀態,必須先使用SET_ITEM_PROPERTY改回可寫屬性,之後方可使用SET_ITEM_INSTANCE_PROPERTY。
    ③控制資料塊某個ITEM只允許insert,不允許delete.
     在when-new-form-instance中加入
    --先將資料塊設為不可刪除 set_block_property('T_TEST ',delete_allowed,property_false);
    --然後對ITEM設為不可update set_item_property(' T_TEST .TID',update_allowed,property_false);
    2、用程式碼控制ITEM的可見性 SET_ITEM_PROPERTY('CONTROL.ITEM1', ENABLED, PROPERTY_FALSE);
 4:實現將LOV可以自行錄入內容
     在WHEN-NEW-ITEM-INSTANCE觸發器加入
    begin
      set_item_property('block.item1', VALIDATE_FROM_LIST, property_false);
     end;
  5: 在FORMS呼叫WEB頁面
     web.show_document('http://www.sina.com.cn','_blank'); 第二引數為頁面的載入方式,有四種選擇。
     _SELF
     _PARENT
    _TOP
    _BLANK
    Effect:自己可以去show一下,印象會比較深。
  6:Forms資料提交的方式
     1、commit_form 先針對form上面的資料變動進行commit,然後對於程式碼中的類似DML語句也進行提交; 如果form上面的資料變動和程式碼中的資料變動有衝突,最後以FORM上的為        準。 適用:一般來在直接修改Form上的資料時,就使用commit_form。
    2、commit 對form和資料庫進行提交。如果form上面的資料和程式碼中的資料變動有衝突,最後以FORM上的為準。 適用:一般來在直接使用DML程式碼修改資料時,就使用commit。
    3、do_key('commit_form') 會首先尋找form下的triggers中的KEY-COMMIT這個trigger,並執行KEY-COMMIT中所寫的程式碼。 如果沒有KEY-COMMIT這個trigger,則會針對form和程式碼
     一起提交。 如果form上面的資料變動和程式碼中的資料變動有衝突,最後以介面上的為準。 適用:只是更改了一下程式碼執行的任先順序,沒有什麼實質區別。
    4、forms_ddl('commit') 只針對程式碼中的update,insert,delete語句進行提交。如果form上面的資料有變動,是不會提交的。 適用:一般不用。

  7: 初始化操作
   fnd_global.apps_initialize(fnd_profile.value('USER_ID'),fnd_profile('RESP_ID'),fnd_profile('RESP_APPL_ID'));
   因為有的試圖資料是會通過user_id,resp_id,resp_appl_id來過濾的,所以在when-new-form-instance的時候,需要通過apps_initialize來進行初始化。  

   8: 設定窗體的位置 
    app_window.set_window_position('OPEN_CANVAS','CENTER','OPEN_WINDOW‘);
 
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14766526/viewspace-1153566/,如需轉載,請註明出處,否則將追究法律責任。

相關文章