以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  openqq服务已开启,客户端已登录,自定义信息提示窗口传递消息没反应  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=117951)

--  作者:yetle
--  发布时间:2018/4/21 14:08:00
--  openqq服务已开启,客户端已登录,自定义信息提示窗口传递消息没反应

点保存,点审核都没有消息传递提醒,帮我看看哪里不对,按帮助如下步骤:

1、首先我们要定义一个集合,用于存储收到的审核申请,在全局代码中定义一个Public变量:

Public fhs As New List(of String)

2、在报价申请单编辑窗口的保存按钮中,写入如下代码

Dim r As Row  = Tables("报价申请").Current

r.Save()

QQClient.Send("研发-总监","+@|" & r("_Identify") & "|" & r("业务部_系列") & "|" & usna)

3、在发货单编辑窗口的审核按钮中,写入如下代码:

Dim r As Row  = Tables("报价申请").Current

r("研发部_中心审批") = "通过"

r.Save()

\'发送审核通过的消息

QQClient.Send(r("业务部_业务跟单"),"-@|" & r("业务部_系列") & "|" & usna)

4、在OpenQQ客户端的ReceivedMessage事件中编写代码

Dim pts() As String  = e.Message.Split("|")

If pts.Length = 4 AndAlso pts(0) = "+@" \'如果是申请审核消息

    fhs.Add(pts(1) & "|" & pts(2) & "|" & pts(3)) \'将主健?单号和制单人合成为一个字符串存储在集合中

ElseIf pts.Length = 3 AndAlso pts(0) = "-@" \'如果是审核通过消息

    PopMessage("报价申请" & pts(1) & "已由" & pts(2) & "审核通过!") 

    Dim drs As DataRow = DataTables("报价申请").Find("业务部_系列 = \'" & pts(1) & "\'")

    If drs IsNot Nothing Then

        drs.Load

    End If

End If

5、在客户端项目新建一个下图所示的窗口,窗口名为“审核提示”,窗口类型设置为PopupForm:

这个窗口有两个Label控件,Label1用于显示提示信息,Label2的可见属性设置为False,用于存储发货单的主键(Identify)。
这是一个技巧,因为Foxtable并没有提供窗口级别的变量,所以通常用一些不可见的Label控件来存储临时信息。

查看按钮代码:

DataTables("送货单").Save() \'接下来要根据主键查找,必须先保存,因为只有保存后新增行的主键才是有效值.

Dim id As String = e.Form.Controls("Label2").Text

Dim dr As DataRow = DataTables("报价申请").Find("[_Identify] = " & id)

If dr Is Nothing Then

    DataTables("报价申请").AppendLoad("[_Identify] = " & id)

    dr =  DataTables("报价申请").Find("[_Identify] = " & id)

Else

    dr.Load()

End If

6、在项目事件SystemIdle中加入代码:
If fhs.Count > 0 AndAlso Forms("审核申请").Opened = False Then
    Dim pts() As String = fhs(0).Split("|")
    fhs.RemoveAt(0)
    With Forms("审核申请")
        .Open()
        .Controls("Label1").Text = pts(2) & "新增报价申请" & pts(1) & ",请审核!"
        .Controls("Label2").Text = pts(0) \'将发货单主健设置为Label2的标题
    End With
End If



MessageBox做了测试都会弹出提示1和2

Dim r As Row  = Tables("报价申请").Current

r.Save()

QQClient.Send("研发-总监","+@|" & r("_Identify") & "|" & r("业务部_系列") & "|" & usna)

MessageBox.Show(1)

Dim r As Row  = Tables("报价申请").Current

r("研发部_中心审批") = "通过"

r.Save()

\'发送审核通过的消息

QQClient.Send(r("业务部_业务跟单"),"-@|" & r("业务部_系列") & "|" & usna)

MessageBox.Show(2)



--  作者:有点蓝
--  发布时间:2018/4/21 16:51:00
--  
其他事件呢?接受消息事件能不能弹出提示框
--  作者:yetle
--  发布时间:2018/4/23 9:35:00
--  

ReceivedMessage没有提示,但用openqq的client发消息能正常发送和接收,发送和接收消息的时候也是没有message提示


Dim dr As DataRow = DataTables("信息").AddNew
dr("发送者") = iif(usna > "",usna,"服务器")
dr("时间") = Date.Now()
dr("信息") = e.Message
MessageBox.Show(3)

Dim pts() As String  = e.Message.Split("|")
If pts.Length = 4 AndAlso pts(0) = "+@" \'如果是申请审核消息
    fhs.Add(pts(1) & "|" & pts(2) & "|" & pts(3)) \'将主健?单号和制单人合成为一个字符串存储在集合中
ElseIf pts.Length = 3 AndAlso pts(0) = "-@" \'如果是审核通过消息
    PopMessage("报价申请" & pts(1) & "已由" & pts(2) & "审核通过!") 
    Dim drs As DataRow = DataTables("报价申请").Find("业务部_系列 = \'" & pts(1) & "\'")
    If drs IsNot Nothing Then
        drs.Load
    End If
End If
MessageBox.Show(4)

--  作者:有点甜
--  发布时间:2018/4/23 9:47:00
--  

你openqq聊天窗口的分组名和用户名分别是什么?截图看看。

 

正常的发送,用户名是这样的 QQClient.Send("研发.总监","+@|" & r("_Identify") & "|" & r("业务部_系列") & "|" & usna)

[此贴子已经被作者于2018/4/23 10:00:32编辑过]

--  作者:yetle
--  发布时间:2018/4/23 9:58:00
--  

图片点击可在新窗口打开查看此主题相关图片如下:未命名.png
图片点击可在新窗口打开查看

--  作者:有点甜
--  发布时间:2018/4/23 10:00:00
--  

那改成

 

QQClient.Send("研发部.研发-总监","+@|" & r("_Identify") & "|" & r("业务部_系列") & "|" & usna)

[此贴子已经被作者于2018/4/23 10:00:19编辑过]

--  作者:yetle
--  发布时间:2018/4/23 11:01:00
--  
测试好了,还有两个问题:
1.保存或审核在对方client不再线的时候操作,当对方client登录,保存或审核的传递消息也能弹出来要怎么操作;
2.
Dim r As Row  = Tables("报价申请").Current
r("研发部_中心审批") = "通过"
r.Save()
\'发送审核通过的消息
QQClient.Send("业务部.业务部-刘静文","-@|" & r("业务部_系列") & "|" & usna)
要改成不指定部门人员,而是获取开单文的部门和姓名,姓名可以直接取,那部门怎么取?
QQClient.Send(________.r("业务部_业务跟单") ,"-@|" & r("业务部_系列") & "|" & usna)
[此贴子已经被作者于2018/4/23 11:07:39编辑过]

--  作者:有点甜
--  发布时间:2018/4/23 11:03:00
--  

改成离线发送

 

QQClient.Send("研发部.研发-总监","+@|" & r("_Identify") & "|" & r("业务部_系列") & "|" & usna, true)

 

http://www.foxtable.com/webhelp/scr/2976.htm

 


--  作者:yetle
--  发布时间:2018/4/23 11:11:00
--  
好的,另外,要改成不指定部门人员姓名,而是获取开单人的部门和姓名,姓名可以直接取,那部门怎么取?
Dim r As Row  = Tables("报价申请").Current
r("研发部_中心审批") = "通过"
r.Save()
\'发送审核通过的消息
QQClient.Send("业务部.业务部-刘静文","-@|" & r("业务部_系列") & "|" & usna)

QQClient.Send(________.r("业务部_业务跟单") ,"-@|" & r("业务部_系列") & "|" & usna)

--  作者:有点甜
--  发布时间:2018/4/23 11:14:00
--  

你可以截取姓名的前半部分

 

QQClient.Send(r("业务部_业务跟单").split("-")(0) & "." & r("业务部_业务跟单") ,"-@|" & r("业务部_系列") & "|" & usna)

 

或者是跨表,根据姓名查询得到部门 http://www.foxtable.com/webhelp/scr/0396.htm