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

如何从报表设计器调用Acumatica函数?,acumatica,Acumatica,我有一个用Acumatica编写的常用函数,我们在各种Acumatica屏幕上使用它,我们希望在报表设计器中使用此函数,以便打印值。 示例:CheckBday()如果我们传递客户代码,它将检查此客户生日字段,如果是今天,它将返回“生日快乐” 是否可以在报表设计器中调用此公用函数进行处理?如果是这样,如何在报表设计器中实现这一点,任何洞察都会有所帮助。您可以使用用户定义函数(UDF)在报表设计器上使用扩展函数。 你可以: 创建一个名为ReportUDF的新插件项目。添加一个名为UtilFuncti

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


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

您可以使用用户定义函数(UDF)在报表设计器上使用扩展函数。 你可以:

  • 创建一个名为ReportUDF的新插件项目。添加一个名为UtilFunctions.cs的新类文件
  • 将公共函数添加到函数中:

     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using PX.Objects.AP;
    
     namespace ReportUDF
     {
        public class UtilFunctions
        {
            public string YOURFUNCTION(string PARAM)
            {
                try
                {
                     //function code
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }
         }
    }
    
  • 参数及其数据类型: 类中的方法应始终包含string类型的参数,并始终返回string类型的值。处理参数和返回参数的最佳方法是将它们声明为对象类型。但是,在使用或使用这些参数之前,需要将它们转换为适当的数据类型,以确保方法的正确操作

  • 编译此加载项项目。成功编译后,请确保程序集(ReportUDF.dll)放置在Acumatica网站的Bin文件夹中

  • 在ReportLauncher.aspx.cs中连接此新程序集,如下所述:

    • 在Visual Studio中打开ReportLauncher.aspx.cs文件(网站文件夹>框架)
    • 将以下代码行添加到静态构造函数页面的底部\u ReportLauncer:

       Type DemoReportFunctionsType =
       System.Web.Compilation.BuildManager.GetType("ReportUDF.UtilFunctions", false);
      
       if(DemoReportFunctionsType != null)
       {      
           ExpressionContext.RegisterExternalObject("ReportUDF",Activator.CreateInstance(DemoReportFunctionsType));
       }
      
  • 在报表设计器中打开表单报表,并使用以下表达式添加TextBox控件,如下所示:

     = ReportUDF.YOURFUNCTION([DAC.UsrSomeField])
    
  • 观察:自定义项不会显示在表达式编辑器中

  • 保存并运行报告

  • 观察:定制ReportLauncher.aspx.cs不是标准做法,升级过程中的更改应重新应用。您始终可以将这些更改编译为自定义包的一部分;但是,您应该确保在升级期间保留此代码文件的增强功能(如果有)。否则,报表可能无法按预期运行。

    您可以使用用户定义函数(UDF)在报表设计器上使用扩展函数。 你可以:

  • 创建一个名为ReportUDF的新插件项目。添加一个名为UtilFunctions.cs的新类文件
  • 将公共函数添加到函数中:

     using System;
     using System.Collections.Generic;
     using System.Linq;
     using System.Text;
     using PX.Objects.AP;
    
     namespace ReportUDF
     {
        public class UtilFunctions
        {
            public string YOURFUNCTION(string PARAM)
            {
                try
                {
                     //function code
                }
                catch (Exception ex)
                {
                    return ex.Message;
                }
            }
         }
    }
    
  • 参数及其数据类型: 类中的方法应始终包含string类型的参数,并始终返回string类型的值。处理参数和返回参数的最佳方法是将它们声明为对象类型。但是,在使用或使用这些参数之前,需要将它们转换为适当的数据类型,以确保方法的正确操作

  • 编译此加载项项目。成功编译后,请确保程序集(ReportUDF.dll)放置在Acumatica网站的Bin文件夹中

  • 在ReportLauncher.aspx.cs中连接此新程序集,如下所述:

    • 在Visual Studio中打开ReportLauncher.aspx.cs文件(网站文件夹>框架)
    • 将以下代码行添加到静态构造函数页面的底部\u ReportLauncer:

       Type DemoReportFunctionsType =
       System.Web.Compilation.BuildManager.GetType("ReportUDF.UtilFunctions", false);
      
       if(DemoReportFunctionsType != null)
       {      
           ExpressionContext.RegisterExternalObject("ReportUDF",Activator.CreateInstance(DemoReportFunctionsType));
       }
      
  • 在报表设计器中打开表单报表,并使用以下表达式添加TextBox控件,如下所示:

     = ReportUDF.YOURFUNCTION([DAC.UsrSomeField])
    
  • 观察:自定义项不会显示在表达式编辑器中

  • 保存并运行报告

  • 观察:定制ReportLauncher.aspx.cs不是标准做法,升级过程中的更改应重新应用。您始终可以将这些更改编译为自定义包的一部分;但是,您应该确保在升级期间保留此代码文件的增强功能(如果有)。否则报告可能无法按预期运行。

    正如@cbetabeta提到的,使用
    报告用户定义功能(UDF)
    是一种可能的方法。但是维护定制的
    ReportLauncher.aspx.cs
    版本到版本将是一个挑战


    另一种可能的方法是通过具有
    PXFormula
    /
    PXDBScalar
    /
    PXDBCalced
    属性的未绑定DAC字段。您也可以使用自定义BQL函数(源自
    BqlFormulaEvaluator
    ),您可以参考
    PX.Objects
    源代码的公式子文件夹中提供的开箱即用自定义BQL函数。或者您可以参考使用这种自定义BQL函数的地方。

    正如@cbetabeta提到的,使用
    报告用户定义函数(UDF)
    是一种可能的方法。但是维护定制的
    ReportLauncher.aspx.cs
    版本到版本将是一个挑战

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