package com.vci.client.uif.actions.client; import java.util.HashMap; import java.util.Map; import com.vci.client.bof.ClientBusinessObject; import com.vci.client.bof.ClientBusinessObjectOperation; import com.vci.client.bof.ClientLinkObject; import com.vci.client.portal.utility.PLDefination; import com.vci.client.portal.utility.UITools; import com.vci.client.ui.swing.components.VCIJDialog.DialogResult; import com.vci.client.uif.engine.client.objopt.ObjectAddEditDialog; import com.vci.client.uif.engine.common.DefaultTableNode; import com.vci.client.uif.engine.common.IDataNode; import com.vci.corba.portal.data.PortalVI; import com.vci.mw.ClientContextVariable; /** * link类型修改按钮事件 * 参数信息: * oid(link对象的oid) * linktypename * t_oid * t_btwname * context * @author VCI-STGK006 * */ public class EditLinkAction extends AbstractBusionessOperationAction { /** * 业务对象操作方法 */ private ClientBusinessObjectOperation boOperation = new ClientBusinessObjectOperation(); /** * 将操作的业务对象作为一个全局变量存储 */ private Map dataMap = null; /** * 判断form的类型 * 不同的form类型得到属性的key是不同的 * 0:业务类型,1:链接类型 */ private int operationType = 0; /** * 按钮参数 */ private Map paramsMap = null; public EditLinkAction(){ super(); } @Override public String getKey() { return EDITLINK; } @Override public boolean checkHasRight(){ // 按LBO进行数据权限检查 setDataRightCheckType(RightCheckConstants.RIGHT_CHECK_TYPE_L); return super.checkHasRight(); } @Override public boolean doPost() { //显示创建窗口 try{ //获得按钮参数 paramsMap = getButtonParams(); //得到打开窗口的上下文信息 String type = paramsMap.get("type"); String context = paramsMap.get("context"); if(type == null || type.equals("") || context == null || context.equals("")){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.syserror.parmerror", ""); return false; } //获得按钮打开窗口的PLDefination PLDefination plDef = getDefination(type, context); if(plDef == null){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.syserror.configerror.notformname", type, context); return false; } String formName = plDef.getTemplateId(); if(formName == null || formName.equals("")){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.syserror.configerror.notformname", type, context); return false; } //判断创建表单类型 PortalVI sheet = UITools.getService().getPortalVIBySymbol(formName); if(sheet != null){ this.operationType = sheet.typeFlag; } // 得到业务对象、设置需要显示的属性值 dataMap = getBusinessObject(); if(dataMap == null){ return false; } //创建浏览窗口 ObjectAddEditDialog oad = new ObjectAddEditDialog(type, context, plDef, paramsMap, ObjectAddEditDialog.OperateType.EDIT, null, this); oad.setTypeFlag(operationType); oad.setSourceDataNode((IDataNode)getDataModel().getSelectObjects()[0]); // add by xchao 2015.08.12 // 设置新打开的上下文模块的inputdata // 设置值类型:sourceData、inputData、selectData oad = super.setTargetUILayoutPanelInputData(oad); // add by xchao 2015.08.12 end oad.init(); oad.setSize(600, 400); oad.setLocationRelativeTo(ClientContextVariable.getFrame()); //设置属性的值 setEditDialogValue(oad, dataMap); oad.setVisible(true); if(oad.getDialogResult() == DialogResult.OK){ return true; } else { return false; } } catch(Throwable e){ UIFUtils.showErrorMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.editloerror", e); return false; } } /** * 设置窗口属性值 * 需要在创建编辑窗口初始化完成后执行设置操作 * @return */ private void setEditDialogValue(ObjectAddEditDialog oad, Map dataMap){ oad.getOaep().setValueToUIControl((ClientLinkObject)dataMap.get("lo"), (ClientBusinessObject)dataMap.get("to")); } /** * 得到用户选择的业务对象数据 * @return */ private Map getBusinessObject(){ //获得业务对象数据 Object[] objs = getDataModel().getSelectObjects(); if(objs == null || objs.length < 1){ return null; } //查询结果 Map resultMap = new HashMap(); DefaultTableNode dtn = (DefaultTableNode) objs[0]; try { //判断主对象类型,修改link是主对象类型一定是link对象 if (dtn.getMaterObject() instanceof ClientLinkObject){ ClientLinkObject lo = (ClientLinkObject) dtn.getMaterObject(); String foid = lo.getFromOid(); String fbtmName = lo.getFromBTMName(); String toid = lo.getToOid(); String tbtmName = lo.getToBTMName(); //如果操作所需参数不存在则直接停止操作 if(foid == null || foid.equals("") ||fbtmName == null || fbtmName.equals("") || toid == null || toid.equals("") ||tbtmName == null || tbtmName.equals("")){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.syserror.parmerror.bo"); return null; } //下载from对象 //XXX 现在修改为通过查询模板设置修改窗口的所有值,所以此处对业务对象的重新加载就没有必要了 ClientBusinessObject fcbo = boOperation.readBusinessObjectById(foid, fbtmName); //对象不存在或者已经被删除 if(fcbo.getBusinessObject().oid == null || fcbo.getBusinessObject().oid.equals("")){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.notexistmsg", "父对象"); return null; } resultMap.put("from", fcbo); //下载to对象 ClientBusinessObject tcbo = boOperation.readBusinessObjectById(toid, tbtmName); //对象不存在或者已经被删除 if(tcbo.getBusinessObject().oid == null || tcbo.getBusinessObject().oid.equals("")){ UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.notexistmsg", "子对象"); return null; } resultMap.put("to", tcbo); //添加link resultMap.put("lo", lo); } else { //主对象为其他类型的处理 UIFUtils.showMessage(ClientContextVariable.getFrame(), "uifmodel.plm.uif.actions.syserror.btnconferror"); return null; } } catch (Exception e){ UIFUtils.showErrorMessage(ClientContextVariable.getFrame(),e); return null; } return resultMap; } }