以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  自定义函数,若符合某个条件时返回列表,在执行自定义函数时,该如何判断自定义函数的是否有返回数据啊?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=140861)

--  作者:guosheng
--  发布时间:2019/9/16 14:15:00
--  自定义函数,若符合某个条件时返回列表,在执行自定义函数时,该如何判断自定义函数的是否有返回数据啊?
以下这个自定义函数,应该怎么改,在执行自定义函数时,判断(是否应该执行自定义函数),看是否真的有返回值Vals_r啊? 在引用自定义函数时若 ret 为空,则自定义函数返回false(给个标记个状态就行,识别一下,即无需引用返回的Vals_r数据);若ret不为空,则执行自定义函数,并引用Vals_r的数据
Dim htid As String = Args(0)    \'合同编号 
Dim Vals_r As New List(Of Double)
Dim hc As New HttpClient("http://ls.xinlianhuichuang.com/v1/lsjyje?id=" & htid)
    Dim ret As String = hc.GetData()
    Dim dtb As New DataTableBuilder("应收明细表")
    dtb.AddDef("合同编号", Gettype(String), 100)
    dtb.AddDef("收费项目", Gettype(String), 100)
    dtb.AddDef("计费日期", Gettype(String), 50)
    \'dtb.AddDef("计费日期1", Gettype(Date), 20)
    dtb.AddDef("应收金额", Gettype(Double))
    dtb.AddDef("实收金额", Gettype(Double))
    dtb.Build()
    
    Tables("应收明细表").StopRedraw
    For Each ep As JToken In JArray.Parse(ret)
        Dim rr As Row=Tables("应收明细表").addnew()
        rr("合同编号")=ep("合同编号")
        rr("收费项目")=ep("收费项目")
        rr("计费日期")=ep("计费日期")
        rr("应收金额")=ep("应收金额")
        rr("实收金额")=ep("实收金额")
    Next
    Tables("应收明细表").ResumeRedraw
    Dim zt As Double=Tables("应收明细表").compute("sum(实收金额)","收费项目=\'租金\'")
    Dim ft As Double=Tables("应收明细表").compute("sum(实收金额)","收费项目=\'服务费\'")
    Dim fwt As Double=Tables("应收明细表").compute("sum(实收金额)","收费项目=\'房屋使用费\'")
    Dim ztt As Double=math.max(zt,fwt)

Vals_r.add(ztt)
Vals_r.add(ft)
Return Vals_r
[此贴子已经被作者于2019/9/16 14:22:40编辑过]

--  作者:有点蓝
--  发布时间:2019/9/16 14:26:00
--  
Dim htid As String = Args(0)    \'合同编号 
Dim Vals_r As New List(Of Double)
Dim hc As New HttpClient("http://ls.xinlianhuichuang.com/v1/lsjyje?id=" & htid)
    Dim ret As String = hc.GetData()
if ret = "" then return Vals_r 
……

调用
dim lst as List(Of Double) = function.execute("某函数",某参数)
if lst.count > 0 then 
msgbox("有返回值")
endif

--  作者:guosheng
--  发布时间:2019/9/16 14:42:00
--  
Dim str As String="ZKD-A地块信息技术-2018-11-26-001"
Dim hc As New HttpClient("http://ls.xinlianhuichuang.com/v1/lshtmx?id=" & str)
Dim ret As String = hc.GetData()
messagebox.show(ret="")
无论把str改成什么,ret=“”始终返回的都是false啊

--  作者:有点蓝
--  发布时间:2019/9/16 14:55:00
--  
messagebox.show(ret) 显示什么内容?
--  作者:guosheng
--  发布时间:2019/9/16 15:39:00
--  
若没找到数据,则ret 返回  [] 
浏览器输入以下地址就能看到返回值了。
http://ls.xinlianhuichuang.com/v1/lshtmx?id=ZKD-A地块信息技术-2018-11-26-001
[此贴子已经被作者于2019/9/16 16:11:21编辑过]

--  作者:有点蓝
--  发布时间:2019/9/16 16:16:00
--  
那就这样判断

Dim ret As String = hc.GetData()
messagebox.show(ret="" orelse ret="[]")

--  作者:guosheng
--  发布时间:2019/9/16 17:25:00
--  
如果自定义函数不需要引用返回值,函数执行只是执行了一系列操作。
函数的定义,和 引用是否执行自定义函数该怎么判断啊?

Dim htid As String = Args(0)    \'合同编号
Dim xm As String = Args(1)   \'项目名称
Dim zl As String = Args(2)   \'租赁类别
Dim hc As New HttpClient("http://ls.xinlianhuichuang.com/v1/lsjyje?id=" & htid)
Dim ret As String = hc.GetData()
若ret 有返回值 才执行以下动作。
……
[此贴子已经被作者于2019/9/16 17:27:22编辑过]

--  作者:有点蓝
--  发布时间:2019/9/16 17:29:00
--  
没看懂。如果不需要返回值,那就不要解释函数的返回值,直接调用即可。

如果函数里可能返回,也可能不返回。那不要这样做,而是应该统一有返回,没有东西的时候返回空值好了。