Ideas for Acumatica

Feedback processing: We do not reply to all messages, but we do read them, analyze them, and work to improve Acumatica based on the feedback we receive. Ideas and comments may not appear immediately. Some legitimate ideas are flagged as spam and will be added when we review the spam folders.
Content: This portal is for product ideas and feedback only. If you need customer service assistance, contact your Acumatica Support Partner, submit a support case, or get assistance from community resources: LinkedIn Group or StackOverflow
No Reliance: Information is maintained on a best-efforts basis and may be changed without notice. Acumatica cannot guarantee the accuracy of the information provided or guarantee completion of features/ideas described on this portal.

Add possibility to order customization plugins

It would be very helpful to be able to define an execution order for the customization plugins during the publishing process. There may be direct or indirect dependencies between plugins, as the solution grows.
This would be similar to the order defined for the SQL script inside the customization project. Maybe start all the plugins with a default order of 50, and with a class level attribute we could change the order number on specific plugins.

  • Coman Mihai
  • Jan 17 2019
  • Gathering Feedback
  • Attach files
  • Coman Mihai commented
    1 Feb, 2019 06:26am

    Hello Vladimir,

    Inside a single customization project you can have multiple customization plugin classes.
    In our project we mainly use plugins for migration purposes (see the attached image) and we separate them depending on area or business logic. During migration it can be important to control the order of these plugins.
    Right now they don't seem to have a specific order (not even alphabetical).


    One problem I ran into was that a plugin failed because a (custom) setup table was empty. That table is populated during the migration/customization publication, but in another plugin (for that specific area).

     

    Of course, one quick workaround would be to run all the migration code from inside one plugin, so as to control the order, but I think that defeats the purpose. Also, when publishing the customization you would only see one plugin being run for a very long time (not knowing the exact step).

     

    My idea was to have something similar to what already exists for custom scripts. Start each plugin with a default order value (0, for example), and add the possibility to modify this value with an attribute on the class level. That way, in my example, I could set the priority for the plugin that inserts setup data to, let's say, -50.

  • Vladimir Panchenko commented
    31 Jan, 2019 06:06pm

    Could you please elaborate your concern? I'm not sure that I fully understand your question.

    Right now you can define the order on the Customization Projects screen (please see the screenshot). This value is saved to your customization project and will be preserved during the export.

  • Angel Sanchez commented
    17 Jan, 2019 05:03pm

    We faced this same issue. Below I will detail what I did to achieve this functionality within our VS Solution.

    (I apologize if this is hard to read, I don't see any code tag button)

     

    Make a class with your 2 letter prefix, IE "EX"

    public class EXCustomizationPlugin : CustomizationPlugin

    {

    public override void UpdateDatabase()

    {

    EXSomething.UpdateDatabase(this);

    }

     

    public override void OnPublished()

    {

    EXSomething.OnPublished(this);

    }

    }

     

    public static class EXSomething

    {

    public static void UpdateDatabase(CustomizationPlugin plugin)

    {

    plugin.WriteLog($"UpdateDatabase running from {nameof(EXSomething)}");

    }

     

    public static void OnPublished(CustomizationPlugin plugin)

    {

    plugin.WriteLog($"OnPublished running from {nameof(EXSomething)}");

    }

    }

     

    This will allow you to run your plugins in whichever order you please.

    I aim on writing a blog post on this topic that goes into more depth soon, so I might update this topic with the link when that happens.