一.先来个比较简单的,标准FORM调用客户话FORM并执行查询

1.修改CUSTOM.PLL,使用 fnd_function.execute实现打开和传递参数

参考例子如下

  1. PROCEDURE event(event_name VARCHAR2) IS
  2. --
  3. -- This procedure allows you to execute your code at specific events
  4. -- including:
  5. --
  6. -- ZOOM
  7. -- WHEN-NEW-FORM-INSTANCE
  8. -- WHEN-NEW-BLOCK-INSTANCE
  9. -- WHEN-NEW-RECORD-INSTANCE
  10. -- WHEN-NEW-ITEM-INSTANCE
  11. -- WHEN-VALIDATE-RECORD
  12. --
  13. -- Additionally, product-specific events will be passed via this
  14. -- interface (see the Applications Technical Reference manuals for
  15. -- a list of events that are available).
  16. --
  17. -- By default this routine must perform 'null;'.
  18. --
  19. -- Oracle Corporation reserves the right to change the events
  20. -- available through this interface at any time.
  21. --
  22. /* Sample code:
  23.  
  24. form_name varchar2(30) := name_in('system.current_form');
  25. block_name varchar2(30) := name_in('system.cursor_block');
  26. param_to_pass1 varchar2(255);
  27. param_to_pass2 varchar2(255);
  28. begin
  29. -- Zoom event opens a new session of a form and
  30. -- passes parameter values to the new session. The parameters
  31. -- already exist in the form being opened.
  32. if (event_name = 'ZOOM') then
  33. if (form_name = 'DEMXXEOR' and block_name = 'ORDERS') then
  34. param_to_pass1 := name_in('ORDERS.order_id');
  35. param_to_pass2 := name_in('ORDERS.customer_name');
  36. fnd_function.execute(FUNCTION_NAME=>'DEM_DEMXXEOR',
  37. OPEN_FLAG=>'Y',
  38. SESSION_FLAG=>'Y',
  39. OTHER_PARAMS=>'ORDER_ID="'||param_to_pass1||
  40. '" CUSTOMER_NAME="'||param_to_pass2||'"');
  41. -- all the extra single and double quotes account for
  42. -- any spaces that might be in the passed values
  43. end if;
  44.  
  45. -- This is an example of a product-specific event. Note that as
  46. -- of Prod 15, this event doesn't exist.
  47. elsif (event_name = 'OE_LINES_PRICING') then
  48. get_custom_pricing('ORDERS.item_id', 'ORDERS.price');
  49.  
  50. -- This is an example of enforcing a company-specific business
  51. -- rule, in this case, that all vendor names must be uppercase.
  52. elsif (event_name = 'WHEN-VALIDATE-RECORD') then
  53. if (form_name = 'APXVENDR') then
  54. if (block_name = 'VENDOR') then
  55. copy(upper(name_in('VENDOR.NAME')), 'VENDOR.NAME');
  56. end if;
  57. end if;
  58. else
  59. null;
  60. end if;
  61. end event;
  62. */
  63. --
  64. -- Real code starts here
  65. --
  66. form_name VARCHAR2(30) := name_in('system.current_form');
  67. block_name varchar2(30) := name_in('system.cursor_block');
  68. special_menu_name13 VARCHAR2(2000);
  69. special_menu_name14 VARCHAR2(2000);
  70. special_menu_name15 VARCHAR2(2000);
  71. param_to_pass1 NUMBER := NULL;
  72. param_to_pass2 NUMBER := NULL;
  73. param_to_pass3 varchar2(200) := NULL;
  74. param_to_pass4 number := NULL;--invoiec_id
  75. param_to_pass5 number := NULL;--ccid
  76. param_to_pass6 date := NULL;--gl_date
  77. param_to_pass7 number := NULL;--set_of_books_id
  78. V_PROPERTY VARCHAR2(30);
  79. V_COUNT NUMBER;
  80. V_INVOICE_ID NUMBER;
  81. V_TERM_ID NUMBER;
  82. v_date date;
  83. CURSOR rec_invoice_line(p_invoice_id IN NUMBER) IS
  84. SELECT l.invoice_id,
  85. l.org_id,
  86. l.inventory_item_id,
  87. l.item_description,
  88. l.po_header_id,
  89. l.po_line_id,
  90. l.po_release_id,
  91. l.po_line_location_id,
  92. l.po_distribution_id
  93. FROM ap_invoice_lines_all l
  94. WHERE l.invoice_id = p_invoice_id
  95. AND l.po_line_id IS NOT NULL
  96. AND l.amount <> 0;
  97.  
  98. CURSOR rec_invoice_lok(p_invoice_id IN NUMBER) IS
  99. SELECT l.terms_id
  100. FROM ap_invoices_all l
  101. WHERE l.invoice_id = p_invoice_id
  102. FOR UPDATE NOWAIT;
  103.  
  104. BEGIN
  105. special_menu_name13 := '返利';
  106. special_menu_name14 := '订单';
  107. special_menu_name15 := '更新';
  108. --FND_MESSAGE.DEBUG('CUSTOM.PLL');
  109. IF form_name = 'APXINWKB' AND event_name = 'WHEN-NEW-FORM-INSTANCE' THEN
  110. --SET_MENU_ITEM_PROPERTY('SPECIAL.MENU15',LABEL,'自动创建');
  111. --FND_MESSAGE.DEBUG('WHEN-NEW-FORM-INSTANCE');
  112. set_menu_item_property('FILE.SAVE', enabled, PROPERTY_ON);-- able save menu
  113. app_special2.instantiate('SPECIAL13', special_menu_name13, NULL, TRUE); --添加菜单API
  114. app_special2.instantiate('SPECIAL14', special_menu_name14, NULL, TRUE); --添加菜单API
  115. app_special2.instantiate('SPECIAL15', special_menu_name15, NULL, TRUE); --添加菜单API
  116.  
  117. RETURN;
  118. END IF;
  119.  
  120. IF form_name = 'APXINWKB' AND event_name = 'WHEN-NEW-ITEM-INSTANCE' /*AND
  121. block_name = 'INV_SUM_FOLDER'*/ THEN
  122. IF name_in('INV_SUM_FOLDER.QUICK_PO_NUMBER') IS NULL THEN
  123. set_item_property('INV_SUM_CONTROL.MATCH', enabled, property_false);
  124. ELSE
  125. set_item_property('INV_SUM_CONTROL.MATCH', enabled, property_true);
  126. END IF;
  127. --FND_MESSAGE.DEBUG('WHEN-NEW-ITEM-INSTANCE');
  128. V_INVOICE_ID := NAME_IN('INV_SUM_FOLDER.INVOICE_ID');
  129. SELECT COUNT(*)
  130. INTO V_COUNT
  131. FROM AP_INVOICE_LINES_ALL L
  132. WHERE l.invoice_id = V_INVOICE_ID
  133. AND L.PO_LINE_ID IS NOT NULL
  134. AND L.amount <> 0;
  135. --FND_MESSAGE.DEBUG(V_INVOICE_ID||'---'||V_COUNT);
  136. IF V_COUNT = 0 THEN
  137. app_special.enable('SPECIAL15', property_OFF);
  138. ELSE
  139. app_special.enable('SPECIAL15', property_on);
  140. END IF;
  141. RETURN;
  142.  
  143. END IF;
  144.  
  145. IF form_name = 'APXINWKB' AND event_name = 'WHEN-NEW-BLOCK-INSTANCE' THEN
  146.  
  147. --SET_MENU_ITEM_PROPERTY('SPECIAL.MENU15',LABEL,'自动创建');
  148. app_special.enable('SPECIAL13', property_on);
  149. app_special.enable('SPECIAL14', property_on);
  150. app_special.enable('SPECIAL15', property_on);
  151.  
  152. RETURN;
  153. END IF;
  154.  
  155. IF ((form_name = 'APXINWKB') /*and (Block_Name = 'LINES')*/
  156. AND (event_name = 'SPECIAL13')) THEN
  157. param_to_pass1 := name_in('INV_SUM_FOLDER.ORG_ID');
  158. param_to_pass2 := name_in('INV_SUM_FOLDER.VENDOR_ID');
  159. param_to_pass4 := name_in('INV_SUM_FOLDER.INVOICE_ID');
  160. param_to_pass5 := name_in('INV_SUM_FOLDER.ACCTS_PAY_CODE_COMBINATION_ID');
  161. param_to_pass6 := name_in('INV_SUM_FOLDER.GL_DATE');
  162. param_to_pass7 := name_in('INV_SUM_FOLDER.SET_OF_BOOKS_ID');
  163. --FND_MESSAGE.DEBUG('CUSTOM.PLL');
  164. --FND_MESSAGE.DEBUG('param_to_pass4 '||param_to_pass4);
  165. --FND_MESSAGE.DEBUG('param_to_pass5 '||param_to_pass5);
  166. --FND_MESSAGE.DEBUG('param_to_pass6 '||param_to_pass6);
  167. --FND_MESSAGE.DEBUG('param_to_pass7 '||param_to_pass7);
  168. V_PROPERTY := Get_Menu_Item_Property('FILE.SAVE',enabled);
  169. --FND_MESSAGE.DEBUG('V_PROPERTY '||V_PROPERTY);
  170. --set_menu_item_property('FILE.SAVE', enabled, PROPERTY_OFF);-- disable save menu
  171.  
  172. fnd_function.execute(function_name => 'CUXAPREBATE',
  173. open_flag => 'Y',
  174. session_flag => 'Y',
  175. other_params => 'G_ORG_ID="' || param_to_pass1 ||
  176. '" G_VENDOR_ID="' ||
  177. param_to_pass2 || /*'"'||*/
  178. '" G_INVOICE_ID="' ||
  179. param_to_pass4 ||
  180. '" G_CCID="' ||
  181. param_to_pass5 ||
  182. '" G_GL_DATE="' ||
  183. param_to_pass6 ||
  184. '" G_SET_OF_BOOKS_ID="' ||
  185. param_to_pass7 || '"');
  186.  
  187. ELSIF ((form_name = 'APXINWKB') /*and (Block_Name = 'LINES')*/
  188. AND (event_name = 'SPECIAL14')) THEN
  189. param_to_pass3 := name_in('INV_SUM_FOLDER.QUICK_PO_NUMBER');
  190. fnd_function.execute(function_name => 'CUXAPPOINFOR',
  191. open_flag => 'Y',
  192. session_flag => 'Y',
  193. other_params => 'G_PO_NUMBER="' || param_to_pass3 ||
  194. '"' );
  195.  
  196. ELSIF ((form_name = 'APXINWKB') /*and (Block_Name = 'LINES')*/
  197. AND (event_name = 'SPECIAL15')) THEN
  198. fnd_message.debug('XXXXXXXX:'||NAME_IN('INV_SUM_FOLDER.VENDOR_ID'));
  199. V_INVOICE_ID := NAME_IN('INV_SUM_FOLDER.INVOICE_ID');
  200. FOR REC_INVOICE IN rec_invoice_line(p_invoice_id => V_INVOICE_ID) LOOP
  201.  
  202. open rec_invoice_lok(p_invoice_id => REC_INVOICE.INVOICE_ID);
  203.  
  204. SELECT H.TERM_ID
  205. INTO V_TERM_ID
  206. FROM CUX_OMS_PO_HEADERS H,PO_HEADERS_ALL PH
  207. WHERE H.PO_NUMBER = PH.SEGMENT1
  208. AND H.PROCESS_STATUS = 'COMPLETE'
  209. AND PH.PO_HEADER_ID = REC_INVOICE.PO_HEADER_ID;
  210.  
  211. SELECT rt.transaction_date
  212. into v_date
  213. FROM rcv_transactions rt
  214. WHERE rt.po_header_id = REC_INVOICE.PO_HEADER_ID;
  215.  
  216. UPDATE AP_INVOICES_ALL
  217. SET TERMS_ID = V_TERM_ID,
  218. TERMS_DATE = v_date
  219. WHERE INVOICE_ID = REC_INVOICE.INVOICE_ID;
  220.  
  221. close rec_invoice_lok;
  222. END LOOP;
  223. ELSE
  224. RETURN;
  225. END IF;
  226.  
  227. END event;

2.在客户化FORM里创建参数,接收传过来的,如上面程序中的G_ORG_ID,G_VENDOR_ID等等

3.在客户化FORM里根据传过来的参数执行查询即可实现

二.客户化FORM调用标准FORM并执行查询

1.利用个性化来实现具体如下

客户化Form A 调用标准 Form B;在Form A上定义一个全局参数,B 获取这个参数,作为查询条件,B上设置个性化

Form B获取Form A过来的参数,把参数的值赋给Form B的ITEM

2.利用CUSTOM.PLL实现

例子如下

打开PO

  1. PROCEDURE BTN_OPEN_PO IS
  2. BEGIN
  3.  
  4. fnd_function.Execute(Function_Name => 'PO_POXPOEPO',
  5. Open_Flag => 'Y',
  6. Session_Flag => 'Y',
  7. Other_Params => 'PO_HEADER_ID=' || :Po.Po_Header_Id || ' '
  8. ||' ACCESS_LEVEL_CODE="MODIFY"'
  9. ||' POXPOEPO_CALLING_FORM="POXSTNOT"',
  10. Activate_Flag => 'ACTIVATE');
  11.  
  12. END ;

打开SO

  1. PROCEDURE BTN_OPEN_SO IS
  2. BEGIN
  3.  
  4. fnd_function.Execute(Function_Name => 'ONT_OEXOEORD',
  5. Open_Flag => 'Y',
  6. Session_Flag => 'Y',
  7. Other_Params => 'DESKTOP_HEADER_ID="' || :So.So_Header_Id || '"',
  8. Activate_Flag => 'ACTIVATE');
  9.  
  10. END ;

FORM调用FORM(标准调客户化&客户化调标准)并执行查询的实现研究的更多相关文章

  1. C#在类中用调用Form的方法

    class 你的类 { private Form1 frm; //构造函数 public 你的类( Form1 form) { frm = form; } //调用form方法 private voi ...

  2. winform实现自动更新并动态调用form实现

    winform实现自动更新并动态调用form实现 标签: winform作业dllbytenull服务器 2008-08-04 17:36 1102人阅读 评论(0) 收藏 举报  分类: c#200 ...

  3. C# 跨线程调用form控件技巧及byte[]与string型相互转换

    跨线程调用form控件技巧 private delegate void MethodSocket(object obj);//使用托管 ss = "OK"; this.BeginI ...

  4. iOS-Core-Animation-Advanced-Techniques/12-性能调优/性能调优.md

    性能调优 代码应该运行的尽量快,而不是更快 - 理查德 在第一和第二部分,我们了解了Core Animation提供的关于绘制和动画的一些特性.Core Animation功能和性能都非常强大,但如果 ...

  5. 原生Form 和 Form组件 Modelform

    主要的文件:manage.py,url.py,views.py,settings.py,models.py manage.py:项目管理文件,一般不做修改. url.py:路由系统,配置views.p ...

  6. SpringMVC form:form的一个错误(没有传到前台绑定类)

    SpringMVC form:form的一个错误(没有传到前台绑定类) 报错信息: Neither BindingResult nor plain target object for bean nam ...

  7. SpringMVC的form:form表单的使用

    为什么要使用SpringMVC的form:form表单,有两个原因:一是可以更加快捷的完成表单的开发,比如会替你做好数据类型装换等本来需要你自己动手的工作.其次就是能够更加方便的实现表单回显. 首先要 ...

  8. 【原】Oracle EBS 11无法打开Form及Form显示乱码的解决

    问题:Oracle EBS 11无法打开Form及Form显示乱码 解决: 1.尝试使用jre1.5或1.6安装目录下jre/bin/server目录里的jvm.dll替换JInitiator安装目录 ...

  9. form:select form:options 标签数据回显

    在jsp页面中经常会使用到 form:select form:options 遍历后台List集合生成 select 下拉选择器,但是 form:options 标签并没有提供一个可以回显数据的属性. ...

随机推荐

  1. [LeetCode] Set Mismatch 设置不匹配

    The set S originally contains numbers from 1 to n. But unfortunately, due to the data error, one of ...

  2. IIS&ASP.NET 站点IP跳转到域名

    前言:先到微软的 https://www.iis.net/downloads/microsoft/url-rewrite  下载URL Rewrite 目标:输入ip跳转到域名所在的网站 比如58的1 ...

  3. Redis安装与卸载

    Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.它支持丰富的数据类型,和高速的内存读写.正在逐步取代memca ...

  4. [USACO17JAN]Promotion Counting晋升者计数

    题目描述 奶牛们又一次试图创建一家创业公司,还是没有从过去的经验中吸取教训--牛是可怕的管理者! 为了方便,把奶牛从 1 \cdots N(1 \leq N \leq 100, 000)1⋯N(1≤N ...

  5. [NOI2005]寿司晚宴

    题目描述 为了庆祝NOI的成功开幕,主办方为大家准备了一场寿司晚宴.小G和小W作为参加NOI的选手,也被邀请参加了寿司晚宴. 在晚宴上,主办方为大家提供了n−1种不同的寿司,编号1,2,3,⋯,n-1 ...

  6. 【NOIP2004】虫食算

    Description 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +. 8468#6633 444455 ...

  7. MySQL 内连接与外连接

    1.内连接 MySQL中,join,cross join,inner join 是等价的. 2.外连接 2.1 左外连接 left join 2.2 右外连接  right join 3.连接条件 使 ...

  8. 选取id不为sth的div元素

    选取id不为sth的div元素$("div:not(#sth)")

  9. Oracle VM VirtualBox虚拟机内Linux系统硬盘扩容步骤(CentOS6.5)

    1.首先获取要扩容的虚拟机的 UUID VBoxManage 改命令在C:\Program Files\Oracle\VirtualBox目录内,可先添加该目录到环境变量.C:\Users\yzkj- ...

  10. c# &sqlserver

    sqlserver CHARINDEX函數返回字符或者字符串在另一個字符串中的起始位置 eg: select bh,left(djxl,CHARINDEX('A',djxl)) as ,sum(rs) ...