diff --git a/designing-reports/connecting-to-data/expressions/extending-expressions/user-functions.md b/designing-reports/connecting-to-data/expressions/extending-expressions/user-functions.md index a39a14c0f..994fad9da 100644 --- a/designing-reports/connecting-to-data/expressions/extending-expressions/user-functions.md +++ b/designing-reports/connecting-to-data/expressions/extending-expressions/user-functions.md @@ -29,13 +29,22 @@ There are two ways to utilize user functions: `= Telerik.Reporting.Report.Report1.ResolveUrl("~/Images/Logo.jpg")` -If the loaded assembly contains many __public static__ (__Public Shared__ in VB.NET) methods, this might produce some clutter in the Edit Expression dialog, when browsing for existing user functions. To overcome this problem, you can use the IsVisible attribute to hide any methods, which are not intended to be used as user functions. See the code example below: +If the loaded assembly contains many __public static__ (__Public Shared__ in VB.NET) methods, this might produce some clutter in the Edit Expression dialog, when browsing for existing user functions. To overcome this problem, you can use the IsVisible attribute to hide any methods, which are not intended to be used as user functions. See the code sample below: __Example:__ {{source=CodeSnippets\CS\API\Telerik\Reporting\Expressions\UserFunctionsSnippets.cs region=UserFunctionsAttributeIsVisibleSnippet}} {{source=CodeSnippets\VB\API\Telerik\Reporting\Expressions\UserFunctionsSnippets.vb region=UserFunctionsAttributeIsVisibleSnippet}} +## User Functions Visibility in Report Designers + +As of 2025 Q1 (19.0.25.211), the __User Function__ resolution behavior has been changed. The `IsVisible` property of the `Function` attribute can now be used to more precisely control which functions are loaded by the Reporting Engine. Below you can find more information about the new behavior: + +* By default, all public static methods in the chosen assembly(ies) are loaded; +* If at least one public static method in the assembly(ies) is decorated with the `Function` attribute and has its [IsVisible](/api/telerik.reporting.expressions.functionattribute#Telerik_Reporting_Expressions_FunctionAttribute_IsVisible) property set to `True` _(true by default)_, only public static methods with the same configuration will be loaded. Public static methods that are not decorated with the `Function` attribute or have their [IsVisible](/api/telerik.reporting.expressions.functionattribute#Telerik_Reporting_Expressions_FunctionAttribute_IsVisible) properties set to `False`, will not be loaded. +* If a type is decorated with the `Function` attribute and has its [IsVisible](/api/telerik.reporting.expressions.functionattribute#Telerik_Reporting_Expressions_FunctionAttribute_IsVisible) property set to `False`, none of the methods in this class will be loaded. +* If a type is decorated with the `Function` attribute and has its [IsVisible](/api/telerik.reporting.expressions.functionattribute#Telerik_Reporting_Expressions_FunctionAttribute_IsVisible) property set to `True`, all methods in it, except for the ones decorated with `IsVisible = False`, will be loaded. + ## Providing metadata for functions You can provide descriptive metadata about your user functions through attributes. Attributes are specialized classes that are applied to code elements. At compile time, attributes are emitted into metadata that is available to the common language runtime and reporting engine.