Quick Tip: Retrieving fields for any class in Kentico
Have you ever needed to get all the fields for a page type in Kentico? Maybe you needed to know the list of fields that make up a class in a custom module. In this blog, I’ll show you a quick way to retrieve the fields for any class in your system. And just for fun, I’ll implement it using a custom macro.
As with most things in Kentico, it’s quite easy to use the API to get data if you know where to look. Because everything is related within the system, you can quickly access any field (or fields) by specifying the code name for the object. This technique can help you return fields for objects, or even settings and configurations.
If you need to return the list of fields for a page type, the ClassStructureInfo API is your friend. This namespace within the DataEngine API provides access to class-level information for everything in the system. Let me know show you can use this API to get your class fields.
Create a custom macro
To begin, I created a custom macro. For my macro, I chose to have a single parameter passed in, which would be the codename for the class. Next, I added the ClassStructureInfo API call to retrieve list of the columns for the class.
Here is the full macro code.
[MacroMethod(typeof(List<string>), "Returns a list of fields for the class.", 1)]
[MacroMethodParam(0, "classcodename", typeof(string), "Class code name.")]
public static object GetClassFields(EvaluationContext context, params object parameters)
// Branches according to the number of the method's parameters
// Overload with one parameter
List<string> lstFields = new List<string>();
lstFields = ClassStructureInfo.GetColumns(ValidationHelper.GetString(parameters, ""));
// No other overloads are supported
throw new NotSupportedException();
With this code, I could easily retrieve a list of columns names for any class.
In the System / Macros / Console utility, I called the custom macro, specifying various class code names. I started with a page type.
Next, I chose a system class.
With this macro, I could then easily retrieve the information from anywhere in the site. Hopefully, this shows you how easily you can retrieve data using the API. Good luck!
You can learn more about custom macros here.