EBS开发笔记-2

新增form步骤
 打开模板TEMPLATE,将其改成自己所要的名称,删除Data Blacks中的BLOCKNAME,DETAILBLOCK,删除Canvases中的BLOCKNAME,删除Windows中的BLOCKNAME,新增自己的Windows,Canvases,DateBlacks,在form级别的PRE-FORM中将Blockname改成自己新增的window,若区分ORG,则将FND_ORG.CHOOSE_ORG;加入BLOCK的上一行,在Program_unit中打开APP_CUSTOM,修改其中的为自己的window,在triggers的when_new_item_instance中加入app_window.set_title('',:parameter.org_code),将org加入form的title.
1.在Form的title上加上Org_code
在Form级的WHEN-NEW-FORM-INSTANCE这个trigger中加入app_window.set_title('QUERY_FIND',:parameter.org_code);即可。
2.查看弹性栏位数据来源的路径:system administrator--&gtapplication--&gtflexfield--&gtdescriptive--&gtsegment
3.初始化view
  begin
     dbms_application_info.set_client_info(188);
  end;
对需要user_id才能访问的view,需要先初始化一个合法的user_id进去
begin
fnd_global.apps_initialize(26872,56536,401);
end;
4.常用代码
  fnd_message.debug('show message'); --show出的提示窗口
  raise form_trigger_failure;  --配合show message使用,中断Form的执行
 在Form open/close的时候对界面的设定
 例:在close_window下写入,来控制多window的Form在关闭子窗口时切回到那个block上去
  if (wnd = 'QUERY_FIND') then         --当query_find这个window关闭的时候
    app_window.close_first_window;     --关闭第一个window,即为关闭这个window
  elsif (wnd = 'APPROVER_UPDATE') then  --当approve_update这个window关闭时
    go_block('QUERY_FIND');             --go_block到query_find这个block上去
  end if;
  
在open_window下写入以下代码,来控制新window打开的方式
  if (wnd = 'UPDATE_USER') then   --当window  UPDATE_USER被打开时
    APP_WINDOW.SET_WINDOW_POSITION('UPDATE_USER', 'CASCADE', 'APPROVER_UPDATE'); --设定UPDATE_USER这个window在APPROVER_UPDATE这个window的左上角稍偏下点,具体详见下面的介绍
    SET_WINDOW_PROPERTY('UPDATE_USER', VISIBLE, PROPERTY_TRUE);  
    GO_BLOCK('UPDATE_USER');   --指定要显示的block
  elsif (wnd = 'ACT') then 
    APP_WINDOW.SET_WINDOW_POSITION('ACT', 'CASCADE', 'APPROVER_UPDATE');
    SET_WINDOW_PROPERTY('ACT', VISIBLE, PROPERTY_TRUE);  
    GO_BLOCK('ACT');
  end if;

app_window.set_window_position详解
procedure APP_WINDOW.SET_WINDOW_POSITION(
      child_window varchar2,
     style varchar2,
     parent_window varchar2 default NULL);
说明:说明子窗口的显示位置
参数:child_window  指定位置的子窗体名称
     style         子窗口的定位类型
     parent_window 子窗口的上阶窗口名称
style:CASCADE      多个窗口从左上向右下排列
      RIGHT,BELOW  子窗口在父窗口的右边或者下方,且父窗口不会覆盖子窗口
      OVERLAP      子窗口和父窗口重叠,对齐父窗口左边,但向下位移0.3
      CENTER       子窗口在父窗口的中间显示
      FIRST_WINDOW 显示在toolbar的下方,通常是主窗口

处理查询时候,如果查询界面栏位不下条件,就表示这个栏位为空值
方法:在显示记录的block下的KEY-EXEQRY这个trigger下做判断,然后将最终的where条件赋值给这个block的default_where里面去。代码如下
declare
v_default_where varchar2(400);  --定义变量用来存放这个block的初始where条件
V_WHERE VARCHAR2(2000);         --定义变量用来存放新的where条件
begin
v_default_where:=get_block_property(:SYSTEM.CURSOR_BLOCK,DEFAULT_WHERE);--获取此block初始的where条件
V_WHERE:=v_default_where;   --将初始的where条件赋值给V_WHERE这个变量中
if v_default_where is null then   --当初始条件为空时,并条件的时候不需要加'where','and'之类
  if :QUERY_FIND.EMP_CLASS_CODE is null then     --如果查询界面的那个栏位为空
    V_WHERE:=V_WHERE || ' EMP_CLASS_CODE is null';  --将查询条件并上此栏位is null
  else
    V_WHERE:=V_WHERE || ' EMP_CLASS_CODE='||:QUERY_FIND.EMP_CLASS_CODE;--查询界面的栏位有值就用栏位等于的sql查询语句
  end if;
else       --当初始条件不为空,并查询条件时需要加'and'
 if :QUERY_FIND.EMP_CLASS_CODE is null then
    V_WHERE:=V_WHERE || ' and EMP_CLASS_CODE is null';
  else
    V_WHERE:=V_WHERE || ' and EMP_CLASS_CODE='||:QUERY_FIND.EMP_CLASS_CODE;
  end if;
end if;
set_block_property(:SYSTEM.CURSOR_BLOCK,DEFAULT_WHERE,V_WHERE); --将新的查询条件赋值给这个block的default_where进行查询 
clear_record; /*清空,否则Form下次查询的时候会把前一次的条件带入*/
EXECUTE_QUERY;  --执行查询命令
set_block_property(:SYSTEM.CURSOR_BLOCK,DEFAULT_WHERE,v_default_where);  --将原默认的default_where值重新恢复回去
end;

取消lov的验证
set_record_property(:system.trigger_record,:system.trigger_block, STATUS,QUERY_STATUS);
常用于界面上的栏位值来源于select ....into...而此栏位又有绑定lov的情况下,防止以查询方式进入界面,没做任何操作就需要保存;或者界面上栏位在Table中只记录id,用name查找时,直接用select name into 栏位。

设置栏位属性值
app_item_property.set_property('ACT.NEW_ACT',Required,PROPERTY_TRUE);
 ACT.NEW_ACT   block的栏位
 Required      属性名称
 PROPERTY_TRUE 属性值

调用block的trigger
 APP_RECORD.FOR_ALL_RECORDS('ACT_LIST','SELECT_COUNT');
   ACT_LIST       block名称
   SELECT_COUNT   trigger名称
5.当一个window上有多个canvas的时候,往往会造成某个canvas不显示,解决此方法可用
 show_view('canvas')命令,其中canvas为需要显示的canvas名称。
 注意:当使用show_view来显示canvas时,焦点会回到之前的canvas上,这样在show  canvas_stacked的时候就不会有问题,但在show新打开的window的时候就会造成要显示的window闪一下就跑到之前的window的后面去,解决此问题可以调用 
app_custom.open_window('ACT_LIST'); 来show你要的window,其中ACT_LIST为block名称。
6.弹出yes or no的询问对话框
FND_MESSAGE.SET_STRING('此核流程中已有核人T,是否⑵h除再}u?');
v_ques_no := FND_MESSAGE.QUESTION('YES','NO',NULL);
if v_ques_no=1 then
  del_lines(p_head_id);
  add_lines(p_head_id,p_organization_id); 
else
  null;
end if;
7.单击按钮使得下一个要弹出的界面值清空
 go_block('');
 clear_block(no_validate);
8.FND_STANDARD.SET_WHO;  插入建立者,建立日期,最后更新者,最后更新日前,最后登陆人等信息
9.清空block中资料
  app_find.clear;清除当前block的值,不可用go_block('');的方式清除其他的block
  app_find.clear_detail('');清除指定block的值

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14766526/viewspace-1154296/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14766526/viewspace-1154296/

出现这个错误的原因是在导入seaborn包时,无法从typing模块中导入名为'Protocol'的对象。 解决这个问题的方法有以下几种: 1. 检查你的Python版本是否符合seaborn包的要求,如果不符合,尝试更新Python版本。 2. 检查你的环境中是否安装了typing_extensions包,如果没有安装,可以使用以下命令安装:pip install typing_extensions。 3. 如果你使用的是Python 3.8版本以下的版本,你可以尝试使用typing_extensions包来代替typing模块来解决该问题。 4. 检查你的代码是否正确导入了seaborn包,并且没有其他导入错误。 5. 如果以上方法都无法解决问题,可以尝试在你的代码中使用其他的可替代包或者更新seaborn包的版本来解决该问题。 总结: 出现ImportError: cannot import name 'Protocol' from 'typing'错误的原因可能是由于Python版本不兼容、缺少typing_extensions包或者导入错误等原因造成的。可以根据具体情况尝试上述方法来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing....](https://blog.youkuaiyun.com/yuhaix/article/details/124528628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值