How To Avoid Copy Paste With Help Of Attributes In Acumatica
Hello everybody,
today I want to leave a short note on how to avoid Copy/paste with help of custom attributes.
Imagine following scenario. You have some set of duplicated code, which you need to apply at FieldSelecting . One of the ways of achieving this can be creation of some class and method within this class, which will handle that functionality, and then just copy/paste creation of the instance of the class at any place, where you need to have that business logic applied.
But you can use another way. You can use custom attributes. You can create your attribute, and then use that attribute over all places, where you may have a need for calling your business logic. In order to work that properly you'll need to inherit your Attribute from PXEventSubscriberAttribute, IPXFieldSelectingSubscriber . For example you can accomplish it like this:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Class | AttributeTargets.Parameter | AttributeTargets.Method)] public class SomeAttribute : PXEventSubscriberAttribute, IPXFieldSelectingSubscriber { protected Type _TargetField; protected Type _DacType; public SomeAttribute(Type dacType, Type targetField) { _DacType = dacType; _TargetField = targetField; } public virtual void FieldSelecting(PXCache sender, PXFieldSelectingEventArgs e) {
var graph = sender.Graph;
//and some other logic
}
Also this can be applied to the field like this:
public class YourDacClass
{
[Some(typeof(DacClass), typeof(DacClass.someField))] [PXUIField(DisplayName = "Value")] public virtual string SomeField { get; set; }
}
and that's it. Now you can have move your duplication logic to attribute SomeAttribute, and enjoy smaller amount of code.