以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  HttpClient异步  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=194866)

--  作者:nuoyan89
--  发布时间:2025/1/23 18:33:00
--  HttpClient异步
老师,附件的代码我能使用HttpClient异步吗?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:代码.txt



--  作者:有点蓝
--  发布时间:2025/1/23 20:20:00
--  
HttpClient本身不是异步执行的。但是HttpClient可以放到异步函数里使用
--  作者:nuoyan89
--  发布时间:2025/1/23 21:36:00
--  
但是我现在放到异步函数中也不行,就是当一个请求没有完成的时候,另一个请求开始后就会报错,因为我调取的 API 是要批量推送数据到指定的数据库中.
--  作者:有点蓝
--  发布时间:2025/1/23 21:50:00
--  
这个应该和异步没有什么关系。API开发文档发上来看看
--  作者:nuoyan89
--  发布时间:2025/1/23 22:04:00
--  
老师,开发文档是这个https://open.chanjet.com/docs/file/apiFile/tcloud/t+dj/t+ccprkd?id=31035
--  作者:有点蓝
--  发布时间:2025/1/23 22:46:00
--  
这种不需要异步,按顺序提交数据即可。另外2条sql都是查询的{出入库明细} ,没有{出入库主表},所有数据都在一个表里面?如果这样没有必要查2次 
--  作者:nuoyan89
--  发布时间:2025/1/24 8:14:00
--  
是的,所有数据都在一个表里,只有出入库明细


--  作者:有点蓝
--  发布时间:2025/1/24 8:42:00
--  
这个表有几个单据单号?是一个单据单号就发送一次吗,还是所有的单据单号都一起发送?
--  作者:nuoyan89
--  发布时间:2025/1/24 9:16:00
--  
是一个单据单号发送一次,这个代码应该可以怎么调整呢
--  作者:有点蓝
--  发布时间:2025/1/24 10:13:00
--  
Dim dt As DataTable
Dim cmd As New SQLCommand
cmd.ConnectionName = "ERP系统"
cmd.CommandText = "Select distinct 单据单号 From {出入库明细} Where 状态 = 1 And 单据单号 is not null"
dt = cmd.ExecuteReader()
Dim i1 As Integer = 1
For Each dr1 As DataRow In dt.DataRows \'获取来自数据库的表明细信息
    Dim hc As New HttpClient(Vars("apiurl") & "/tplus/api/v2/productReceive/Create")
    hc.Headers.Add("appKey", appKey)
    hc.Headers.Add("appSecret", appSecret)
    hc.Headers.Add("openToken", accessToken)
    hc.Headers.Add("Content-Type", "application/json")
    hc.ContentType = "application/json"
    Dim jo As New JObject
    Dim s As String = dr1("单据单号")
    
    Dim dt1 As DataTable
    cmd.CommandText = "Select * From {出入库明细} Where 单据单号= \'" & s & "\' And 状态 = 1"
    dt1 = cmd.ExecuteReader()
    Dim dr As DataRow = dt1.DataRows(0)
    jo("dto") = New JObject
    jo("dto")("ExternalCode") = s \'外部系统数据编号,后台做唯一性检查
    \'jo("dto")("Code") = "单据编号 false"
    jo("dto")("VoucherType") = New JObject
    jo("dto")("VoucherType")("Code") = "ST1002"
    jo("dto")("VoucherDate") = dr("单据日期").ToString
    jo("dto")("BusiType") = New JObject
    jo("dto")("Warehouse") = New JObject
    jo("dto")("Warehouse")("Code") = dr("仓库编码").ToString
    jo("dto")("BusiType")("Code") = dr("操作编码").ToString
    jo("dto")("Warehouse")("Name") = dr("库位").ToString
    jo("dto")("Clerk") = New JObject
    jo("dto")("Clerk")("Code") = dr("制单人员").ToString
    jo("dto")("Clerk")("Name") = dr("制单人员").ToString
    \'jo("dto")("Memo") = "表头备注"   
    \'==========下面是明细信息
    Dim jalist As New JArray
    For i As Integer = 0 To dt1.DataRows.Count - 1 \'获取来自数据库的表明细信息
        dr = dt1.DataRows(i)
        Dim jolist As New JObject
        jolist("Code") = i \'行号,从1开始自增长
        jolist("Inventory") = New JObject \'行号,从1开始自增长
        jolist("Inventory")("code") = dr("存货编码").ToString
        ……自行补齐明细数据
        jolist("Amount") = CInt(dr("成本金额"))
        jalist.Add(jolist)
        jo("dto")("RDRecordDetails") = jalist 
    Next
    hc.Content = jo.tostring
    Dim ret As String = hc.GetData()
    If ret.Contains("error") Then
        MsgBox(ret)
    End If 
Next