一、點擊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);