我有一个用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
。