OAF个性化Button获取页面参数
- 平台: R12
- 需求: 需要个性化一个button的Destination URI属性,并添附上一个参数。
实现方法:
-
本来重写CO便很容易实现该需求,但是涉及到修改代码以及各个环境更新就很麻烦了,所以如果个性化button的URL是最方便了。
-
个性化又涉及到如何在URL里传递参数的问题。
右键当前页面,查看源代码如下:
<form id="DefaultFormName" name="DefaultFormName" style="margin:0px" method="POST" action="/OA_HTML/OA.jsp?page=/oracle/apps/pa/deliverable/webui/CrUpDeliverablePG&paCallingPage=DLVLIST&paCallingMode=VIEW&paProjectId=106691&paDeliverableId=113287&paDlvrItemId=106962&&addBreadCrumb=RP&_ti=1696581738&PersonalizationParam=PersonalizationParamAdmin&retainAM=Y&oapc=28">
需要将当前页面中form标签的action属性中的paDlvrItemId参数的值获取过来。拼接成形如:http://dengdezhao.cn?erpid={:paDlvrItemId}形式的URL赋给button的destinationURI属性。
-
使用{@itemName}这种方式只能在table控件中才行,在此处不适用。因此考虑使用JS查找当前页面获取到参数然后拼接形成URL。
http://192.168.15.141/login/LoginSSO.jsp?flowCode=AM02&erpid='+unescape(document.DefaultFormName.action.match(new RegExp("(^|&)" + 'paDlvrItemId' + "=([^&]*)(&|$)", "i"))[2])+'&workcode=' + document.getElementById('AdditionalInfo').rows[4].cells[1].innerText + '
-
将以上URL个性化赋值给button即可满足需求。
"OAF中创建LOV"
环境:Oracle9i Jdeveloper+R11i
首先创建AM
创建一个LovAM,默认配置即可。
创建VO
创建LovVO,不需要基于EO,输入查询SQL如下:
{% codeblock lang:sql %}
select distinct INVENTORY_ITEM_ID,concatenated_segments
from MTL_SYSTEM_ITEMS_KFV where organization_id=85
将创建好的VO添加到AM的data module中
创建RN
右键工程,创建一个RN,Scope设置为public.
选中创建好的LovRN.xml,在structure Window窗口中选中LovRN右建New Region Using Wizard.找到之前创建的LovVO.
修改字段属性如下:
Search Allowed : true
Selective Search Criteria : true
创建PG页面引用LOV
创建一个PG页面LovPG.xml,AM Definition设置为之前创建的LovAM路径 …
Read More
"配置OAF开发环境"
查看EBS系统OA版本信息
方法一:使用OPERATIONS用户登陆EBS系统,选择“Diagnostics”后,在页下脚选择“About this Page”后选择“Technology Components”标签可查看相应版本信息。
方法二:访问URI:R12不可用
{% codeblock lang:java %}
http://:/OA_HTML/OAInfo.jsp
查看OAF版本下载相应JDEV开发工具
metalink document id: 787209.1 & 416708.1
例如:p4141787_11i_GENERIC.zip
解压缩后把“/jdevhome/jdev”路径加到系统变量中,变量名: JDEV_USER_HOME=F:\p4141787_11i_GENERIC\jdevhome\jdev
配置DBC文件
确认当前EBS系统使用的dbc文件.
连接EBS数据库,执行以下SQL查询:
{% codeblock …
Read More
"OAF上传大批量EXCEL文件"
客户有个需求:大量数据通过EXCEL导入系统表,并能提供效验及去重功能。
设计思路
- 采用POI解析EXCEL文件;
- bulk insert 插入数据到临时表
- 临时表结合正式表去除重复
POI解析EXCEL
在CO的processFormRequest
方法中添加如下:
{% codeblock lang:java %}
public void processFormRequest(OAPageContext pageContext, OAWebBean webBean)
{
super.processFormRequest(pageContext, webBean);
OAApplicationModule am = pageContext.getApplicationModule(webBean);
if (pageContext.getParameter("uploadBtn") != null)
{
DataObject fileUploadData = (DataObject)pageContext.getNamedDataObject("uploadFile");
String fileName = null;
try {
fileName = (String)fileUploadData …
Read More
"OAF单选删除行功能"
平台:Jdeveloper 9i
一般实现步骤:
- 在VO中添加新transient属性selector,updatable设置为always。
- 在PG中给table添加singleSelection方法,并绑定view Instance为VO的instance,View Attribute为刚刚新建的transient属性seletor。
- 这样当用户勾选checkbox时,会给transient属性变量赋值为Y,因此,在删除逻辑中循环判断VO中的transient属性,当其为Y时执行remove该行即可实现选择删除功能。
相关代码如下:
CO中processFormRequest里添加代码如下:
{% codeblock lang:java %}
//当单击deleteBtn按钮时执行AM中的deleteAutoSequenceVO方法
if (pageContext.getParameter("deleteBtn")!=null)
{
am.invokeMethod("deleteAutoSequenceVO");
{% endcodeblock %}
AM中代码如下:
{% codeblock lang:java %}
public void deleteAutoSequenceVO() {
OAViewObject vo = this.getChAutoSequenceVO1();
RowSetIterator iter = vo.createRowSetIterator("delete");
if (vo != null …
Read More
Use Javascript in OAF
使用Js脚本库
在CO的processRequest中引入JS库
编写JS库:Calendar2013.js
{% codeblock lang:java %}
pageContext.putJavaScriptLibrary("Calendar","Calendar2013.js");
((OAMessageTextInputBean)webBean
.findChildRecursive("inputDate"))
.setOnClick("setday(this)");
需要把Calendar2013.js放置在$COMMON_TOP/html下。
直接引用javaScript
编写JavaScript:
{% codeblock lang:java %}
String javaScript="JAVASCRIPT:function setday(){...}";
在CO的processRequest中加载javascript
{% codeblock lang:java %}
pageContext.putJavaScriptFunction("sayday()",javaScript …
Read More
OAF开发通过EXCEL导入数据时,用户需要将可能存在重复的主键信息提示出来
OAF开发通过EXCEL导入数据时,用户需要将可能存在重复的主键信息提示出来.
有以下两种主键冲突情况:
1, 表中不存在重复数据,即将导入的数据中存在重复数据。比如表中记录为空,导入的EXCEL中存在记录ID007,ID008,ID009,ID007,此时OAF页面需要将ID007提示出来;
2,表中存在重复数据。即表中原来已经存在一条记录ID007,此时导入的数据中也存在ID007,需要将ID007提示出来。
解决方案:
原本想通过查询数据库中ID007的记录是否存在再抛出OAException的做法来实现此需求,后来一想感觉好麻烦;便换种思路决定通过异常来判断。
情况1,在ViewObject对象CreateRow()之后,给创建的新Row.setAttribute("id",007)时,如果VO中存在两个007的新ROW,会抛出TooManyObjectsException,此时捕获该异常并返回此ID值。
情况2,难点也在这里,调用commit保存数据时,主键约束异常才会抛出来而且还不知道重复的ID值是多少。重写EO的doDML方法,在此方法中捕获DMLException异常,并且可以得到重复的ID值;
public void doDML(int i,TransactionEvent e)
{
try{
super.doDML(i …
Read More
OAF 使用OAException输出中文时出现乱码 解决
使用throw new OAException(“你们好”,OAException.WARNING);时出现乱码,尝试new String("你们好”.getBytes("GBK"),"UTF-8")依然没用。
检查JDEV的Preferences中ENCODING已经更改为“UTF-8”,纠结了好一阵子,才发现工程的Project Settings的Compiler里也有一个ENCODING没有改,囧改好之后再测试乱码问题即解决
Read More