NF9 Annotated Process Parameters
From iDempiere en
Feature: Annotated Process Parameters
Goal: Development
Developer: Saulo Gil
Feature Ticket: IDEMPIERE-5025
Description:
This feature was created in order to simplify the task of reading process parameters by using the new @Parameter annotation. Here's a comparison between new and the traditional way of achieving this goal, using the OrderBatchProcess class as reference.
Using this feature
@org.adempiere.base.annotation.Process public class OrderBatchProcess extends SvrProcess { @Parameter private int p_C_DocTypeTarget_ID = 0; @Parameter private String p_DocStatus = null; @Parameter private int p_C_BPartner_ID = 0; @Parameter private String p_IsSelfService = null; @Parameter private Timestamp p_DateOrdered_From = null; @Parameter private Timestamp p_DateOrdered_To = null; @Parameter private String p_DocAction = null; @Parameter private String p_IsDelivered = null; @Parameter private String p_IsInvoiced = null; protected void prepare (){ /* nothing else to do here */ } }
Traditional way
protected void prepare () { ProcessInfoParameter[] para = getParameter(); for (int i = 0; i < para.length; i++) { String name = para[i].getParameterName(); if (para[i].getParameter() == null && para[i].getParameter_To() == null) ; else if (name.equals("C_DocTypeTarget_ID")) p_C_DocTypeTarget_ID = para[i].getParameterAsInt(); else if (name.equals("DocStatus")) p_DocStatus = (String)para[i].getParameter(); else if (name.equals("IsSelfService")) p_IsSelfService = (String)para[i].getParameter(); else if (name.equals("C_BPartner_ID")) p_C_BPartner_ID = para[i].getParameterAsInt(); else if (name.equals("DateOrdered")) { p_DateOrdered_From = (Timestamp)para[i].getParameter(); p_DateOrdered_To = (Timestamp)para[i].getParameter_To(); } else if (name.equals("DocAction")) p_DocAction = (String)para[i].getParameter(); else if (name.equals("IsDelivered")) { p_IsDelivered = (String)para[i].getParameter(); } else if (name.equals("IsInvoiced")) { p_IsInvoiced = (String)para[i].getParameter(); } else log.log(Level.SEVERE, "Unknown Parameter: " + name); } } // prepare
In case the class attribute name doesn't match the parameter name, we can use the name annotation attribute as follows:
@Parameter(name = "declaredName") private String parameter = null;