User-821857111 posted
You can do this using Reflection. I am assuming that you have a setup along these lines:
App_Code
Admin.cshtml //reports for Admin
Sales.cshtml //reports for Sales
etc
Lets also say you have a function named Test in your reports, and the report takes some parameters:
@functions {
public static string Test(DateTime startDate, DateTime endDate)
{
return "Hello from Admin";
}
}
You can call this in the following way:
var fileName = "Admin";
var methodName = "Test";
var userParams = new object[] { DateTime.Now.AddDays(-7), DateTime.Now };
var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(a => a.FullName.StartsWith("App_Code"));
if (assemblies.Any())
{
var assembly = assemblies.FirstOrDefault(a => a.DefinedTypes.Any(d => d.Name == fileName));
var method = assembly.DefinedTypes.First(d => d.Name == fileName).DeclaredMethods.FirstOrDefault(m => m.Name == methodName);
var message = method.Invoke(null, userParams);
}