SSRS自定义代码中函数能否调用其他函数?定义顺序问题及解法
SSRS自定义代码中函数调用与定义顺序问题解答
1. 是否可以创建调用另一个函数的函数?
绝对可以!SSRS的自定义代码基于VB.NET,完全支持函数间的相互调用——不管是你在同一自定义代码块里定义的其他函数,还是符合VB.NET语法的逻辑调用,都没问题。只要函数的参数、返回值匹配,就能正常调用。
2. 先定义函数1,紧接着定义调用函数1的函数2可行吗?怎么解决?
直接这么写会报错。因为SSRS里的VB.NET解析是按代码从上到下的顺序进行的,当解析到函数2的时候,函数1的完整定义还没被识别,编译器会提示“未声明的标识符”之类的错误。
解决这个问题有两种常用方案:
方案一:使用前置函数声明
先声明函数1的签名(只写函数名、参数和返回值,不写函数体),然后定义调用它的函数2,最后再补全函数1的具体实现。示例代码如下:
' 先声明函数1的签名,告诉编译器这个函数存在 Public Function Func1(ByVal input As Integer) As Integer ' 定义调用Func1的函数2,此时编译器已经知道Func1的存在 Public Function Func2(ByVal num As Integer) As Integer Return Func1(num) * 2 End Function ' 补全函数1的具体逻辑 Public Function Func1(ByVal input As Integer) As Integer Return input + 10 End Function
方案二:将函数封装到类中
把相关函数放到一个类里,类内部的函数不需要关心定义顺序,因为类的成员会被整体解析。调用时只需要实例化这个类即可,适合函数较多、需要模块化管理的场景:
Public Class MyReportFunctions ' 先定义或后定义都不影响调用 Public Function Func2(ByVal num As Integer) As Integer Return Func1(num) * 2 End Function Public Function Func1(ByVal input As Integer) As Integer Return input + 10 End Function End Class ' 对外暴露的调用函数,用于在报表中调用 Public Function ExecuteFunc2(ByVal num As Integer) As Integer Dim funcObj As New MyReportFunctions() Return funcObj.Func2(num) End Function
内容的提问来源于stack exchange,提问作者B2Y
相关产品推荐
相关产品推荐

