阅读:3057 回复:6
liam
1

帖子

99

跟帖

1976

积分

高级榴莲
高级榴莲

[已解决]H3想通过数据库删除附件,是否有伪删除方法?

楼主#
更多 发布于:2017-03-01 11:13
h3通过数据库删除附件,是否有伪删除方法?
岩竹玉雨
20

帖子

840

跟帖

205241

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
1楼#
发布于:2017-03-03 11:08
帖内置顶  –  H3BPM  –  2017-03-06 17:07
 因代码都已经封装在dll里了,所以我们只能通过执行原保存方法之前干预
 昨天晚上代码就写好了,但是没有测试。今天测了一下,发现现实与思路有些差别。
 
 实测后发现SaveDataFields会把附件表的附件数据删掉。
 所以我们还是自己新建一个备份附件表
 在SaveDataFields之前,保存被删除的附件。
public override void SaveDataFields(MvcPostValue MvcPost, MvcResult result)
        {
 
            if ( this.ActionContext.ActivityTemplate.DisplayName == "申请人申请")//环节判断
            {
                Dictionary<string, string> dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(MvcPost.BizObject.DataItems["附件字段"].V.ToString());
                string DelAttachmentIds = dictionary["DelAttachmentIds"];//在页面上被删除附件的Id
                string sql = @"INSERT INTO 表名 SELECT * FROM OT_Attachment WHERE ObjectID='{0}'";
                foreach (string AttachmentID in DelAttachmentIds.Split(';'))
                {
                    if (AttachmentID != null && AttachmentID != "")
                    {
                        this.ActionContext.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteNonQuery(string.Format(sql, AttachmentID));
                    }
                }
            }
              
            base.SaveDataFields(MvcPost, result);
        }
发问题贴的时候,可以@一下我,我就能更快的知道了
岩竹玉雨
20

帖子

840

跟帖

205241

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
2楼#
发布于:2017-03-03 11:20
帖内置顶  –  H3BPM  –  2017-03-06 17:07
再补充一句。只能保存已保存的附件。
如果是,在申请页面上,上传了附件,没有点击保存或提交。直接删除的附件无法保存。但附件仍然会留在OT_Attachment表中,只是没有BizObjectId
发问题贴的时候,可以@一下我,我就能更快的知道了
武汉技术支持团队
40

帖子

1181

跟帖

3860

积分

论坛版主
论坛版主
3楼#
发布于:2017-03-01 11:50
什么意思?是只想在表单上看不到吗,实际上在数据库还是存在
liam
1

帖子

99

跟帖

1976

积分

高级榴莲
高级榴莲
4楼#
发布于:2017-03-01 15:41
武汉技术支持团队:什么意思?是只想在表单上看不到吗,实际上在数据库还是存在回到原帖
是的,只是想在表单看不到,而且不想删除附件表中的记录,防止错删还原
岩竹玉雨
20

帖子

840

跟帖

205241

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
5楼#
发布于:2017-03-03 10:51
代码正在赶来的路上。。。
发问题贴的时候,可以@一下我,我就能更快的知道了
岩竹玉雨
20

帖子

840

跟帖

205241

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
6楼#
发布于:2017-03-03 11:08
 因代码都已经封装在dll里了,所以我们只能通过执行原保存方法之前干预
 昨天晚上代码就写好了,但是没有测试。今天测了一下,发现现实与思路有些差别。
 
 实测后发现SaveDataFields会把附件表的附件数据删掉。
 所以我们还是自己新建一个备份附件表
 在SaveDataFields之前,保存被删除的附件。
public override void SaveDataFields(MvcPostValue MvcPost, MvcResult result)
        {
 
            if ( this.ActionContext.ActivityTemplate.DisplayName == "申请人申请")//环节判断
            {
                Dictionary<string, string> dictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(MvcPost.BizObject.DataItems["附件字段"].V.ToString());
                string DelAttachmentIds = dictionary["DelAttachmentIds"];//在页面上被删除附件的Id
                string sql = @"INSERT INTO 表名 SELECT * FROM OT_Attachment WHERE ObjectID='{0}'";
                foreach (string AttachmentID in DelAttachmentIds.Split(';'))
                {
                    if (AttachmentID != null && AttachmentID != "")
                    {
                        this.ActionContext.Engine.EngineConfig.CommandFactory.CreateCommand().ExecuteNonQuery(string.Format(sql, AttachmentID));
                    }
                }
            }
              
            base.SaveDataFields(MvcPost, result);
        }
发问题贴的时候,可以@一下我,我就能更快的知道了
H3BPM
655

帖子

2504

跟帖

46406

积分

管理员
管理员
  • 社区居民
7楼#
发布于:2017-03-03 11:17
岩竹玉雨:因代码都已经封装在dll里了,所以我们只能通过执行原保存方法之前干预
 昨天晚上代码就写好了,但是没有测试。今天测了一下,发现现实与思路有些差别。
 
 实测后发现SaveDataFields会把附件表的附件数据删掉。
 所以我们还...
回到原帖
不愧是大神!
10月签到活动奖励发放啦:http://bbs.h3bpm.com/read.php?tid=5377&fid=5
岩竹玉雨
20

帖子

840

跟帖

205241

积分

论坛版主
论坛版主
  • 社区居民
  • 忠实会员
8楼#
发布于:2017-03-03 11:20
再补充一句。只能保存已保存的附件。
如果是,在申请页面上,上传了附件,没有点击保存或提交。直接删除的附件无法保存。但附件仍然会留在OT_Attachment表中,只是没有BizObjectId
发问题贴的时候,可以@一下我,我就能更快的知道了
游客

返回顶部