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");
}
}
}
}