attachment(非attachmentSimple)相关的附件组件上传会在SA_DocNode中产生记录,记录中存的有提交者相关的信息如:提交者FID(sCreatorFID)
因此在删除的时候可以获取这个关系的值跟当前人的fID做比较控制删除

附件组件中的文件在删除的时候会触发组件的onDelete事件,此事件中可以获取到删除文件的docID
可以通过获取到的docID到SA_DocNode中(sID的值)查找对应记录的sCreatorFID
本例定义action查找sCreatorFID并返回,action中定义一个参数docID
如下:
action的定义

1
2
3
4
5
<action name="getDocCreatorAction" global="false"
        procedure="getDocCreatorProcedure">
        <label language="zh_CN">获取附件上传者</label>
        <public type="String" name="docID"></public>
    </action>

Procedure的定义

1
2
3
<procedure name="getDocCreatorProcedure" code-model="/appdemo/test/logic/code" code="Test.getDocCreator">
  <parameter name="docID" type="String"/>
</procedure>

对应的java代码的定义

1
2
3
4
5
6
7
8
9
10
public static String getDocCreator(String docID){
    String ksql = "select doc.sCreatorFID from SA_DocNode doc where doc ='"+docID+"'";
    Table table = KSQL.select(ksql, null, "/system/data", null);
    String sCreatorFID = "";
    if(table.size()>0){
        Row r = table.iterator().next();
        sCreatorFID = r.getString("sCreatorFID");
    }
    return sCreatorFID;
}

在组件的onDelete事件中获取当前人的fID,并调用action获取提交者fID进行比较控制删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Model.prototype.attachmentPC7Delete = function(event){
    var docID = event.data.docID;//获取删除文件的docID
    var personFID = this.getContext().getCurrentPersonMemberFID();//获取当前人员成员的fID
    if(event.source.$activeDoc.get()){
    //调用action传入docID的值获取返回值
        var actiomParam = new biz.Request.ActionParam();
        actiomParam.setString('docID', docID);
        biz.Request.sendBizRequest({
            "context" : this.getContext(),
            "action" : "getDocCreatorAction",
            "parameters" : actiomParam,
            "callback" : function(callbackData) {
                if (callbackData.state) {
                   if(personFID !== callbackData.response){//当前人员成员的fID与action返回的提交者fID进行比较
                       alert("不允许删除他人上传的文件");
                       event.cancel = true;//两个fID的值不等时中断删除操作
                   }
                } else
                    alert("执行失败");
            }
        });    
    }
};