"Groovy在ADF中的应用"

2013-06-02(Sunday) 00:00

使用Groovy脚本,在开发ADF应用中可以极大地提高开发效率,实现某些看似很复杂的功能。

比如在empVO中获取sequence值:
{% codeblock lang:java %} db = adf.object.getDBTransaction()
sq = new oracle.jbo.server.SequenceImpl("EMPLOYEES_SEQ",db)
sq.getSequenceNumber()

在empVO中获取Salary字段最大值max:
{% codeblock lang:java %} adf.object.getRowSet().max("Salary")

在empVO中获取Salary字段最小值min:
{% codeblock lang:java %} adf.object.getRowSet().min("Salary")

在empVO中获取Salary字段合计sum:
{% codeblock lang:java %} adf.object.getRowSet().sum("Salary")

在empVO中获取Salary字段均值avg:
{% codeblock …

Category: ADF Tagged: groovy

Read More

"利用contextual event刷新Region"

2013-06-01(Saturday) 00:00

平台: Jdev 11.1.1.7.0
需求:两个region,其中一个region对数据进行修改后,需要刷新另外一个region显示



创建bound taskflow: btf_form

../../../wp-content/uploads/QQ截图20130601204146.jpg

taskflow只包括一个页面碎片empForm.jsff,拖入employeeVO生成af:Form。
../../../wp-content/uploads/QQ截图20130601210114.jpg

创建bound taskflow: btf_table

同上,只有一个页面碎片empTable.jsff,拖入employeeVO生成af:table。
../../../wp-content/uploads/QQ截图20130601210258.jpg

以上两个taskflow皆使用No Controller Transaction.

添加contextual event

需要在empTable.jsff页面中修改数据,单击commit按钮时,让empForm.jsff页面中的数据即时更新。因此,给commitbutton添加contextual event: saveEvent。
../../../wp-content/uploads/QQ截图20130601210725.jpg

创建mainPG页面引入以上taskflow生成region

创建一个两栏jspx页面mainPG.jspx, 分别拖入以上两taskflow生成region。
给contextual event 绑定consumer。

切换到mainPG.jspx页面的pagedef页面,从structure窗口中执行以下操作 …

Category: ADF Tagged: region

Read More

"在ManagedBean中调用AppModuleImpl中自定义方法的两种方式"

2013-06-01(Saturday) 00:00

平台: Jdev11.1.1.7.0


  1. *AM*中创建自定义方法sayHello
    {% codeblock lang:java %} public void sayHello(String value){ System.out.println("hello world..."+value); }
  2. 暴露该方法以便在ManagedBean中调用

  3. 从Data Controls中将该方法拖到页面生成Bindings或者手工添加该Bindings。

  4. 为了测试方便,创建了一个inputText,并绑定该inputText的valueChangeListener为ManagedBean中的valueChange方法.
    {% codeblock lang:java %} public void valueChange(ValueChangeEvent valueChangeEvent) { String newValue = valueChangeEvent.getNewValue().toString(); //方法一:调用bindings BindingContainer bindings = ADFUtils.getBindingContainer();
    OperationBinding refreshChecklist = bindings …

Category: ADF Tagged: AppModuleImpl

Read More

"关于ApplicatoinModule类型总结"

2013-05-28(Tuesday) 00:00

平台:Jdev11.1.2.3.0

AM的类型

1. Root AM
2. Nested AM
3. Shared AM

三种类型AM的比较

首先谈谈RootAM的数量,RootAM原则上来说越少越好,因为当用户访问工程的时候数据库连接数量会根据RootAM的数量成倍增加极大地增加了数据库的压力。但是很多时候由于业务的复杂性,单一的AM无法满足实际开发的需求,所有的业务逻辑都写在一个AM里极不利于多个团队的协同开发。
这个时候NestedAM就发挥其作用了,NestedAM是共享其父类RootAM的数据库连接的,所以不会额外增加连接数量,利用NestedAM可以将业务逻辑拆分开来,每个团队都可以使用自己单独的NestedAM,团队之间彼此冲突地可能性大大减少。 再说SharedAM,大型项目中很多模块的功能是通用的,比如LOV或者一些在使用中基本不需要改变的固定配置数据等,这类数据对项目所有访问用户都是固定的,可以使用SharedAM来维护这类型数据。

三种类型的AM的创建方法

  1. RootAM,默认创建的AM即是RootAM
  2. NestedAM创建方法
    先创建两个RootAM(deptAm,empAm),分别拥有VO instance(DeptVO,EmpVO);
    再创建一个RootAM(rootAM),双击该rootAM,在Data Model标签页中 …

Category: ADF Tagged: am

Read More

"ADF类似心跳程序实现"

2013-04-24(Wednesday) 00:00

使用ADF框架开发WEB应用时,其中令人苦恼的一个需求就是:在两个页面同时展示一个数据源时,如果其中一个页面对数据源作了变更操作,另外一个页面没办法自动获得变更后的数据,需要手工刷新页面才能得到变更后的新数据源。

其实ADF自带的<af:poll/>组件即可实现此需求。

例子:

  • 创建一个可更新的af:table 基于HR的Department表

可以更改表数据并提交,用多浏览器窗口打开该页面来模拟多用户操作。

<af:poll/>控件拖入到页面中,控件属性设置如下:

设置间隔为1分钟,并绑定PollListener

  • 给该页面绑定ManagedBean,并添加PollListener,方法内容如下:

{% codeblock lang:java %} public void heartBeat(PollEvent pollEvent) { System.out.println("start poll...");
DCIteratorBinding it = ADFUtils.findIterator("Departments1Iterator"); ViewObject vo = it.getViewObject(); vo.executeQuery …

Category: ADF Tagged: poll

Read More

"ADF学习总结(一)"

2013-04-19(Friday) 00:00

改变VO查询条件

  • 使用WhereClause改变查询条件
  • 使用Criteria改变查询条件
  • 使用Bind Variables改变查询条件

使用WhereClause改变查询条件

  • setWhereClause

通过VO对象的setWhereClause方法改变查询条件 {% codeblock lang:java %} DCIteratorBinding dc = ADFUtils.findIterator("DepartmentsView1Iterator");
ViewObject vo = dc.getViewObject();
vo.setWhereClause(" 1=1 ");
vo.executeQuery();

  • addWhereClause

addWhereClause是在原有whereClause基础上添加新的查询条件;
跟setWhereClause替换原有whereClaue不同;

使用ViewCriteria改变查询条件

  • 使用定义好的ViewCriteria

事先在创建VO的时候,定义好几种Criteria:DepartmentsViewCriteria

{% codeblock lang:java %} DCIteratorBinding dc = ADFUtils.findIterator("DepartmentsView1Iterator");
ViewObject vo = dc.getViewObject();
ViewCriteriaManager vcm=vo.getViewCriteriaManager …

Category: ADF Tagged: ViewCriteria

Read More

"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

"getRowAtRangeIndex(int)方法的局限性"

2013-04-16(Tuesday) 00:00

导出VO中的数据到EXCEL中时,循环VO中的Row,写入HSSFRow,是通过getRowAtRangeIndex(int)方法循环取Row,代码如下:
{% codeblock lang:java %} ViewObject vo8=am.findViewObject("ChReport1VO1"); if(vo8!=null) { int rowcount8=vo8.getRowCount(); for(int i=0;i<rowcount8;i++) { Row vo_row8=vo8.getRowAtRangeIndex(i); //...TODO } }

这样如果VO里有300条数据,但是pageRange设置为100,这里其实只能取到第一页的100条数据,想要导出所有300条数据则需要一页一页导出,很麻烦。于是考虑不用getRowAtRangeIndex方法取ROW数据,改用RowSetIterator。

{% codeblock lang:java %} ViewObject vo8=am.findViewObject("ChReport1VO1 …

Category: ADF Tagged: excel

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
Page 3 of 8

« Prev Next »