OAF开发心得一二

1、向session里添加值

pageContext.putSessionValue(key,value)

2、从session里取值

pageContext.getSessionValue(key)

3、创建二次确认页面

OAException descMesg = new OAException("是否确认删除?");
String noUrl = APPS_HTML_DIRECTORY + "OA.jsp?page=/cisdi/oracle/apps/ofa/asm/webui/WarehouseInPG";
OADialogPage dialogPage = 
new OADialogPage(OAException.CONFIRMATION, descMesg, null, "", noUrl);
dialogPage.setOkButtonItemName("OkButton");
dialogPage.setOkButtonToPost(true);
dialogPage.setNoButtonToPost(true);
dialogPage.setPageTitle("删除");
dialogPage.setPostToCallingPage(true);
pageContext.redirectToDialogPage(dialogPage);

4、判断事件

public void processFormRequest(OAPageContext pageContext,OAWebBean webBean) {
    String event = pageContext.getParameter(EVENT_PARAM);
    if ("事件名".equals(event)){
        //TODO
    }
}

5、判断按钮

public void processFormRequest(OAPageContext pageContext,OAWebBean webBean) {
    if (pageContext.getParameter("按钮名") != null){
        //TODO
    }
}

6、信息提示

OAException tipMessage =  new OAException("提示信息", OAException.INFORMATION);
pageContext.putDialogMessage(tipMessage);

7、页面跳转

String strUrl = "OA.jsp?page=/cisdi/oracle/apps/ofa/asm/webui/DisoSubmitPG&AssetId=" + strAssetId;
pageContext.forwardImmediately(strUrl, null, OAWebBeanConstants.KEEP_MENU_CONTEXT, null, null, true, "N");

8、传参

  1)界面部门:

    VO界面Binding Style 设成 Oracle Positional

  2)sql部分:

SELECT *
  FROM PA_PROJECTS_ALL T
 WHERE T.NAME = :1
   AND T.SEGMENT1 = :2

  3)代码部分:

PurPackPlanVOImpl vo = (PurPackPlanVOImpl)am.findViewObject("PurPackPlanVO1");//获取vo
vo.setWhereClause(null);
vo.setWhereClauseParam(0, projectNumber);//设置第一个参数
vo.setWhereClauseParam(1, lotNumber);//设置第二个参数
vo.executeQuery();//查询

9、获取ORG_ID
 

FND_PROFILE.VALUE('ORG_ID');--这种发现是在oaf的vo的sql中(获取当前职责的OU)
FND_GLOBAL.ORG_ID;--这种发现是在存储过程的sql的

10、多个lov清空值

问题:第一个lov选择了值之后,再选择第二个lov,第一个里的值就会被清空掉。

解决办法:将readOnly属性设置为动态的${oa.current.ReadOnlyStatus}

原理:未知

11、给messageStyleText类型的item赋值

//findIndexedChildRecursive是获取第一个与名称匹配的被索引的子对象
//如果子对象为null,可以用findChildRecursive方法
OAMessageStyledTextBean PoDocBean =  (OAMessageStyledTextBean)webBean.findIndexedChildRecursive("PoType");//获取这个item
if (PoDocBean != null) {//判断不为null
  PoDocBean.setAttributeValue(OAMessageTextInputBean.READ_ONLY_ATTR, Boolean.TRUE);//只读
  PoDocBean.setText(pageContext, this.PoDoc);//设置值
}

12、隐藏按钮

//hideWebBean(oracle.apps.fnd.framework.webui.beans.OAWebBean p1, java.lang.String p2)
//oracle.apps.po.common.webui.ClientUtil;
ClientUtil.hideWebBean(paramOAWebBean, "RequiredFieldRN");

13、打印日志

//oracle.apps.pa.util.webui.Debug
Debug.write(paramOAPageContext, this, "测试日志" , 3);

查看日志的时候需要打开诊断

14、使flex组件显示在页面上

一般会遇到pg上有flex组件,弹性域也是设置好的,但flex组件就是不显示,就可以这样做

OADescriptiveFlexBean dffBean = (OADescriptiveFlexBean)createWebBean(paramOAPageContext,DESCRIPTIVE_FLEX_BEAN, null, "PO_DISTRIBUTIONS");   //弹性域名
paramOAWebBean.addIndexedChild(dffBean);   
dffBean.setAttributeValue(OAWebBeanConstants.VIEW_USAGE_NAME,"PoDistributionsMergeVO");//VO名
dffBean.setAttributeValue(OAWebBeanConstants.FLEXFIELD_APPLICATION_SHORT_NAME,  "PO");//应用产品名
dffBean.setAttributeValue(OAWebBeanConstants.REGION_APPLICATION_ID,  new Integer(0));   
dffBean.setAttributeValue(OAWebBeanConstants.FLEXFIELD_NAME,"PO_DISTRIBUTIONS"); //弹性域名

15、oaf跳转form页面

//form:responsibilityApplicationShortName:responsibilityKey:securityGroupKey:functionName:param1=value1 param2=value2 param3=value3
//responsibilityKey在FND_RESPONSIBILITY_VL查询,securityGroupKey为STANDARD,functionName就是form的名字
String destination = "form:"+appShortName+":"+messageBuffer+":STANDARD:CUXAPSTP:DOC_NUM=".concat(poNum);
pageContext.forwardImmediatelyToForm(destination);

16、oaf调用存储过程

OAApplicationModule am = paramOAPageContext.getApplicationModule(paramOAWebBean);
OADBTransaction transaction = am.getOADBTransaction();
CallableStatement cs = transaction.createCallableStatement("call apps.CUX_PO_WF_PKG.INIT_APPROVER(?,?,?)", 1);
try {
  cs.setInt(2, poHeaderIdNumber);
  cs.setInt(3, poLineIdNumber);
  cs.registerOutParameter(1, 12);//这里的12指的是varchar,具体可以看java.sql.Types类
  cs.execute();
  String longDescription = cs.getString(1);
  cs.close();
} catch (Exception e) {
  Debug.write(paramOAPageContext, this, "调用函数报错" + e.toString(), 3);
}

17、个性化页面的隐藏和取消隐藏

    1):

    2):

    3):

    4):如果需要恢复,还是按照上面的步骤来设置,如果没法弄的话,还有一个地方可以打开个性化页

        4-1):进入功能管理员职责

        4-2):

        4-3):接下来的操作就和上面一样了

18、添加关于此页、诊断等

        1):打开forms界面,责任为系统管理员,profile->系统

19、个性化页,除了进入当前页面,点击个性化页,还有一个地方可以设置

选择功能管理员->点击个性化->输入文档路径(也就是pg的路径)->点击查找->查询出来结果后点击个性化页

20、点击lov的事件

点击时事件名叫lovPrepare,点击结束后事件名叫lovUpdate

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值