Foxtable(狐表)用户栏目专家坐堂 → [求助]获取企业微信 打卡规则


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

主题:[求助]获取企业微信 打卡规则

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


加好友 发短信
等级:七尾狐 帖子:1655 积分:14747 威望:0 精华:0 注册:2014/6/6 8:42:00
[求助]获取企业微信 打卡规则  发帖心情 Post By:2020/5/4 23:26:00 [只看该作者]

老师,下面的代码可以获得josn 格式的结果,只得到 一部分结果,学艺不精,不会解析,请指教,谢谢!

Dim st As New Date(1970,1,1,8,0,0)
Dim t As Integer = CInt((Date.Now - st).TotalSeconds()) '时间戳
Dim ur As String = "https://qyapi.weixin.qq.com/cgi-bin/checkin/getcheckinoption?access_token={0}"
Dim hc As New HttpClient(CExp(ur,Functions.Execute("打卡GetQYAccessToken"),0))
Dim jo As New JObject
jo("datetime") = t   '设置时间
Dim ja As New Jarray '定义数组
ja.Add("zhangchunguang")
jo("useridlist") = ja
hc.Content = jo.Tostring()
jo = JObject.Parse(hc.GetData)


If jo("errcode") = "0" Then
    ja = jo("info")
    DataTables("打卡规则").DataRows.Clear
    Dim r As Row =Tables("打卡规则").AddNew()
    For i As Integer = 0 To ja.Count - 1
        Dim jo2 As JObject =ja(i)
        r("userid") = ja(i)("userid").ToString()
        r("grouptype") = ja(i)("group")("grouptype").ToString()
        r("groupid") = ja(i)("group")("groupid").ToString()
        r("groupname") = ja(i)("group")("groupname").ToString()
        r("sync_holidays") = ja(i)("group")("sync_holidays").ToString()
        r("need_photo") = ja(i)("group")("need_photo").ToString()
        r("note_can_use_local_pic") = ja(i)("group")("note_can_use_local_pic").ToString()
        r("allow_checkin_offworkday") = ja(i)("group")("allow_checkin_offworkday").ToString()
        r("allow_apply_offworkday") = ja(i)("group")("allow_apply_offworkday").ToString()
    Next  
Else
    MessageBox.Show(jo.ToString)
End If
[此贴子已经被作者于2020/5/5 0:33:01编辑过]

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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/5 9:32:00 [只看该作者]

完整的json字符串给出来,然后说明什么地方不会解析?

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


加好友 发短信
等级:七尾狐 帖子:1655 积分:14747 威望:0 精华:0 注册:2014/6/6 8:42:00
  发帖心情 Post By:2020/5/6 7:26:00 [只看该作者]

老师,解析问题解决了,请问一下,这个打卡规则可以像修改通讯录一样通过代码修改?谢谢!

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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/6 8:53:00 [只看该作者]

这个应该去看微信开发文档,有提供相关的接口就可以

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


加好友 发短信
等级:七尾狐 帖子:1655 积分:14747 威望:0 精华:0 注册:2014/6/6 8:42:00
  发帖心情 Post By:2020/5/10 9:01:00 [只看该作者]

老师,下面这个 details 的值有多个时如何解析?谢谢!

 下载信息  [文件大小:   下载次数: ]
点击浏览该文件:新建文本文档 (2).txt



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


加好友 发短信
等级:五尾狐 帖子:1093 积分:6682 威望:0 精华:0 注册:2013/7/1 9:05:00
  发帖心情 Post By:2020/5/10 9:23:00 [只看该作者]

Dim json As String = Filesys.ReadAllText("c:\tmp\123.txt")
Dim jo As JObject = JObject.Parse(json)
For Each jt As JToken In jo("details")
    Output.Show(jt("approver")("userid").ToString)
    Output.Show(jt("sp_status").ToString)
    Output.Show(jt("speech").ToString)
    Output.Show(jt("sptime").ToString)
    Output.Show(jt("media_id").ToString)
Next


这里有所有的例子:
http://www.foxtable.com/mobilehelp/topics/0140.htm
http://www.foxtable.com/mobilehelp/topics/0252.htm

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


加好友 发短信
等级:七尾狐 帖子:1655 积分:14747 威望:0 精华:0 注册:2014/6/6 8:42:00
  发帖心情 Post By:2020/5/10 10:09:00 [只看该作者]

谢谢!这个我学了,就是 details 下面有多个相同的值,details 的值如何写?譬如:有几个人会签审批,要获取所有会签结果。

企业微信中获取审批申请详情 中 sp_record 
[此贴子已经被作者于2020/5/10 10:34:08编辑过]

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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/11 8:42:00 [只看该作者]

6楼的代码就是

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


加好友 发短信
等级:七尾狐 帖子:1655 积分:14747 威望:0 精华:0 注册:2014/6/6 8:42:00
  发帖心情 Post By:2020/5/20 0:13:00 [只看该作者]

老师,在解析审批数据时下面的红色代码执行完毕后总是要出现以下提示,这是什么原因?谢谢!

        ' 解析申请审批提交数据
        ja = jo("info")("apply_data")("contents")
        For i As Integer = 0 To ja.Count - 1
            Dim jo4 As JObject =ja(i)
            If jo("info")("sp_name").ToString() = "用车" Then
                r("节点审批方式") = ja(0)("value")("text").ToString() & ja(1)("value")("text").ToString() & ja(2)("value")("text").ToString() & ")"   ' & "车型(" & ja(3)("value")("text").ToString() & ")"
                r("结束时间") = stt.AddSeconds(ja(4)("value")("date")("s_timestamp").ToString())
                r("开始时间") = stt.AddSeconds(ja(3)("value")("date")("s_timestamp").ToString())
            ElseIf jo("info")("sp_name").ToString() = "外出" Then
                r("节点审批方式") = ja(0)("value")("text").ToString()  & ja(1)("value")("text").ToString()
                r("结束时间") = stt.AddSeconds(ja(2)("value")("attendance")("date_range")("new_end").ToString())
                r("开始时间") = stt.AddSeconds(ja(2)("value")("attendance")("date_range")("new_begin").ToString())
            ElseIf jo("info")("sp_name").ToString() = "请假"  Then
                ' 解析请假类型                
                Dim ssss As String = "{" & vbcrlf & """options""" & ":" & ja(i)("value")("vacation")("selector")("options").ToString() & vbcrlf & "}"
                Dim jo12 As JObject = JObject.Parse(ssss)
                Dim ss3 As String
                For Each jt As JToken In jo12("options")
                    Dim ss2 As String = "{" & vbcrlf & """value""" & ":" & jt("value").ToString() & vbcrlf & "}"
                    Dim lms As new List(of String)
                    Dim jo13 As JObject = JObject.Parse(ss2)
                    For Each jtt As JToken In jo13("value")
                        If lms.Contains(jtt("text").ToString()) = False Then
                            lms.Add(jtt("text").ToString())
                        End If
                    Next
                    ss3 = String.Join("、", lms.ToArray)
                    r("节点审批方式") = ss3 & ja(1)("value")("text").ToString()
                Next
                r("计时类型") = ja(0)("value")("vacation")("attendance")("date_range")("type").ToString()
                r("结束时间") = stt.AddSeconds(ja(0)("value")("vacation")("attendance")("date_range")("new_end").ToString())
                r("开始时间") = stt.AddSeconds(ja(0)("value")("vacation")("attendance")("date_range")("new_begin").ToString())
                r("天数") = ja(0)("value")("vacation")("attendance")("date_range")("new_duration").ToString() /86400                
            ElseIf jo("info")("sp_name").ToString() = "加班"  Then
                r("节点审批方式") = ja(0)("value")("text").ToString()  & ja(1)("value")("text").ToString()
                r("结束时间") = stt.AddSeconds(ja(2)("value")("attendance")("date_range")("new_end").ToString())
                r("开始时间") = stt.AddSeconds(ja(2)("value")("attendance")("date_range")("new_begin").ToString())
            ElseIf jo("info")("sp_name").ToString() = "补卡" Then
                r("节点审批方式") = ja(0)("value")("punch_correction")("state").ToString()  & ja(0)("value")("punch_correction")("time").ToString() & ja(1)("value")("text").ToString()
            End If
        Next

.NET Framework 版本:4.0.30319.1026
Foxtable 版本:2020.5.1.8
错误所在事件:窗口,通讯录管理,Button08,Click
详细错误信息:
Object reference not set to an instance of an object.

下面是请假审批时的源码 ,要解析请假类型(公休假)
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:请假代码.txt


[此贴子已经被作者于2020/5/20 0:18:18编辑过]

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


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/5/20 9:07:00 [只看该作者]

这种一般是不存在某个节点,比如:【 ja(0)("value")("vacation")("attendance")("date_range")("type").ToString()】,如果不存在"value"、"vacation"、...等其中一个就会出错

自己调试是哪一句代码的问题,具体到某一句代码:http://www.foxtable.com/webhelp/scr/1485.htm

 回到顶部