基础资料联动通用封装原创
金蝶云社区-吴琦_fred
吴琦_fred
19人赞赏了该文章 384次浏览 未经作者许可,禁止转载编辑于2023年06月16日 17:52:50
封面

联动的业务逻辑有多种

  1. 不选L1时,L2列表不显示;选择L1时,L2列表过滤显示;这种需要新做一个动态表单,或者列表模板;

  2. 不选L1时,L2列表全部显示;选择L1时,L2列表过滤显示;选择L2时,自动填充L1;这种直接需要使用下面的封装;

  3. 如下封装类可以解决页面上,两个基础资料的联动问题;

=====================================================================

/**

* 处理两个基础资料的联动,通用插件可以处理多组联动的问题

*/

public class BasedataDoubleLinkFormPlugin extends AbstractFormPlugin implements BeforeF7SelectListener,ValueToolInterface {


     @Override

     public void registerListener(EventObject e){

         super.registerListener(e);

         // 注册L2F7监听

         for(String key : getL2L1KeyMap().keySet()){

             boolean bl2 = PropertyHelper.existProperty(this.getModel().getDataEntity(), key);

             if(bl2){

                 BasedataEdit be = this.getView().getControl(key);

                 be.addBeforeF7SelectListener(this);

             }

         }

    

     }


    /**

     * key = l2标识

     * value=l1标识

     *级联关系为l1下的l2

     */

     protected Map<String,String> getL2L1KeyMap(){

        Map<String,String> l1l2KeyMap = new HashMap();

        l1l2KeyMap.put("l2","l1");

        return l1l2KeyMap;

    }


    /**

     * key = l1参与过滤的字段

     * value=l2参与过滤的字段

     *级联关系为l1下的l2

     */

     protected Map<String,String> getL1L2FilterFieldMap(){

        Map<String,String> l1l2FilterFieldMap = new HashMap();

        l1l2FilterFieldMap.put("l1:id","l2:group");

        return l1l2FilterFieldMap;

    }


    /**

    * 如果选了二级默认填充一级

    * 需要在二级属性引用里面把组字段引入

    */

    @Override

    public void propertyChanged(PropertyChangedArgs e) {

        String name = e.getProperty().getName();

        

        if(getL2L1KeyMap().keySet().contains(name)){

            String l1Key = getL2L1KeyMap().get(name);

            String l1FieldKey = contains(getL1L2FilterFieldMap(), l1Key);

            String[] l1FieldKeyArr = l1FieldKey.split(":");

            //

            String l2FieldKey = getL1L2FilterFieldMap().get(l1FieldKey);

            String[] l2FieldKeyArr = l2FieldKey.split(":");

            // 获取增员类别

            DynamicObject basedataL2 = (DynamicObject)this.getValueIfExist(this.getModel(), name);

            if(basedataL2 != null){

                this.getModel().setValue(l1FieldKeyArr[0], getLongValue(basedataL2, l2FieldKeyArr[1]));

            }

        }

    }


    /**

    *

    */

    protected Long getLongValue(DynamicObject basedastaL2, String key){

        Object ret = basedataL2.get(key);

        if(ret instanceof DynamiObject){

            return ((DynamicObject)ret).getLong("id");

        } else if(ret instanceof Long){

            return (Long) ret ;

        }

        return null ;

    }


    @Override

    public void beforeF7Select(BeforeF7SelectEvent evt){

        ListShowParameter listShowParameter;

        String name = evt.getProperty().getName();


        if(getL2L1KeyMap().keySet().contains(name)){

            String l1Key = getL2L1KeyMap().get(name);

            // 获取增员类别

            DynamicObject basedataL1 = (DynamicObject)this.getValueIfExist(this.getModel(), l1Key);

            if(basedataL1 != null){

                String l1FieldKey = contains(getL1L2FilterFieldMap(), l1Key);

                if(StringUtils.isNotBlank(l1FieldKey)){

                    String[] l1KeyFieldArr = l1FieldKey.split(":");

                    QFilter qFilter = new QFilter(getL1FilterL2Field(getL1L2FilterFieldMap(), l1FieldKey), QCP.equals, basedataL1.getLong(l1KeyFieldArr[1]));

                    listShowParameter = (ListShowParameter)evt.getFormShowParameter();

                    // 设置F7列表数据过滤

                    listShowParameter.getListFilterParameter().getQFilters().add(qFilter);

                    // 设置F7列表左树的过滤

                    List<QFilter> qFilters = listShowParameter.getTreeFilterParameter().getQFilters();

                    if(qFilters != null){

                        QFilter treeFilter = new QFilter(l1KeyFieldArr[1], QCP.equals, basedataL1.getLong(l1KeyFieldArr[1]));

                        qFilter.add(treeFilter);

                    }

                }

            }

        }

    }


    /**

    *

    */

    private String getL1FilterL2Field(Map<String, String> l1L2FilterFieldMap, String l1FieldKey){

        String l2FilterField = l1L2FilterFieldMap.get(l1FieldKey);

        String[] l2KeyFieldArr = l2FilterField.split(":");

        return l2KeyFieldArr[1];

    }

    /**

    * 通过l1的标识获取

    * l1>l2对应的字段

    */

    private String contains(Map<String, String> map, String likeKey){

        for(String key : map.keySet()){

            if(key.contains(likeKey)){

                return key ;

            }

        }

        return "" ;

    }


}


                                                        

赞 19