EAS BOS 實現組織單元F7以組織樹形式顯示

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章