MessageLovInput级联MessageChoice

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

 

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

 

     基本步骤:

     1 为组织和职位创建VO,两个VO需要有一个外键关联,比如OrganizationId

     2 为组织建立Lov(Lov region,本页上的MessageLovInput),LovMap是组织名称,和组织ID,注意组织ID(OrganizationId)的Return值选择一个控件,比如OrgId(我使用一个FormValue)

     3 为职位建立Choice,注意:Instance必须要写,否则筛选不成功,该Instance就是注入到本页AM中的VO实例的名称。Definition,Display和Value都正常填写即可。

     4 在本页的AM中添加组织和职位的VO,在本页的Controller中的processFormRequest中写下如下代码:

 

 if (pageContext.isLovEvent())
     {
       
         String lovInputSourceId = pageContext.getLovInputSourceId();
        
        if("OrganizationLovInput".equalsIgnoreCase(lovInputSourceId))
        {
            Hashtable lovResults =pageContext.getLovResultsFromSession(lovInputSourceId);
             if (lovResults != null)
             {
                 Set entrySet=lovResults.entrySet();
                 Iterator iteResult=entrySet.iterator();
                while(iteResult.hasNext())
                {
                     Map.Entry me=(Map.Entry)iteResult.next();
                     String key=(String)me.getKey();
                     String value=(String)me.getValue();
                   
                    
                     if("OrgId".equalsIgnoreCase(key))
                      {                   
                       Serializable[] params = { value };
                       
                       am.invokeMethod("changePositionChoiceOption",params);
                      }
                }              
             
             }
        }
       
     }
     

 

      由于项目中多处使用这堆代码,就写了个POJO:

 

import oracle.apps.fnd.framework.webui.OAPageContext;
import oracle.apps.fnd.framework.OAApplicationModule;
import java.util.Hashtable;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
import java.io.Serializable;

public class ChoiceOptionSelectorCommand 
{
  private  OAPageContext pageContext;
  private  OAApplicationModule am;
  public ChoiceOptionSelectorCommand()
  {
  }

   public ChoiceOptionSelectorCommand(OAPageContext pageContext,OAApplicationModule am)
  {
    this.pageContext=pageContext;
    this.am=am;
  }

  public  void execute(String msgChoice,String criteria,String method)
  {
    System.out.println("execute");
     if (pageContext.isLovEvent())
     {
      
         String lovInputSourceId = pageContext.getLovInputSourceId();
        
    
        if(msgChoice.equalsIgnoreCase(lovInputSourceId))
        {
            Hashtable lovResults =pageContext.getLovResultsFromSession(lovInputSourceId);
             if (lovResults != null)
             {
                 Set entrySet=lovResults.entrySet();
                 Iterator iteResult=entrySet.iterator();
                while(iteResult.hasNext())
                {
                     Map.Entry me=(Map.Entry)iteResult.next();
                     String key=(String)me.getKey();
                     String value=(String)me.getValue();
                          
                     if(criteria.equalsIgnoreCase(key))
                      {                   
                       Serializable[] params = { value };                      
                       am.invokeMethod(method,params);
                      }
                }              
             
             }
        }
       
     }
  }
}

 

    可以在Controller里这样调用:

    

ChoiceOptionSelectorCommand choiceSelector=new ChoiceOptionSelectorCommand(pageContext,am);
      
    choiceSelector.execute("Organization","OrgId","changePositionChoiceOption");

    Organization是MessageLovInput的名字,OrgId是Lov中LovMap里的Return对应的Item的名字, changePositionChoiceOption是AM中改变Choice选项列表的方法。

 

   5 在Am中添加changePositionChoiceOption方法,以OrgId作为参数,实际上是调用PositionVO的查询方法,完成数据填充。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值