以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  按工作流过滤表单数据的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=23346)

--  作者:zpx_2012
--  发布时间:2012/9/9 16:23:00
--  按工作流过滤表单数据的问题

请教狐爸,昨天问的这个问题可能我没有表述清楚,还没有解决,现在重新组织一下:

 

如下图: 当点击目录树订单下的审核时,就从订单表中找到“订单编号”在“单据审批记录”中的“编号”列的那些订单显示出来。

 


图片点击可在新窗口打开查看此主题相关图片如下:360截图20120909-001.jpg
图片点击可在新窗口打开查看

 

 

 因为每个表使用的编号列名称是不一样的,订单用订单编号,生产单用生产单编号,采购单用采购单编号,为了实现代码通用。我设计了如下的“系统表”把每一个表使用的“单据编号列”都指定了。这样当在目录树选择不同的表的不同流程时就可以动态的到这个表中去提取其指定编号列的值,存在于“单据审批记录”中的对应的“编号”列的那些编号的数据行就显示出来。 


图片点击可在新窗口打开查看此主题相关图片如下:360截图20120909-002.jpg
图片点击可在新窗口打开查看

 

点击订单下的审核时会出现以下错误提示:

 


图片点击可在新窗口打开查看此主题相关图片如下:360截图20120910-001.jpg
图片点击可在新窗口打开查看

代码如下:

Dim Filter As String
Dim Value()As String
Value = e.Node.FullPath.Split("\\")
Select Case e.Node.Level
    Case 0
        Tables(e.Node.Text).Filter = ""
        MainTable = Tables(e.Node.Text)
        DataTables.AllowEdit = True
    Case 1
        \'得到单据审批记录表中未结束的父节点表单的编号
        Dim nms As String
        nms = DataTables("单据审批记录").GetComboListString("编号","表名= \'" & e.Node.ParentNode.Text & "\' and 结束 = false")
        If nms > "" Then
            nms = "\'" & nms.replace("|","\',\'")  & "\'"
            \'从系统表中得到当前父节点的表使用的单据编号列的名称,然后过滤得到编号在单据审批记录中的表.
            Dim dr As DataRow = DataTables("系统表").Find("表名 = \'" & e.Node.ParentNode.Text & "\'")
            If dr IsNot Nothing Then
                Dim num As String = dr("单据编号列")
                   Tables(e.Node.ParentNode.Text).Filter = dr("单据编号列") & "In (" & nms & ")"
                MainTable = Tables(e.Node.ParentNode.Text)
                DataTables.AllowEdit = True
            End If
        End If
End Select

 

应该就是上面红色的代码那里还要增加一点才可以,但我弄了很久也不能实现目的,请指点;

 

谢谢!

[此贴子已经被作者于2012-9-10 8:37:01编辑过]

--  作者:jspta
--  发布时间:2012/9/9 18:17:00
--  

nms = "\'" & nms.replace("|","\',\'")  & "\'"

("|",",") 


--  作者:zpx_2012
--  发布时间:2012/9/10 8:28:00
--  
谢谢,但不明白,你说的前面的代码中已有。
--  作者:jspta
--  发布时间:2012/9/10 8:51:00
--  
以下是引用zpx_2012在2012-9-10 8:28:00的发言:
谢谢,但不明白,你说的前面的代码中已有。

你这段代码错误了,修改下应该就好了

nms = "\'" & nms.replace("|",",")  & "\'"

 


--  作者:zpx_2012
--  发布时间:2012/9/10 8:59:00
--  

怎么改,

  If nms > "" Then
            nms = "\'" & nms.replace("|","\',\'")  & "\'"
这可是狐爸帮忙写的啊!


--  作者:jspta
--  发布时间:2012/9/10 10:39:00
--  
以下是引用zpx_2012在2012-9-10 8:59:00的发言:

怎么改,

  If nms > "" Then
            nms = "\'" & nms.replace("|","\',\'")  & "\'"
这可是狐爸帮忙写的啊!

没注意这个是string, 是我弄错了,不好意思。


--  作者:zpx_2012
--  发布时间:2012/9/10 11:59:00
--  

这个问题请狐爸抽空看一下,因为这个问题解决不了,

 

下面还有审批完成后回退等类似的流程设计都是按同样的逻辑去处理的,现在进行不下去了。

 

谢谢!


--  作者:czy
--  发布时间:2012/9/10 13:19:00
--  

这样看看其结果是什么

……
 If dr IsNot Nothing Then
 MessageBox.Show(dr("单据编号列") & "In (" & nms & ")")

……


--  作者:zpx_2012
--  发布时间:2012/9/10 14:06:00
--  

谢谢czy,你出马这个问题应该有救了。按你说的那句加进去后执行显示

 


图片点击可在新窗口打开查看此主题相关图片如下:360截图20120910-005.jpg
图片点击可在新窗口打开查看

正确的应该是点生产单下的流程时,是用生产单的生产单号那一列的内容来判断是否In (" & nms & ")中,

 

而如果点订单下的流程则是用订单表的订单编号列的内容来判断是否In (" & nms & ")中,

 

我就是不知道要怎么编码才实现,请老师批点。

 

谢谢!

[此贴子已经被作者于2012-9-10 14:12:36编辑过]

--  作者:czy
--  发布时间:2012/9/10 14:24:00
--  

合成的表达式是正确的,还真看不出问题了。

看你图中并没有结束列,那么问题会不会是出在这里呢?

 

        nms = DataTables("单据审批记录").GetComboListString("编号","表名= \'" & e.Node.ParentNode.Text & "\' and 流程 = \'审核\'")