Foxtable(狐表)用户栏目专家坐堂 → [求助]BeforeAttachFile事件求助


  共有2703人关注过本帖树形打印复制链接

主题:[求助]BeforeAttachFile事件求助

帅哥哟,离线,有人找我吗?
huangfanzi
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]BeforeAttachFile事件求助  发帖心情 Post By:2021/10/13 14:00:00 [只看该作者]

在上传文件时,希望自动换文件名,换名的规则是,【单据号】列内容再加流水序号
例如本条记录的单据号是 AAA ,前后上传了11个文件,文件名能自动替换成:
AA-1
AA-2
AA-3
。。。
AA-10
AA-11

请老师帮忙写个代码示例,谢谢。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/13 14:15:00 [只看该作者]

比如上传了11个文件,然后删除了第4个文件,再添加一个文件,新添加的应该取什么名称?AA-4还是AA-12?

 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2021/10/13 17:41:00 [只看该作者]

AA-12就行,这样方便点,其实我的目的就最用户上传文件时,都是莫名其妙的名字,比如微信中导出的图片,现在改下名字,文件名长度也能控制的短些

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/14 8:37:00 [只看该作者]

建议名称改为AA-01、AA-02、...、AA-10这种,编号等长,不然就只有遍历文件夹里的所有文件逐个判断了,效率很低

比如

Dim max as string = e.datatable.compute("max(文件)","单据号='" & e.datarow("单据号") & "'")
If max > "" Then
    dim id as string = cint(max.substring(max.length - 2)) + 1
e.FileName = e.datarow("单据号") &  format(id,"00") & ".jpg"
Else

    e.FileName = 
e.datarow("单据号") & "01.jpg"
End
 If

 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2021/10/15 16:44:00 [只看该作者]

老师,看下我改的代码,实测了下,没用,文件名没改过来,也没报错,项目中的附件列是备注型的,没有设置扩展类型。
BeforeAttachFile事件
Dim max As String = e.DataTable.Compute("Max(附件)","单据='" & e.DataRow("单据") & "'")
Dim id As Integer
Dim hz As String
If max > "" Then
    id = CInt(Max.SubString(max.LastIndexOf(".")-2,2)) + 1
    hz = Max.SubString(max.LastIndexOf("."),max.length - max.LastIndexOf("."))
    
    e.FileName = e.DataRow("单据") & "-" & Format(id,"00") & hz
Else
    hz = e.FileName.SubString(e.FileName.LastIndexOf("."),e.FileName.length - e.FileName.LastIndexOf("."))
    e.FileName = e.DataRow("单据") & "-01" & hz
End If
以下是文件上传的代码,一直正常执行中。
BeforeAddFile事件:
Dim frm As WinForm.Form = Forms("文件上传模式窗口")
If frm.Opened Then
    e.Cancel = True
    Dim dlg As New openFileDialog '定义一个新的SaveFileDialog
    dlg.Filter= "文件|*.txt;*.bmp;*.jpg;*.png;*.pdf;*.doc;*.docx;*.xls;*.xlsx;*.rar;*.zip;*.jpeg" '设置筛选器
    dlg.MultiSelect = True
    If dlg.showDialog = DialogResult.Ok Then '如果用户单击了确定按钮
        Dim pv As WinForm.FileManager = frm.Controls("FileManager1")
        pv.FTPclient = _ftp
        pv.ManagerCommand.Visible = False
        pv.ConnectCommand.Visible = False
        pv.FullViewCommand.Visible = False
        Dim ls = e.DataRow.Lines("附件")
        For Each f As String In dlg.FileNames
            Dim file = "/QdgcWeb/www/upload/atta/附件/生产记录/" & e.DataRow("单据号") & "/" & filesys.GetName(f)
            If _ftp.DirExists("/QdgcWeb/www/upload/atta/附件/生产记录/" & e.DataRow("单据号")) = False Then
                _ftp.MakeDir("/QdgcWeb/www/upload/atta/附件/生产记录/" & e.DataRow("单据号")) '此处不可删除"/附件/",要不然会直接在 本机的RemoteFiles目录下生成编号名目录
            End If
            Dim Result As DialogResult
            If _ftp.FileExists(file) Then
                Result = MessageBox.Show("文件已经存在,是否覆盖?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
            End If
            If result = Nothing OrElse result = DialogResult.Yes Then
                If  _ftp.Upload(f,file,True) = True Then
                    If ls.contains(file) = False Then
                        ls.add(file)
                        pv.AddFile(file)
                    End If
                Else
                    MessageBox.Show( f & "上传失败" ,"提示" ,MessageBoxButtons.OK,MessageBoxIcon.Question)
                End If
            End If
        Next
        e.DataRow.lines("附件") = ls
        e.DataRow.Save
        _ftp.Close
    End If
End If

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/15 16:49:00 [只看该作者]

ftp文件不会触发BeforeAttachFile事件。建议使用按钮上传,或者到BeforeAddFile事件处理。

另外4楼的方法仅适合单元格只有一个文件的情况,如果一个单元格会有多个文件的,只能遍历所有文件一个个判断

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/15 16:50:00 [只看该作者]

建议使用编号+时间,就不要搞那么麻烦了

 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2021/10/15 17:00:00 [只看该作者]

用时间也行,但现在的问题是,上面这个改名代码并没有执行,连报错也没有,是不是不应该写在这个BeforeAttachFile事件中啊?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/10/15 17:06:00 [只看该作者]

认真看6楼

 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1104 积分:8956 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2021/10/15 17:13:00 [只看该作者]

不好意思,习惯性最后一楼,没注意老师连着发了2层的回复,还是用BeforeAddFile来处理,能帮我改下代码吗,不知在哪个地方改名字

 回到顶部
总数 13 1 2 下一页