OAF个性化Button获取页面参数

2014-06-03(Tuesday) 00:00
  • 平台: R12
  • 需求: 需要个性化一个button的Destination URI属性,并添附上一个参数。

实现方法:

  1. 本来重写CO便很容易实现该需求,但是涉及到修改代码以及各个环境更新就很麻烦了,所以如果个性化button的URL是最方便了。

  2. 个性化又涉及到如何在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属性。

  1. 使用{@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 + '
    
  2. 将以上URL个性化赋值给button即可满足需求。

Category: ebs Tagged: oaf


"OAF中创建LOV"

2013-04-18(Thursday) 00:00

环境: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路径 …

Category: ebs Tagged: oaf

Read More

"配置OAF开发环境"

2013-04-17(Wednesday) 00:00

查看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 …

Category: ebs Tagged: oaf

Read More

"OAF上传大批量EXCEL文件"

2013-04-09(Tuesday) 00:00

客户有个需求:大量数据通过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 …

Category: ebs Tagged: oaf

Read More

"OAF单选删除行功能"

2013-03-20(Wednesday) 00:00

平台:Jdeveloper 9i


一般实现步骤:

  1. 在VO中添加新transient属性selector,updatable设置为always。
  2. 在PG中给table添加singleSelection方法,并绑定view Instance为VO的instance,View Attribute为刚刚新建的transient属性seletor。
  3. 这样当用户勾选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 …

Category: ebs Tagged: oaf

Read More

Use Javascript in OAF

2013-01-30(Wednesday) 00:00

使用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(){...}";

COprocessRequest中加载javascript

{% codeblock lang:java %} pageContext.putJavaScriptFunction("sayday()",javaScript …

Category: ebs Tagged: javascript oaf

Read More

OAF开发通过EXCEL导入数据时,用户需要将可能存在重复的主键信息提示出来

2013-01-10(Thursday) 00:00

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 …

Category: ebs Tagged: oaf

Read More

OAF 使用OAException输出中文时出现乱码 解决

2013-01-09(Wednesday) 00:00

使用throw new OAException(“你们好”,OAException.WARNING);时出现乱码,尝试new String("你们好”.getBytes("GBK"),"UTF-8")依然没用。

检查JDEV的Preferences中ENCODING已经更改为“UTF-8”,纠结了好一阵子,才发现工程的Project Settings的Compiler里也有一个ENCODING没有改,囧改好之后再测试乱码问题即解决

Category: ebs Tagged: oaf

Read More
Page 1 of 1