附件组件的删除默认是逻辑删除只是把附件组件关联的业务字段中的json信息删除了,SA_docNode中的数据和服务器上的文件都没有删除
如果要同时把SA_docNode中的数据和服务器上的文件都删除,需要实现物理删除
attachmentPC组件提供了源码可以直接修改组件源码实现,或者在.w功能页面中实现
attachement没有提供源码只能在.w功能页面中实现
要删除服务器上的文件需要调用action操作
平台默认的/SA/doc/logic/action下定义的有此操作的action,因此需要在业务功能的BIZ层process文件同级的model.config.xml中引用/SA/doc/logic/action
.w功能页面中实现参考如下:
1.在model的构造函数中定义一个实例变量用来存储删除的附件的docID
var Model = function() { this.callParent(); this.docIDs = []; };
2.在附件组件的onDelete事件中获取删除的附件的docID存储到实例变量中
Model.prototype.attachmentPC5Delete = function(event) { //保存到文档服务器的文件删除时记录删除的docID var fileID = event.source.$activeDoc.get().fileID.get(); if(fileID){ this.docIDs.push(event.data.docID); } };
3.在附件组件关联的业务数据data的onBeforeSave事件中调用action传docID进行删除
Model.prototype.mainDataBeforeSave = function(event) { // 物理删除 if(this.docIDs.length >0 ){ for(var i = 0;i<this.docIDs.length;i++){ var params = new biz.Request.ActionParam(); params.setParam("docID", this.docIDs[i]);//获取删除附件的docID做参数传给aciton params.setParam("versionID", ""); params.setParam("isLogicDelete", false);// 设置物理删除还是逻辑删除,true是逻辑删除(不会删除文档服务器目录中存的文件) // 调用deleteDocByIDAction执行删除 biz.Request.sendBizRequest({ contentType : "application/json", dataType : "application/json", action : "deleteDocByIDAction", context : this.getContext(), parameters : params }); } } };
attachmentPC组件源码文件/UI2/system/components/justep/attachment/attachmentPC.js中实现如下:
1.define下定义变量存储删除的附件ID和状态控制
define(function(require) { var $ = require("jquery"), Component = require("$UI/system/lib/base/component"), BindComponent = require("$UI/system/lib/base/bindComponent"), BindMapping = require("$UI/system/lib/bind/bind.mapping"), DocUtils = require('$UI/system/components/justep/docCommon/docUtil'), DocDialog = require('$UI/system/components/justep/docCommon/docDialog'), justep = require('$UI/system/lib/justep'), biz = require('$UI/system/lib/biz'), Uploader = require('$UI/system/components/justep/uploader/uploader'), url = require.normalizeName("./attachmentPC"); deleteDocIDs = []; flag = true;
2.修改deleteDoc方法中增加删除的附件ID和状态的存储
deleteDoc : function($object) { var docName = $object.docName.get(); var docID = $object.docID.get(); var eventData = { 'cancel' : false, 'data' : {'docID' : docID, 'docName' : docName}, 'source' : this }; this.fireEvent("onDelete", eventData); if (eventData.cancel){ return; } this.setValue("delete",docID); if($object.fileID.get()){//保存到文档服务器的文件删除时记录删除的docID deleteDocIDs.push(docID); } //设置删除状态 if(!flag){ flag = true; } var items = this.changeLog.items; for ( var item in items) { if (items[item].doc_id == docID) { this.changeLog.items.splice(item, 1); } } },
3.修改save方法在commit后调用action删除
save : function() { var data = this.bindData; var changedIDs = this._getChangedIDList(); for ( var j = 0; j < changedIDs.length; j++) { var billID = changedIDs[j]; var attachValue = data.getValue(this.relation, data.getRowByID(billID)); if (attachValue) { DocUtils.InnerUtils.addCreateVersionLog(this.changeLog, JSON .parse(attachValue), billID); } } this.commit(); if(flag){ //有附件删除的时候才执行 if(deleteDocIDs.length>0){ for(var i = 0;i<deleteDocIDs.length;i++){ var params = new biz.Request.ActionParam(); params.setParam("docID", deleteDocIDs[i]);//获取删除附件的docID做参数传给aciton params.setParam("versionID", ""); params.setParam("isLogicDelete", false);// 设置物理删除还是逻辑删除,true是逻辑删除(不会删除文档服务器目录中存的文件) // 调用deleteDocByIDAction执行删除 var context = this.getModel().getContext(); biz.Request.sendBizRequest({ contentType : "application/json", dataType : "application/json", action : "deleteDocByIDAction", context : context, parameters : params }); } flag = false;//重置状态 } } },
评一波