创建一个地址簿控件,这是一个私有封装。用于显示和修改被表单数据源绑定的数据,自动通过平台各类权限配置控制其读、写、隐藏状态。
| PC端 | 
|---|
|   | 
| 移动端 | 
|  | 
只显示最近的10条记录
预置校验
参见单行预置校验
若输入一个非法的账户名,不允许保存
支持键盘模糊提示(liveSearch)
 
基本属性
查询列宽
参见单行查询列宽
显示规则
参见单行显示规则
帮助说明
参见单行帮助说明
扩展代码
参见单行扩展代码
readonly仅控制文本框不可输入,但按钮还是可以点击
disabled控制文本框和按钮均不可使用
扩展属性
空值提示
参见单行空值提示
地址簿类型
地址簿分为人员地址簿和部门地址簿两种
人员地址簿

1.模式 普通模式和高级模式两种。以下属性项仅在高级模式时可用
2. 叶子节点类型
用户树节点显示到用户;部门树节点仅显示到部门;团队树节点仅显示到团队3.分类方式 仅在
叶子节点类型为用户时可用,可选范围:部门、角色、团队4.兼任 勾选
显示后树结构将显示组织模型添加兼职信息时,是否显示属性为是的兼职人员。有关兼职的设置请参见 https://docs.awspaas.com/user-manual/aws-pass-console-user-manual-org/organization/usermap.html 。 注: 兼职是否显示在6.3.1.0626 版本后提供一个总开关AWS Portal门户应用参数地址薄显示兼职人员(addressDisplayMap)详细见该参数说明5.选择模式
单选,只允许选择一个值;多选,允许选择多个值6.分隔符 仅在
选择模式为多选时可用,多值之间的分隔符7.取值字段 指定取值字段,多个值用","隔开
8.回填字段 指定回填字段,多个值用","隔开,【取值字段】和【回填字段】个数和次序必须匹配
10.过滤范围
部门层级,只显示部门层级范围内的部门,例如【从1到3】隐藏作为公司的子部门该属性仅当部门来源于HR组织管理应用时有效11.过滤事件 一个实现com.actionsoft.bpms.ui.dict.address.base.AddressUIFilterInterface接口的类,由自定义的Java程序控制树形节点的显示,例如【根据当前人的身份过滤掉不允许显示的部门、角色人员】
import com.actionsoft.bpms.org.model.DepartmentModel;
import com.actionsoft.bpms.org.model.UserModel;
import com.actionsoft.bpms.server.UserContext;
import com.actionsoft.bpms.ui.dict.address.base.AddressUIFilterInterface;
import com.actionsoft.bpms.ui.dict.address.model.AdvancedAddressModel;
/**
* 地址本UI组件的过滤事件
* @author Administrator
*
*/
public class AddressUIFilterTest implements AddressUIFilterInterface {
 @Override
  public boolean addressUIFlexCompanyFilter(UserContext uc, CompanyModel model, AdvancedAddressModel advancedAddressModel) {
      if(model.getName().equals("炎黄盈动")){
          return true;
      }else{
          return false;
      }
  }
   @Override
    public boolean addressUIFlexDepartmentFilter(UserContext uc, DepartmentModel model,AdvancedAddressModel advancedAddressModel) {
        if (model.getName().equals("总裁办")) {
            String choiceType = advancedAddressModel.getChoiceType();
            advancedAddressModel.setLeafType("department");
            return true;
        }
        return true;
    }
    @Override
       public boolean addressUIFlexUserFilter(UserContext uc, UserModel userModel, AdvancedAddressModel aa) {
      if (HighSecurity.isON()) { //判断是否开启密级设置
          int currSecurityLevel = uc.getUserModel().getSecurityLevel();
          if (currSecurityLevel <= userModel.getSecurityLevel()){
              if (userModel.getUserName().equals("测试用户")) {
                  return false;
              }else{
                  return true;
              }
              }
          return false;
      } else {
          if (userModel.getUserName().equals("测试用户")) {
                  return false;
              }else{
                  return true;
          }
      }
  }
}
12.单位列表 如果不配置该属性,默认显示自己所在实体单位及有权限访问的实体单位;如果配置该属性,显示配置的并且有权限的单位(包括实体单位和虚拟单位)
13.数据源接口 一个继承com.actionsoft.bpms.ui.dict.address.base.AddressUISourceDataAbs的类,由自定义的Java程序控制树形节点的内容
    package com.actionsoft.bpms.ui.dict.address.base;
    import com.actionsoft.bpms.server.UserContext;
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    public abstract class AddressUISourceDataAbs implements AddressUISourceDataInterface {
        /**
         * 获取地址簿树跟节点
         *
         * @param appId 应用id
         * @param filter 地址簿配置
         * @param context 用户上下文
         * @return
         */
        public abstract JSONArray getOrgTreeData(String appId, JSONObject filter, UserContext context);
        /**
         * 获取地址簿树子节点  移动端时从根目录开始pid=='' && pType == ''时是根目录
         *
         * @param appId 应用id
         * @param filter 地址簿配置
         * @param context 用户上下文
         * @param pid 父节点id
         * @param pType 父节点类型
         * @return
         */
        public abstract JSONArray getSubJsonData(String appId, JSONObject filter, UserContext context, String pid, String pType);
        /**
         * 查询地址簿
         *
         * @param appId 应用id
         * @param filter 地址簿配置
         * @param context 用户上下文
         * @param sourceField 地址簿回填字段
         * @param type 查询类型 同地址簿叶子节点
         * @param keyWord 查询关键字
         * @param limit 每页条数
         * @param start 起始条数
         * @return 包含 总数量 totalNum 总数量 ; 查询列表 list(JSONArray)
         */
        public abstract JSONObject search(String appId, JSONObject filter, UserContext context, String sourceField, String type, String keyWord, int limit, int start);
        /**
         * 地址簿显示值(主要是返回值中有uid 或deptid 或 teamID 显示值需要具体信息用来显示)
         *
         * @param appId 应用id
         * @param filter 地址簿配置
         * @param context 用户上下文
         * @param value 用户账号或部门id
         * @return 包含 id :用户账号或部门id ;name: 用户名称或部门名称
         */
        public abstract JSONObject addressDisplayValue(String appId, JSONObject filter, UserContext context, String value);
        /**获取父节点 移动端使用
         * @param appId 应用id
         * @param filter 地址簿配置
         * @param context 用户上下文
         * @param nodeId 当前节点id
         * @param nodeType 当前节点类型
         * @return
         */
        public abstract JSONObject getParentTreeNode(String appId, JSONObject filter, UserContext context, String nodeId, String nodeType);
    }
     import java.util.ArrayList;
     import java.util.Collections;
     import java.util.HashMap;
     import java.util.Iterator;
     import java.util.List;
     import java.util.Map;
     import com.actionsoft.apps.AppsConst;
     import com.actionsoft.bpms.commons.security.high.HighSecurity;
     import com.actionsoft.bpms.commons.security.high.model.HighSecurityModel;
     import com.actionsoft.bpms.commons.security.mgtgrade.util.GradeSecurityUtil;
     import com.actionsoft.bpms.org.cache.CompanyCache;
     import com.actionsoft.bpms.org.cache.DepartmentCache;
     import com.actionsoft.bpms.org.cache.TeamCache;
     import com.actionsoft.bpms.org.cache.UserCache;
     import com.actionsoft.bpms.org.cache.UserMapCache;
     import com.actionsoft.bpms.org.model.CompanyModel;
     import com.actionsoft.bpms.org.model.DepartmentModel;
     import com.actionsoft.bpms.org.model.TeamModel;
     import com.actionsoft.bpms.org.model.UserMapModel;
     import com.actionsoft.bpms.org.model.UserModel;
     import com.actionsoft.bpms.org.util.AddressBookUserMapComparator;
     import com.actionsoft.bpms.org.util.SecurityUtil;
     import com.actionsoft.bpms.server.UserContext;
     import com.actionsoft.bpms.server.conf.ConfigConst;
     import com.actionsoft.bpms.ui.dict.address.base.AddressUISourceDataAbs;
     import com.actionsoft.bpms.ui.dict.address.util.AdvancedAdrressUtil;
     import com.actionsoft.bpms.util.UtilSerialize;
     import com.actionsoft.bpms.util.UtilString;
     import com.actionsoft.sdk.local.SDK;
     import com.alibaba.fastjson.JSONArray;
     import com.alibaba.fastjson.JSONObject;
     public class AddressUISourceDataTest extends AddressUISourceDataAbs {
         /**
          * 获取地址簿树跟节点
          *
          * @param filter
          * @return
          */
         public JSONArray getOrgTreeData(String appId, JSONObject filter, UserContext context) {
             JSONArray treeData = new JSONArray();
             //单位列表
             String companyList = filter.getString("companyList");
             JSONObject addressSetting = filter.getJSONObject("addressSetting");
             //部门根目录,多个用|隔开
             String rootDetpId = addressSetting.getString("rootDetpId");
             //部门层级
             int layerFrom = -1;
             int layerTo = 9999;
             String layerFromStr = addressSetting.getString("layerFrom");
             if (!UtilString.isEmpty(layerFromStr)) {
                 layerFrom = Integer.parseInt(layerFromStr);
             }
             String layerToStr = addressSetting.getString("layerTo");
             if (!UtilString.isEmpty(layerToStr)) {
                 layerTo = Integer.parseInt(layerToStr);
             }
             //取值字段
             String sourceField = filter.getString("sourceField");
             //叶子节点
             String leafType = addressSetting.getString("leafType");
             /*//返回单位json
             JSONObject json = new JSONObject();
             json.put("id", "单位id");
             json.put("name", "单位名称");
             json.put("iconCls", "company");
             json.put("iconFont", "");
             json.put("open", "是否展开 true|false");
             json.put("nocheck", true);
             json.put("type", "company");
             //以下内容用来回填数据
             json.put("COMPANYNAME", "单位名称");
             json.put("COMPANYID", "单位id");
             json.put("COMPANYNO", "单位编码");
             treeData.add(json);*/
             //返回部门json
             /*JSONObject json = new JSONObject();
             json.put("iconCls", "dept");
             json.put("iconFont", "");
             json.put("pid", "父节点id");
             json.put("type", "dept");
             if (leafType.equals("dept")) {
                 json.put("leaf", true);//是否叶子节点
             }
             json.put("open", false);
             json.put("layer", "部门层级");
             json.put("size", "部门下人员个数");
             json.put("sourceId", "部门id");
             json.put("id", "部门id");
             json.put("name", "部门名称");
             json.put("type", "dept");
             json.put("fullPathName", "部门全路径");
             //以下内容用来回填数据,根据sourceField值确定返回哪些数据
             if (!UtilString.isEmpty(sourceField)) {
                 JSONObject temp = new JSONObject();
                 temp.put("COMPANYNAME", "公司名称");
                 temp.put("COMPANYID", "公司id");
                 temp.put("COMPANYNO", "公司编码");
                 temp.put("DEPTNAME", "部门名称");
                 temp.put("DEPTID", "部门id");
                 temp.put("DEPTFULLPATHID", "部门id全路径");
                 temp.put("DEPTFULLPATHNAME", "部门名称全路径");
                 temp.put("DEPTNO", "部门代码");
                 temp.put("DEPTZONE", "区域划分");
                 temp.put("DEPTTYPE", "部门类型");
                 temp.put("EXT1", "扩展标记1");
                 temp.put("EXT2", "扩展标记2");
                 temp.put("EXT3", "扩展标记3");
                 temp.put("EXT4", "扩展标记4");
                 temp.put("EXT5", "扩展标记5");
                 String[] sourceFields = sourceField.split(",");
                 for (String field : sourceFields) {
                     json.put(field, temp.getString(field));
                 }
             }*/
             /*//返回人员的json
             JSONObject json = new JSONObject();
             json.put("sourceId", "用户帐号");
             json.put("id", "用户帐号");
             json.put("name", "用户姓名");
             json.put("type", "user");
             json.put("USERNAMEALIAS", "用户全名");
             //以下内容用来回填数据,根据sourceField值确定返回哪些数据
             if (!UtilString.isEmpty(sourceField)) {
                 JSONObject temp = new JSONObject();
                 temp.put("COMPANYNAME", "单位名称");
                 temp.put("COMPANYID", "单位id");
                 temp.put("COMPANYNO", "单位编码");
                 temp.put("EMAIL", "邮箱");
                 temp.put("USERNAME", "用户姓名");
                 temp.put("DEPTID", "部门id");
                 temp.put("DEPTFULLPATHID", "部门id全路径");
                 temp.put("DEPTFULLPATHNAME", "部门名称全路径");
                 temp.put("DEPTFULLPATHNAMEWITHCOMPNAY", "部门全路径名称(含单位)");
                 temp.put("DEPTNAME", "部门名称");
                 temp.put("DEPTNO", "部门编码");
                 temp.put("ROLEID", "角色id");
                 temp.put("UID", "用户帐号");
                 temp.put("USERID", "用户ID");
                 temp.put("USERNO", "员工代码");
                 temp.put("USERNAME", "用户姓名");
                 temp.put("USERNAMEALIAS", "用户全名");
                 temp.put("EMAIL", "邮箱");
                 temp.put("OFFICETEL", "电话");
                 temp.put("MOBILE", "手机");
                 temp.put("OFFICEFAX", "传真");
                 temp.put("POSITIONNAME", "职位名称");
                 temp.put("POSITIONNO", "职位编码");
                 temp.put("POSITIONLAYER", "职位等级");
                 temp.put("EXT1", "扩展标记1");
                 temp.put("EXT2", "扩展标记2");
                 temp.put("EXT3", "扩展标记3");
                 temp.put("EXT4", "扩展标记4");
                 temp.put("EXT5", "扩展标记5");
                 String[] sourceFields = sourceField.split(",");
                 for (String field : sourceFields) {
                     json.put(field, temp.getString(field));
                 }
             }*/
             return treeData;
         }
         /**
          * 获取地址簿树子节点 移动端时从根目录开始pid=='' && pType == ''时是根目录
          *
          * @param filter
          * @return
          */
         public JSONArray getSubJsonData(String appId, JSONObject filter, UserContext context, String pid, String pType) {
             JSONArray treeData = new JSONArray();
             //单位列表
             String companyList = filter.getString("companyList");
             JSONObject addressSetting = filter.getJSONObject("addressSetting");
             //部门根目录,多个用|隔开
             String rootDetpId = addressSetting.getString("rootDetpId");
             //部门层级
             int layerFrom = -1;
             int layerTo = 9999;
             String layerFromStr = addressSetting.getString("layerFrom");
             if (!UtilString.isEmpty(layerFromStr)) {
                 layerFrom = Integer.parseInt(layerFromStr);
             }
             String layerToStr = addressSetting.getString("layerTo");
             if (!UtilString.isEmpty(layerToStr)) {
                 layerTo = Integer.parseInt(layerToStr);
             }
             //取值字段
             String sourceField = filter.getString("sourceField");
             //叶子节点
             String leafType = addressSetting.getString("leafType");
             /*//返回单位json
             JSONObject json = new JSONObject();
             json.put("id", "单位id");
             json.put("name", "单位名称");
             json.put("iconCls", "company");
             json.put("iconFont", "");
             json.put("open", "是否展开 true|false");
             json.put("nocheck", true);
             json.put("type", "company");
             json.put("fullPathName", "公司全路径");
             //以下内容用来回填数据
             json.put("COMPANYNAME", "单位名称");
             json.put("COMPANYID", "单位id");
             json.put("COMPANYNO", "单位编码");
             treeData.add(json);*/
             //返回部门json
             /*JSONObject json = new JSONObject();
             json.put("iconCls", "dept");
             json.put("iconFont", "");
             json.put("pid", "父节点id");
             json.put("type", "dept");
             if (leafType.equals("dept")) {
                 json.put("leaf", true);//是否叶子节点
             }
             json.put("open", false);
             json.put("layer", "部门层级");
             json.put("size", "部门下人员个数");
             json.put("sourceId", "部门id");
             json.put("id", "部门id");
             json.put("name", "部门名称");
             json.put("type", "dept");
             json.put("fullPathName", "部门全路径");
             //以下内容用来回填数据,根据sourceField值确定返回哪些数据
             if (!UtilString.isEmpty(sourceField)) {
                 JSONObject temp = new JSONObject();
                 temp.put("COMPANYNAME", "公司名称");
                 temp.put("COMPANYID", "公司id");
                 temp.put("COMPANYNO", "公司编码");
                 temp.put("DEPTNAME", "部门名称");
                 temp.put("DEPTID", "部门id");
                 temp.put("DEPTFULLPATHID", "部门id全路径");
                 temp.put("DEPTFULLPATHNAME", "部门名称全路径");
                 temp.put("DEPTNO", "部门代码");
                 temp.put("DEPTZONE", "区域划分");
                 temp.put("DEPTTYPE", "部门类型");
                 temp.put("EXT1", "扩展标记1");
                 temp.put("EXT2", "扩展标记2");
                 temp.put("EXT3", "扩展标记3");
                 temp.put("EXT4", "扩展标记4");
                 temp.put("EXT5", "扩展标记5");
                 String[] sourceFields = sourceField.split(",");
                 for (String field : sourceFields) {
                     json.put(field, temp.getString(field));
                 }
             }*/
             /*//返回人员的json
             JSONObject json = new JSONObject();
             json.put("pid", pid);
             if (部门主管) {
                 json.put("iconFont", UtilSerialize.parseObject("{'code':'','color':'#DA2912'}"));
             } else {
                 json.put("iconFont", "");
             }
             json.put("sourceName", "用户姓名");
             json.put("type", "user");
             json.put("leaf", true);
             json.put("sourceId", "用户帐号");
             json.put("id",  "用户帐号"+ "_" + pid);
             json.put("name", "用户姓名");
             json.put("type", "user");
             json.put("USERNAMEALIAS", "用户全名");
             json.put("fullPathName", "所在部门全路径");
             //以下内容用来回填数据,根据sourceField值确定返回哪些数据
             if (!UtilString.isEmpty(sourceField)) {
                 JSONObject temp = new JSONObject();
                 temp.put("COMPANYNAME", "单位名称");
                 temp.put("COMPANYID", "单位id");
                 temp.put("COMPANYNO", "单位编码");
                 temp.put("EMAIL", "邮箱");
                 temp.put("USERNAME", "用户姓名");
                 temp.put("DEPTID", "部门id");
                 temp.put("DEPTFULLPATHID", "部门id全路径");
                 temp.put("DEPTFULLPATHNAME", "部门名称全路径");
                 temp.put("DEPTFULLPATHNAMEWITHCOMPNAY", "部门全路径名称(含单位)");
                 temp.put("DEPTNAME", "部门名称");
                 temp.put("DEPTNO", "部门编码");
                 temp.put("ROLEID", "角色id");
                 temp.put("UID", "用户帐号");
                 temp.put("USERID", "用户ID");
                 temp.put("USERNO", "员工代码");
                 temp.put("USERNAME", "用户姓名");
                 temp.put("USERNAMEALIAS", "用户全名");
                 temp.put("EMAIL", "邮箱");
                 temp.put("OFFICETEL", "电话");
                 temp.put("MOBILE", "手机");
                 temp.put("OFFICEFAX", "传真");
                 temp.put("POSITIONNAME", "职位名称");
                 temp.put("POSITIONNO", "职位编码");
                 temp.put("POSITIONLAYER", "职位等级");
                 temp.put("EXT1", "扩展标记1");
                 temp.put("EXT2", "扩展标记2");
                 temp.put("EXT3", "扩展标记3");
                 temp.put("EXT4", "扩展标记4");
                 temp.put("EXT5", "扩展标记5");
                 String[] sourceFields = sourceField.split(",");
                 for (String field : sourceFields) {
                     json.put(field, temp.getString(field));
                 }
             }*/
             return treeData;
         }
         public JSONObject search(String appId, JSONObject filter, UserContext context, String sourceField, String type, String keyWord, int limit, int start) {
             JSONObject result = new JSONObject();
             String companyList = filter.getString("companyList");
             JSONObject addressSetting = filter.getJSONObject("addressSetting");
             //部门根目录,多个用|隔开
             String rootDetpId = addressSetting.getString("rootDetpId");
             //部门层级
             int layerFrom = -1;
             int layerTo = 9999;
             String layerFromStr = addressSetting.getString("layerFrom");
             if (!UtilString.isEmpty(layerFromStr)) {
                 layerFrom = Integer.parseInt(layerFromStr);
             }
             String layerToStr = addressSetting.getString("layerTo");
             if (!UtilString.isEmpty(layerToStr)) {
                 layerTo = Integer.parseInt(layerToStr);
             }
             //叶子节点
             String leafType = addressSetting.getString("leafType");
             JSONArray array = new JSONArray();
             String currentCompanyId = context.getCompanyModel().getId();
             String uid = context.getUID();
             int listSize = 0;
             /*//返回人员json
             JSONObject json = new JSONObject();
             json.put("id", "用户帐号");
             json.put("text", "用户姓名");
             json.put("showtextsuffix", "显示后缀");
             json.put("sourceId", "用户帐号");
             json.put("name", "用户姓名");
             json.put("type", "user");
             json.put("USERNAMEALIAS", "用户全名");
             json.put("deptId", "所属部门ID");  移动端使用
            json.put("deptName", "所属部门名称");  移动端使用
            json.put("deptFullName", "所属部门全路径");  移动端使用
             //以下内容用来回填数据,根据sourceField值确定返回哪些数据
             if (!UtilString.isEmpty(sourceField)) {
                 JSONObject temp = new JSONObject();
                 temp.put("COMPANYNAME", "单位名称");
                 temp.put("COMPANYID", "单位id");
                 temp.put("COMPANYNO", "单位编码");
                 temp.put("EMAIL", "邮箱");
                 temp.put("USERNAME", "用户姓名");
                 temp.put("DEPTID", "部门id");
                 temp.put("DEPTFULLPATHID", "部门id全路径");
                 temp.put("DEPTFULLPATHNAME", "部门名称全路径");
                 temp.put("DEPTFULLPATHNAMEWITHCOMPNAY", "部门全路径名称(含单位)");
                 temp.put("DEPTNAME", "部门名称");
                 temp.put("DEPTNO", "部门编码");
                 temp.put("ROLEID", "角色id");
                 temp.put("UID", "用户帐号");
                 temp.put("USERID", "用户ID");
                 temp.put("USERNO", "员工代码");
                 temp.put("USERNAME", "用户姓名");
                 temp.put("USERNAMEALIAS", "用户全名");
                 temp.put("EMAIL", "邮箱");
                 temp.put("OFFICETEL", "电话");
                 temp.put("MOBILE", "手机");
                 temp.put("OFFICEFAX", "传真");
                 temp.put("POSITIONNAME", "职位名称");
                 temp.put("POSITIONNO", "职位编码");
                 temp.put("POSITIONLAYER", "职位等级");
                 temp.put("EXT1", "扩展标记1");
                 temp.put("EXT2", "扩展标记2");
                 temp.put("EXT3", "扩展标记3");
                 temp.put("EXT4", "扩展标记4");
                 temp.put("EXT5", "扩展标记5");
                 String[] sourceFields = sourceField.split(",");
                 for (String field : sourceFields) {
                     json.put(field, temp.getString(field));
                 }
                 array.add(json);
             }*/
             //返回部门JSON
             /*JSONObject json = new JSONObject();
             json.put("id", "部门id");
             json.put("text", "部门名称");
             json.put("showtextsuffix", "显示后缀");
             json.put("sourceId", "部门id");
             json.put("id", "部门id");
             json.put("name", "部门名称");
             json.put("type", "dept");
             json.put("fullPathName", "部门全路径");
             //以下内容用来回填数据,根据sourceField值确定返回哪些数据
             if (!UtilString.isEmpty(sourceField)) {
                 JSONObject temp = new JSONObject();
                 temp.put("COMPANYNAME", "公司名称");
                 temp.put("COMPANYID", "公司id");
                 temp.put("COMPANYNO", "公司编码");
                 temp.put("DEPTNAME", "部门名称");
                 temp.put("DEPTID", "部门id");
                 temp.put("DEPTFULLPATHID", "部门id全路径");
                 temp.put("DEPTFULLPATHNAME", "部门名称全路径");
                 temp.put("DEPTNO", "部门代码");
                 temp.put("DEPTZONE", "区域划分");
                 temp.put("DEPTTYPE", "部门类型");
                 temp.put("EXT1", "扩展标记1");
                 temp.put("EXT2", "扩展标记2");
                 temp.put("EXT3", "扩展标记3");
                 temp.put("EXT4", "扩展标记4");
                 temp.put("EXT5", "扩展标记5");
                 String[] sourceFields = sourceField.split(",");
                 for (String field : sourceFields) {
                     json.put(field, temp.getString(field));
                 }
             }*/
             //返回团队json
             /*JSONObject json = new JSONObject();
             json.put("id", "团队ID");
             json.put("text","团队名称");
             json.put("showtextsuffix", "显示后缀");
             json.put("sourceId", "团队ID");
             json.put("id", "团队ID");
             json.put("name", "团队名称");
             json.put("type", "team");
             json.put("TEAMID", "团队ID");
             json.put("TEAMNAME", "团队名称");*/
             result.put("totalPageNum", listSize);
             result.put("list", array);
             return result;
         }
         /**
          * 地址簿显示值(主要是返回值中有uid 或deptid 或 teamID 显示值需要具体信息用来显示)
          *
          * @param appId 应用id
          * @param filter 地址簿配置
          * @param context 用户上下文
          * @param value 用户账号或部门id
          * @return 用户或部门信息
          */
         public JSONObject addressDisplayValue(String appId, JSONObject filter, UserContext context, String value) {
             JSONObject addressSetting = filter.getJSONObject("addressSetting");
             //叶子节点
             String leafType = addressSetting.getString("leafType");
             //地址簿回填字段
             String[] sourceFields = filter.getString("sourceField").split(",");
             boolean hasUID = false; //是否是员工账号
             boolean hasDeptId = false; //是否是部门id
             boolean hasTeamId = false; //是否是团队id
             JSONObject json = new JSONObject();
             for (int i = 0; i < sourceFields.length; i++) {
                 if (leafType.equals("user") && ("UID".equals(sourceFields[i]) || "USERNAMEALIAS".equals(sourceFields[i]))) {
                     hasUID = true;
                 } else if (leafType.equals("dept") && "DEPTID".equals(sourceFields[i])) {
                     hasDeptId = true;
                 } else if ("TEAMID".equals(sourceFields[i])) {
                     hasTeamId = true;
                 }
             }
             if (hasUID) {//value 是 uid
                 json.put("sourceId", "xinren1");
                 json.put("id", "xinren1");
                 json.put("name", "新人1");
                 json.put("type", "user");
                 json.put("USERNAMEALIAS", "新人1");
                 //以下内容用来回填数据,根据sourceField值确定返回哪些数据
                 if (!UtilString.isEmpty(filter.getString("sourceField"))) {
                     JSONObject temp = new JSONObject();
                     temp.put("COMPANYNAME", "单位名称");
                     temp.put("COMPANYID", "单位id");
                     temp.put("COMPANYNO", "单位编码");
                     temp.put("EMAIL", "邮箱");
                     temp.put("DEPTID", "部门id");
                     temp.put("DEPTFULLPATHID", "部门id全路径");
                     temp.put("DEPTFULLPATHNAME", "部门名称全路径");
                     temp.put("DEPTFULLPATHNAMEWITHCOMPNAY", "部门全路径名称(含单位)");
                     temp.put("DEPTNAME", "部门名称");
                     temp.put("DEPTNO", "部门编码");
                     temp.put("ROLEID", "角色id");
                     temp.put("UID", "xinren1");
                     temp.put("USERID", "55555");
                     temp.put("USERNO", "员工代码");
                     temp.put("USERNAME", "新人1");
                     temp.put("USERNAMEALIAS", "新人1");
                     temp.put("EMAIL", "邮箱");
                     temp.put("OFFICETEL", "电话");
                     temp.put("MOBILE", "手机");
                     temp.put("OFFICEFAX", "传真");
                     temp.put("POSITIONNAME", "职位名称");
                     temp.put("POSITIONNO", "职位编码");
                     temp.put("POSITIONLAYER", "职位等级");
                     temp.put("EXT1", "扩展标记1");
                     temp.put("EXT2", "扩展标记2");
                     temp.put("EXT3", "扩展标记3");
                     temp.put("EXT4", "扩展标记4");
                     temp.put("EXT5", "扩展标记5");
                     for (String field : sourceFields) {
                         json.put(field, temp.getString(field));
                     }
                 }
             } else if (hasDeptId) {
                 DepartmentModel dept = DepartmentCache.getModel(value);
                 if (dept != null) {
                     json.put("id", dept.getId());
                     json.put("name", dept.getPathNameI18NOfCache());
                 } else {
                     json.put("id", value);
                     json.put("name", value);
                 }
             }
             //      返回用户信息
             //      JSONObject json = new JSONObject();
             //      json.put("sourceId", "用户帐号");
             //        json.put("id",  "用户帐号");
             //        json.put("name", "用户姓名");
             //        json.put("type", "user");
             //        json.put("USERNAMEALIAS", "用户全名");
             //        //以下内容用来回填数据,根据sourceField值确定返回哪些数据
             //        if (!UtilString.isEmpty(sourceField)) {
             //            JSONObject temp = new JSONObject();
             //            temp.put("COMPANYNAME", "单位名称");
             //            temp.put("COMPANYID", "单位id");
             //            temp.put("COMPANYNO", "单位编码");
             //            temp.put("EMAIL", "邮箱");
             //            temp.put("USERNAME", "用户姓名");
             //            temp.put("DEPTID", "部门id");
             //            temp.put("DEPTFULLPATHID", "部门id全路径");
             //            temp.put("DEPTFULLPATHNAME", "部门名称全路径");
             //            temp.put("DEPTFULLPATHNAMEWITHCOMPNAY", "部门全路径名称(含单位)");
             //            temp.put("DEPTNAME", "部门名称");
             //            temp.put("DEPTNO", "部门编码");
             //            temp.put("ROLEID", "角色id");
             //            temp.put("UID", "用户帐号");
             //            temp.put("USERID", "用户ID");
             //            temp.put("USERNO", "员工代码");
             //            temp.put("USERNAME", "用户姓名");
             //            temp.put("USERNAMEALIAS", "用户全名");
             //            temp.put("EMAIL", "邮箱");
             //            temp.put("OFFICETEL", "电话");
             //            temp.put("MOBILE", "手机");
             //            temp.put("OFFICEFAX", "传真");
             //            temp.put("POSITIONNAME", "职位名称");
             //            temp.put("POSITIONNO", "职位编码");
             //            temp.put("POSITIONLAYER", "职位等级");
             //            temp.put("EXT1", "扩展标记1");
             //            temp.put("EXT2", "扩展标记2");
             //            temp.put("EXT3", "扩展标记3");
             //            temp.put("EXT4", "扩展标记4");
             //            temp.put("EXT5", "扩展标记5");
             //            String[] sourceFields = sourceField.split(",");
             //            for (String field : sourceFields) {
             //                json.put(field, temp.getString(field));
             //            }
             //        }
             //返回部门信息
             /*JSONObject json = new JSONObject();
             json.put("sourceId", "部门id");
             json.put("id", "部门id");
             json.put("name", "部门名称");
             json.put("type", "dept");
             json.put("fullPathName", "部门全路径");
             //以下内容用来回填数据,根据sourceField值确定返回哪些数据
             if (!UtilString.isEmpty(sourceField)) {
                 JSONObject temp = new JSONObject();
                 temp.put("COMPANYNAME", "公司名称");
                 temp.put("COMPANYID", "公司id");
                 temp.put("COMPANYNO", "公司编码");
                 temp.put("DEPTNAME", "部门名称");
                 temp.put("DEPTID", "部门id");
                 temp.put("DEPTFULLPATHID", "部门id全路径");
                 temp.put("DEPTFULLPATHNAME", "部门名称全路径");
                 temp.put("DEPTNO", "部门代码");
                 temp.put("DEPTZONE", "区域划分");
                 temp.put("DEPTTYPE", "部门类型");
                 temp.put("EXT1", "扩展标记1");
                 temp.put("EXT2", "扩展标记2");
                 temp.put("EXT3", "扩展标记3");
                 temp.put("EXT4", "扩展标记4");
                 temp.put("EXT5", "扩展标记5");
                 String[] sourceFields = sourceField.split(",");
                 for (String field : sourceFields) {
                     json.put(field, temp.getString(field));
                 }
             }*/
             return json;
         }
         /**
         * @param appId 应用id
         * @param filter 地址簿配置
         * @param context 用户上下文
         * @param nodeId 当前节点id
         * @param nodeType 当前节点类型
         * @return
         */
        public JSONObject getParentTreeNode(String appId, JSONObject filter, UserContext context, String nodeId, String nodeType) {
            JSONObject result = null;
            if ("company".equals(nodeType)) {
            } else if ("dept".equals(nodeType)) {
                if ("dept1".equals(nodeId) || "dept2".equals(nodeId)) {//上一级是公司
                    result = new JSONObject();
                    result.put("id", "comppany1");
                    result.put("name", "公司1");
                    result.put("type", "company");
                    result.put("fullPathName", "/公司1");
                } else if ("dept3".equals(nodeId)) {//上一级是部门
                    result = new JSONObject();
                    result.put("id", "dept1");
                    result.put("name", "研发");
                    result.put("type", "dept");
                    result.put("fullPathName", "/研发");
                }
            }
            return result;
        }
     }
部门地址簿
  
分类方式
全部部门组织机构定义的全部部门;操作者所在部门及兼任部门操作者所在部门及兼任部门;操作者所在虚拟部门操作者所在虚拟部门
取值字段 指定取值字段,多个值用","隔开
回填字段 指定回填字段,多个值用","隔开,【取值字段】和【回填字段】个数和次序必须匹配
选择模式 单选或 多选
默认组织树是部门显示在上,人员显示在下,系统管理员可以修改%AWS_HOME%/bin/conf/aws-portal.xml文件中people-list-priority属性值,修改部门与人员的显示顺序
AWS Portal门户为地址簿提供了一系列运行时参数设置
3.AWS平台进行模式为SaaS模式时,地址薄所有场景仅允许查看显示自己主职身份所在单位的组织信息,且优先级高于该组件相关属性的配置
部分扩展属性不支持移动端
- 不显示注消状态的单位、部门、人员


