壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3081|回复: 5

[OAF] MessageLovInput级联MessageChoice

  [复制链接]
发表于 2009/9/8 18:11:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x

案例:通过Lov选择组织,然后自动筛选职位的记录,职位用Choice控制选择。而且还要实现回填(当修改记录时)

基本原理:Lov回填事件触发时(isLovEvent=true),读取Lov的返回值列表,找出关联两个VO的键值,作为Choice对应的VO的查询条件,构建动态SQL,刷新VO

基本步骤:
     1 为组织和职位创建VO,两个VO需要有一个外键关联,比如OrganizationId
     2 为组织建立LovLov region,本页上的MessageLovInput),LovMap是组织名称,和组织ID,注意组织IDOrganizationId)的Return值选择一个控件,比如OrgId(我使用一个FormValue
     3 为职位建立Choice注意:Instance必须要写,否则筛选不成功,该Instance就是注入到本页AM中的VO实例的名称。DefinitionDisplayValue都正常填写即可。
     4 在本页的AM中添加组织和职位的VO,在本页的Controller中的processFormRequest中写下如下代码:
Java代码
1.
if (pageContext.isLovEvent())  
2.
    {  
3.

4.
        String lovInputSourceId = pageContext.getLovInputSourceId();  
5.

6.

if("OrganizationLovInput".equalsIgnoreCase(lovInputSourceId))  
7.
       {  
8.
           Hashtable lovResults =pageContext.getLovResultsFromSession(lovInputSourceId);  
9.

if (lovResults != null)  
10.
            {  
11.
                Set entrySet=lovResults.entrySet();  
12.
                Iterator iteResult=entrySet.iterator();  
13.

while(iteResult.hasNext())  
14.
               {  
15.
                    Map.Entry me=(Map.Entry)iteResult.next();  
16.
                    String key=(String)me.getKey();  
17.
                    String value=(String)me.getValue();  
18.

19.

20.

if("OrgId".equalsIgnoreCase(key))  
21.
                     {                     
22.
                      Serializable[] params = { value };  
23.

24.
                    <span style="background-color: #ffff00;">  am.invokeMethod("changePositionChoiceOption",params);</span>  
25.
                     }  
26.
               }               
27.

28.
            }  
29.
       }  
30.

31.
    }  
32.



由于项目中多处使用这堆代码,就写了个POJO:
Java代码
1.
import oracle.apps.fnd.framework.webui.OAPageContext;  
2.
import oracle.apps.fnd.framework.OAApplicationModule;  
3.
import java.util.Hashtable;  
4.
import java.util.Set;  
5.
import java.util.Iterator;  
6.
import java.util.Map;  
7.
import java.io.Serializable;  
8.

9.
public
class ChoiceOptionSelectorCommand   
10.
{  
11.

private  OAPageContext pageContext;  
12.

private  OAApplicationModule am;  
13.

public ChoiceOptionSelectorCommand()  
14.
  {  
15.
  }  
16.

17.

public ChoiceOptionSelectorCommand(OAPageContext pageContext,OAApplicationModule am)  
18.
  {  
19.

this.pageContext=pageContext;  
20.

this.am=am;  
21.
  }  
22.

23.

public
void execute(String msgChoice,String criteria,String method)  
24.
  {  
25.
    System.out.println("execute");  
26.

if (pageContext.isLovEvent())  
27.
     {  
28.

29.
         String lovInputSourceId = pageContext.getLovInputSourceId();  
30.

31.

32.

if(msgChoice.equalsIgnoreCase(lovInputSourceId))  
33.
        {  
34.
            Hashtable lovResults =pageContext.getLovResultsFromSession(lovInputSourceId);  
35.

if (lovResults != null)  
36.
             {  
37.
                 Set entrySet=lovResults.entrySet();  
38.
                 Iterator iteResult=entrySet.iterator();  
39.

while(iteResult.hasNext())  
40.
                {  
41.
                     Map.Entry me=(Map.Entry)iteResult.next();  
42.
                     String key=(String)me.getKey();  
43.
                     String value=(String)me.getValue();  
44.

45.

if(criteria.equalsIgnoreCase(key))  
46.
                      {                     
47.
                       Serializable[] params = { value };                        
48.
                       am.invokeMethod(method,params);  
49.
                      }  
50.
                }               
51.

52.
             }  
53.
        }  
54.

55.
     }  
56.
  }  
57.
}  


可以在Controller里这样调用:
     
Java代码
1.
ChoiceOptionSelectorCommand choiceSelector=new ChoiceOptionSelectorCommand(pageContext,am);  
2.

3.
    choiceSelector.execute("Organization","OrgId","changePositionChoiceOption");  

    OrganizationMessageLovInput的名字,OrgIdLovLovMap里的Return对应的Item的名字, changePositionChoiceOptionAM中改变Choice选项列表的方法。
   5 Am中添加changePositionChoiceOption方法,以OrgId作为参数,实际上是调用PositionVO的查询方法,完成数据填充。
发表于 2009/10/22 14:13:57 | 显示全部楼层
學習了,感謝分享。。
发表于 2010/4/8 11:19:30 | 显示全部楼层
恩 一般用触发事件来实现类似功能
发表于 2010/10/8 13:36:33 | 显示全部楼层
学习了 感谢分享
发表于 2013/7/14 15:45:26 | 显示全部楼层
Hashtable lovResults =pageContext.getLovResultsFromSession(lovInputSourceId);  
Set entrySet=lovResults.entrySet();  
Iterator iteResult=entrySet.iterator();      
对于上面用lovResults获得集合Set我有新的见解,说出来与大家一起讨论。
因为选择LOV的值,只能选择一条记录,所以可以不用Set集合来取值,
用String orgID =  lovResults.get("OrgId");
Serializable[] params = { orgID  };
am.invokeMethod("changePositionChoiceOption",params);
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 06:11 , Processed in 0.021508 second(s), 16 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表