一、点击F7后的效果:支持多选
二、代码实现
1.可以写一个专门初始化组织单元F7的工具类
public class OrgF7InitUtils {
private static final String ADMIN = "com.kingdee.eas.basedata.org.app.AdminItemQuery";
private static final String COSTCENTER = "com.kingdee.eas.basedata.org.app.CostCenterOrgUnitQuery";
private static final String SALE = "com.kingdee.eas.basedata.org.app.SaleOrgUnitQuery";
private static final String COMPANY = "com.kingdee.eas.basedata.org.app.CompanyOrgUnitQuery";
private static final String CU = "com.kingdee.eas.basedata.framework.app.CtrlUnitQuery";
private static final String PROJECTORG = "com.kingdee.eas.basedata.org.app.TransportItemQuery";
private static final String PROFIT = "com.kingdee.eas.basedata.org.app.ProfitCenterItemQuery";
/**
* @param bizPromptBox f7控件
* @param ui 当前页面 在ui界面调用传this即可
* @param cuId 控制单元ID 可以传null
* @param rootUnitId 根节点ID 可以传null
* @param type f7的组织单元类型 (行政/销售/财务等组织单元)参数类型为枚举,传null时默认为行政组织单元,com.kingdee.eas.basedata.org.OrgType
* @param isPermission 是否用户组织范围内的组织才能选择
* @param isMultiSelect 是否支持多选
* @param displayFormat f7的显示格式 传null时默认显示组织名称
*/
public static void initOrgF7(KDBizPromptBox bizPromptBox,
CoreUIObject ui, String cuId, String rootUnitId, OrgType type, boolean isPermission, boolean isMultiSelect, String displayFormat){
bizPromptBox.setEditable(true);
bizPromptBox.setEditFormat("$number$");
bizPromptBox.setDisplayFormat("$name$");
bizPromptBox.setCommitFormat("$number$;$name$");
//设置显示格式
if(!StringUtils.isEmpty(displayFormat)){
bizPromptBox.setDisplayFormat(displayFormat);
}
//获取Query
bizPromptBox.setQueryInfo(getQueryPath(type));
EntityViewInfo view = new EntityViewInfo();
SorterItemCollection sorc = view.getSorter();
SorterItemInfo sort = new SorterItemInfo("number");
sorc.add(sort);
FilterInfo filter = new FilterInfo();
FilterItemCollection fic = filter.getFilterItems();
fic.add(new FilterItemInfo("isFreeze", new Integer(0)));
fic.add(new FilterItemInfo("isSealUp", new Integer(0)));
fic.add(new FilterItemInfo("isBizUnit", new Integer(1)));
//控制单元过滤
if (cuId != null) {
fic.add(new FilterItemInfo("CU.id", cuId));
}
//获取页面UI
NewOrgViewF7PromptDialog f7 = getDisplayUI(type, ui);
// 是否用户组织范围内的组织才能选择
if (isPermission) {
try {
Set authorizedOrgs = new HashSet();
Map orgs = PermissionFactory.getRemoteInstance()
.getAuthorizedOrgs(
new ObjectUuidPK(SysContext.getSysContext()
.getCurrentUserInfo().getId()), type, null, null, null);
if (orgs != null) {
Set orgSet = orgs.keySet();
Iterator it = orgSet.iterator();
while (it.hasNext()) {
authorizedOrgs.add(it.next());
}
}
FilterInfo filterID = new FilterInfo();
filterID.getFilterItems().add(
new FilterItemInfo("id", authorizedOrgs,
CompareType.INCLUDE));
filter.mergeFilter(filterID, "and");
} catch (Exception e) {
e.printStackTrace();
}
}
view.setFilter(filter);
bizPromptBox.setEntityViewInfo(view);
//是否支持多选
if(isMultiSelect){
f7.setMultiSelect(true);
}
//设置根节点
if (rootUnitId != null) {
f7.setRootUnitID(rootUnitId);
} else {
f7.showCheckBoxOfShowingAllOUs();
f7.setRootUnitID(cuId);
}
if (cuId != null) {
f7.setCurrentCUID(cuId);
}
bizPromptBox.setSelector(f7);
SelectorItemCollection sic = bizPromptBox.getSelectorCollection();
if (sic == null) {
sic = new SelectorItemCollection();
sic.add(new SelectorItemInfo("number"));
sic.add(new SelectorItemInfo("name"));
bizPromptBox.setSelectorCollection(sic);
}
sic.add(new SelectorItemInfo("isLeaf"));
sic.add(new SelectorItemInfo("displayName"));
}
public static void initOrgF7(KDBizPromptBox bizPromptBox,
CoreUIObject ui, String cuId, String rootUnitId){
initOrgF7(bizPromptBox, ui, cuId, rootUnitId, OrgType.Admin);
}
public static void initOrgF7(KDBizPromptBox bizPromptBox,
CoreUIObject ui, String cuId, String rootUnitId, OrgType type){
initOrgF7(bizPromptBox, ui, cuId, rootUnitId, type, false);
}
public static void initOrgF7(KDBizPromptBox bizPromptBox,
CoreUIObject ui, String cuId, String rootUnitId, OrgType type, boolean isPermission){
initOrgF7(bizPromptBox, ui, cuId, rootUnitId, type, isPermission, false);
}
public static void initOrgF7(KDBizPromptBox bizPromptBox,
CoreUIObject ui, String cuId, String rootUnitId, OrgType type, boolean isPermission, boolean isMultiSelect){
initOrgF7(bizPromptBox, ui, cuId, rootUnitId, type, isPermission, isMultiSelect, "$name$");
}
private static String getQueryPath(OrgType type){
if(type == null) return ADMIN;
int val = type.getValue();
switch(val){
case -1: return ADMIN;
case 0: return ADMIN;
case 1: return COMPANY;
case 2: return SALE;
case 5: return COSTCENTER;
case 6: return PROFIT;
case 10: return CU;
case 24: return PROJECTORG;
default: return ADMIN;
}
}
private static OrgF7PromptDialog getDisplayUI(OrgType type, CoreUIObject ui){
if(type == null) return new NewAdminF7(ui);
int val = type.getValue();
switch(val){
case -1: return new NewAdminF7(ui);
case 0: return new NewAdminF7(ui);
case 1: return new NewCompanyF7(ui);
case 2: return new NewSaleF7(ui);
case 5: return new NewCostCenterF7(ui);
case 6: return new NewProfitCenterF7(ui);
case 10: return new NewCtrlF7(ui);
case 24: return new NewTransportF7(ui);
default: return new NewAdminF7(ui);
}
}
}
2.调用示例
OrgF7InitUtils.initOrgF7(prmtadminOrgUnit, this, null, null, OrgType.Admin);
//获取当前控制单元ID的方法,仅限前台使用
String cuId = SysContext.getSysContext().getCurrentCtrlUnit().getId().toString();
OrgF7InitUtils.initOrgF7(prmtadminOrgUnit, this, cuId, null, OrgType.Admin);