如何从报表设计器调用Acumatica函数?

时间:2018-08-07 13:33:04

标签: acumatica

我有一个用Acumatica编写的Common函数,我们在各种Acumatica屏幕上使用了该函数,我们希望在报表设计器中使用此函数,以便我们可以打印该值。 示例:CheckBday()如果​​我们传递客户代码,它将检查该客户生日字段,如果是今天,则返回“生日快乐”

是否可以在报表设计器中调用此通用函数进行处理?如果是这样,如何在报表设计器中实现这一点,那么任何见解都会有所帮助。

2 个答案:

答案 0 :(得分:1)

您可以通过使用用户定义函数(UDF)在报表设计器上使用扩展功能。  你可以: 创建一个新的AddOn项目,称为ReportUDF。添加一个名为UtilFunctions.cs的新类文件。 添加公共功能YOURFUNCTION:  使用系统;  使用System.Collections.Generic;  使用System.Linq;  使用System.Text;  使用PX.Objects.AP;  命名空间ReportUDF  {     公共类UtilFunctions     {         公共字符串YOURFUNCTION(字符串PARAM)         {             尝试             {                  //功能码             }             抓住(前例外)             {                 返回ex.Message;             }         }      } } 参数及其数据类型: 类中的方法应始终包含string类型的参数,并始终返回string类型的值。处理参数和返回参数的最佳方法是将它们声明为Object类型。但是,在使用或使用它们之前,需要将这些参数转换为适当的数据类型,以确保方法的正确操作。 编译此附加项目。成功编译后,确保程序集(ReportUDF.dll)放置在Acumatica网站的Bin文件夹中。 如下所述在ReportLauncher.aspx.cs中连接此新程序集: 在Visual Studio中打开ReportLauncher.aspx.cs文件(网站文件夹>框架)。 将以下代码行添加到静态构造函数Pages_ReportLauncer的底部:  类型DemoReportFunctionsType =  System.Web.Compilation.BuildManager.GetType(“ ReportUDF.UtilFunctions”,false);  if(DemoReportFunctionsType!= null)  {      ExpressionContext.RegisterExternalObject(“ ReportUDF”,Activator.CreateInstance(DemoReportFunctionsType));  } 在报表设计器中打开表单报表,并使用以下表达式添加TextBox控件,如下所示:  = ReportUDF.YOURFUNCTION([DAC.UsrSomeField]) 观察:UDF没有出现在表达式编辑器中。 保存并运行报告。 观察:自定义ReportLauncher.aspx.cs不是标准做法,应重新应用升级过程中的更改。您始终可以将这些更改作为定制包的一部分进行编译。但是,您应确保在升级过程中保留对此代码文件的增强功能(如果有)。否则,报告可能无法按预期运行。

答案 1 :(得分:1)

如@cbetabeta所述,使用Reports User Defined Function(UDF)是一种可能的方法。但是维护自定义的ReportLauncher.aspx.cs版本到版本将是一个挑战。

为此的另一种可能方法是通过具有PXFormula / PXDBScalar / PXDBCalced属性的未绑定DAC字段。您也可以使用自定义BQL函数(源自BqlFormulaEvaluator)–您可以引用PX.Objects源代码的公式子文件夹中提供的现成的自定义BQL函数。或者,您可以参考KB article,其中使用了此类自定义BQL函数HierarchySorting