用按钮代替函数

我们知道,Foxtable的按钮有个PerformClick方法,用于模拟单击此按钮。

所以我们进行混合编程的时候,不一定要用自定义函数,完全可以将代码写在按钮的Click事件中,然后在前端js脚本调用此按钮的PerformClick方法即可。

Click事件没有参数,所以前端脚本无法向其传递数据,我们可以Var变量作为数据传递的媒介。


示例

本示例可参考示例文件"CaseStudy\WebViewer\调用Foxtable对象.Table"的窗口"用按钮生成PDF"。

本示例还有一个用异步函数的版本,可以打开窗口"用函数生成PDF"参考。

本示例还有一个同时用按钮和异步函数的版本,可以打开窗口"用按钮和函数生成PDF"参考。

本示例基于HTML设计了一个数据打印界面:



窗口有个不可见的名为btnPrint的普通按钮(Button),用于生成PDF文件的代码写在这个按钮的Click事件中,前端脚会调用这个按钮的PerformClick方法。

所以代码分成两个部分。

1、前端页面的打印按钮的JS脚本代码如下,这段代码根据用户输入内容生成一个json字符串,并保存在一个Var变量中,

function handlePrint() {
    //
获取用户输入的值
    const product = document.getElementById("cmbProduct").value || "";
    const customer = document.getElementById("cmbCustomer").value || "";
    const year = document.getElementById("cmbYear").value || "";
    const month = document.getElementById("cmbMonth").value || "";           

    // 生成JSON对象
    const filterData = {
        product: product,
        customer: customer,
        year: year,
        month: month
    }; 

    //Json对象存储在Var变量中,方便Foxtable使用:
    ft.Vars["printFilter"] =  JSON.stringify(filterData);

  
 //模拟单击btnPrint按钮,生成PDF文件
    ft.Forms[" 混合编程之一"].Controls["btnPrint"].PerformClick();
}

2、后端的打印按钮(btnPrint)根据用户输入的内容合成筛选条件,然后筛选出数据并生成PDF文件:

'''Async
Await
Task.Delay(0)
If Vars("printFilter") Is Nothing Then '判断前端是否传递了打印条件
   
Return
End
If
Dim
jo As JObject = JsonConvert.DeserializeObject(Vars("printFilter"))
Dim
filter As String = ""
If
jo("product").ToString() > "" Then
    filter =
"产品 = '" & jo("product").ToString() & "'"
End
If
If
jo("customer").ToString() > "" Then
   
If filter > "" Then
        filter = filter &
" and "
   
End If
    filter = filter &
"客户 = '" & jo("customer").ToString() & "'"
End
If
If
jo("year").ToString() > "" Then
   
Dim year As Integer = -1
   
Dim month As Integer = -1
    year =
CInt(jo("year").ToString())
   
If jo("month").ToString() > "" Then
        month =
CInt(jo("month").ToString())
   
End If
   
If year > 0 AndAlso month > 0 Then
       
Dim d1 As Date = New Date(year, month, 1)
       
Dim d2 As Date = New Date(year, month, Date.DaysInMonth(year, month))
       
If filter > "" Then
            filter = filter &
" and "
       
End If
        filter = filter &
"日期 >= #" & d1 & "# And 日期 <= #" & d2 & "#"
   
End If
End
If
If
filter = "" Then
   
Return
End
If
'
下面 是打印代码,省略
Dim pdc As New PDFCreator()
...
'生成完成后保存PDF文件,注意用的是异步对话框
Dim
dlg As New SaveFileDialogA()
dlg.Filter =
"PDF文件|*.pdf"
If
Await dlg.ShowDialog() = DialogResult.OK Then
    pdc.Save(dlg.FileName)
'保存文件
    Process.Start(dlg.FileName)
'打开文件   
End
If

提示:

你可也可以不通过Var变量和json字符串传递数据,改为直接在Foxtable端获取用户输入内容然后合成条件,可以参考后面的《使用内置DOM》的这一章


本页地址:http://www.foxtable.com/webhelp/topics/6357.htm