动态表单回填附件功能

1.动态表单增加元素类型:附件面板

2.代码处理

2.1 动态表单代码处理
public class XXXEdit extends AbstractFormPlugin implements UploadListener, AttachmentMarkListener {
	//父单据标识
	private static String keyFormParent;
	//父单据内码
	private static Object pkIdParent;
	//父单据附件标识
	private static String keyAttachParent;
	//应用ID
	private static String appId;
	//当前页面附件标识
	private static final String KEY_ATTACH = "attachmentpanelap";

	//操作附件计数器
	private static int count = 0;
	//记录添加附件数据
	private static List<Map<String, Object>> addList = new ArrayList<>();
	//按钮状态
	private static boolean status = false;
	
	private static Map<String, Object> atts = new HashMap<>();
	
	private static Object[] attachs =null;
	@Override
	public void afterCreateNewData(EventObject e) {
		super.afterCreateNewData(e);
		FormShowParameter showParameter = this.getView().getFormShowParameter();
		Map<String, Object> cusMap = showParameter.getCustomParams();
		if (null != cusMap && cusMap.size() > 0) {
			if(cusMap.containsKey("keyFormParent")) {
				keyFormParent = (String) cusMap.get("keyFormParent");
			}
			
			if(cusMap.containsKey("pkIdParent")) {
				pkIdParent = cusMap.get("pkIdParent");
			}
			
			if(cusMap.containsKey("keyAttachParent")) {
				keyAttachParent = (String)cusMap.get("keyAttachParent");
			}
			
			if(cusMap.containsKey("appId")) {
				appId = (String)cusMap.get("appId");
			}
		}
	}
	// 监听确定按钮
	@Override
	public void registerListener(EventObject e) {
		super.registerListener(e);
		AttachmentPanel attachmentPanel = (AttachmentPanel)this.getView().getControl(KEY_ATTACH);
		//注册监听
		attachmentPanel.addUploadListener(this);
	}
	@Override
	public void click(EventObject evt) {
		super.click(evt);
		Control source = (Control) evt.getSource();
		String key = source.getKey();
		IFormView view = this.getView();
		if ("btnok".equals(key)) {
			Map<String, Object> values = new HashMap<String, Object>();
			DynamicObject dataEntity = this.getModel().getDataEntity(true);
			FormShowParameter showParameter = this.getView().getFormShowParameter();
			AttachmentPanel attachmentPanel = (AttachmentPanel)this.getView().getControl(KEY_ATTACH);
			        //保存附件数据    参数内容(父单据标识、内码、应用编码、附件数据)
					if (atts!=null&&atts.size()>0) {
						AttachmentServiceHelper.saveTempAttachments(keyFormParent, pkIdParent, appId, atts);
				        if (attachs[0]!=null) {
				        	addList.add((Map<String, Object>)attachs[0]);
					        count++;
							//关闭页面时  计数器归零
							count = 0;
							status = true;
							addList.clear();
						}
					}
		}
	}
	/**
	 * 上传附件	 
	 */
    @SuppressWarnings("unchecked")
	@Override
    public void upload(UploadEvent evt) {
    	// TODO Auto-generated method stub
    	UploadListener.super.upload(evt);
    	//获取附件数据
        attachs = evt.getUrls();
        List<Map<String, Object>> list = new ArrayList<>(attachs.length);
//        Map<String, Object> atts = new HashMap<>();
		for (Object attach : attachs) {
			//将每一条附件对象转换成map封装到list中
			Map<String, Object> map = (Map<String, Object>) attach;
			list.add(map);
		}
        atts.put(keyAttachParent, list);
    }
    
    /**
	 * 删除附件	 
	 */
    @Override
    public void remove(UploadEvent evt) {
    	// TODO Auto-generated method stub
    	UploadListener.super.remove(evt);
        Object[] attachs = evt.getUrls();
        @SuppressWarnings("unchecked")
		Map<String, Object> map = (Map<String, Object>)attachs[0];
        AttachmentServiceHelper.remove(keyFormParent, pkIdParent, map.get("uid"));
        count--;
    }
}

2.2 对应单据代码处理

@Override
    public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
    String itemKey = afterDoOperationEventArgs.getOperateKey();
    if (!StringUtils.isEmpty(itemKey)) {
    	IDataModel model = this.getModel();
			IFormView view = this.getView();
			FormShowParameter fsp = new FormShowParameter();
			fsp.setStatus(OperationStatus.ADDNEW);
			fsp.getOpenStyle().setShowType(ShowType.Modal);
			if("按钮标识".equals(itemKey)) {
				
				Map<String, Object> entryInfo = this.getXXXInfo();
				fsp.setCustomParams(entryInfo);
                CloseCallBack callBack = new CloseCallBack(this, "按钮标识");
                fsp.setCloseCallBack(callBack);
                fsp.setFormId("动态表单标识");
                view.showForm(fsp);
			}
    }
}
private Map<String, Object> getXXXInfo() {
	Map<String, Object> values = new HashMap<String, Object>();
    DynamicObject dataEntity = this.getModel().getDataEntity(true);
    values.put("keyFormParent", "单据标识");
    if (!dataEntity.getPkValue().equals(0L)) {
           values.put("pkIdParent", (long)dataEntity.getPkValue());
	}
   	AppInfo app= AppMetadataCache.getAppInfo("应用编码");
	// 获取应用的主键
	String appId = app.getId();
    values.put("keyAttachParent", "attachmentpanel");
    values.put("appId", appId);
    return values;
}

@Override
	public void closedCallBack(ClosedCallBackEvent closedCallBackEvent) {
	String actionId = closedCallBackEvent.getActionId();
	Object returnData = closedCallBackEvent.getReturnData();
	if (StringUtils.isNotEmpty(actionId)) {
		if ("按钮标识".equals(actionId)) {
                if (returnData instanceof Map && returnData != null) {
                	Map<String, Object> values = (Map<String, Object>) returnData;
                    this.setXXXInfo(values,true);
                    //刷新附件
                    this.getView().updateView("attachmentpanel");
                }
            }
	}
}
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值