Herramientas de usuario

Herramientas del sitio


plugins:ejemploplugin

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
plugins:ejemploplugin [2016/03/21 18:34]
127.0.0.1 editor externo
plugins:ejemploplugin [2021/07/02 12:37] (actual)
fcristina [Implementación de clases del package ar.com.disytel.plugin.reportProvider]
Línea 154: Línea 154:
 Notar que la modificación de la superclase no presenta problema alguno: Esta es la misma clase del ejemplo anterior (el cual implementaba el método **preBeforeSave()**), ampliada no solo para persistencia sino también para lógica de documentos. Notar que la modificación de la superclase no presenta problema alguno: Esta es la misma clase del ejemplo anterior (el cual implementaba el método **preBeforeSave()**), ampliada no solo para persistencia sino también para lógica de documentos.
  
 +
 +
 +==== Modificacion de las opciones de acciones de documento ====
 +
 +Es posible incorporar o eliminar acciones sobre la lista de posibles acciones sobre un documento en particular.  Simplemente debe implementarse la clase correspondiente al documento (ya sea extendiendo de **MPluginPO** o **MPluginDocAction**) e implementando la interface **DocOptions**.
 +
 +Dicha interface tiene simplemente un método llamando **customizeValidActions()** que recibe la información relevante del documento, las opciones actuales, etc.  Dicho método debe retornar el indice actual que referencia al total de opciones válidas.
 +
 +Se cuenta además con la clase **DocOptionsUtils**, la cual simplifica la tarea de incorporar o eliminar acciones.
 +
 +NOTA: Esta funcionalidad también es válida para una clase que extienda de PO (sin utilizar lógica de plugins), siempre y cuando implemente **DocOptions** y corresponda con el documento que se quiere procesar.
 +
 +Ejemplo: se requiere modificar las opciones de acción para un Payment.  La clase tiene que ser **MPayment** y debe implementar **DocOptions**:
 +
 +<code java>
 +package org.libertya.ejemplo.model
 +
 +import java.util.Properties;
 +
 +import org.openXpertya.model.PO;
 +import org.openXpertya.plugin.MPluginDocAction;
 +import org.openXpertya.process.DocAction;
 +import org.openXpertya.process.DocOptions;
 +import org.openXpertya.util.DocOptionsUtils;
 +
 +public class MPayment extends MPluginDocAction implements DocOptions {
 +
 + public MPayment(PO po, Properties ctx, String trxName, String aPackage) {
 + super(po, ctx, trxName, aPackage);
 + // TODO Auto-generated constructor stub
 + }
 +
 + @Override
 + public int customizeValidActions(String docStatus, Object processing,
 + String orderType, String isSOTrx, int AD_Table_ID,
 + String[] docAction, String[] options, int index) {
 +
 + // Si se esta completando el documento, incorporar la opción de WaitComplete
 + if (DocAction.ACTION_Complete.equals(docAction[0])) {
 + index = DocOptionsUtils.addAction(options, DocAction.ACTION_WaitComplete, index);
 + } else {
 + // En caso contrario permitir invalidar el documento
 + index = DocOptionsUtils.addAction(options, DocAction.ACTION_Invalidate, index);
 + }
 + // En todos los casos, quitar la accion ReActivate
 + index = DocOptionsUtils.removeAction(options, DocAction.ACTION_ReActivate, index);
 + return index;
 + }
 +}
 +
 +</code>
  
  
Línea 430: Línea 481:
 </code> </code>
  
 +
 +===== Implementación de clases del package ar.com.disytel.plugin.reportProvider =====
 +
 +A partir de la revision r2968, en caso de necesitar incorporar nuevos parámetros a un informe Jasper, pero sin necesidad de redefinir la clase por completo, es posible crear una clase que simplemente se encargue de incorporar al Jasper los parametros adicionales específicos del componente.
 +
 +Es importante que la clase respete los siguientes:
 +
 +  * Debe tener igual nombre de clase que la existente en Libertya CORE
 +  * Debe implementar la interfaz **org.openXpertya.plugin.report.ReportProviderInterface**, la cual contiene el método **addReportParametersToLaunch(MJasperReport report, PO po)**. 
 +
 +Este método inyecta dos parámetros:
 +
 +  * **MJasperReport report**: Reporte Jasper al cual podremos incorporarle nuevos parámetros previo a su rellenado.
 +  * **PO po**: El objeto base con la información a imprimir.  Por ejemplo si estamos imprimiendo una factura se recibirá un MInvoice, si estamos imprimiendo un recibo se recibirá un MAllocationHdr. Si por el contrario se está imprimiendo un listado, se recibirá null.
 +
 +Por ejemplo, suponiendo que es necesario incorporar nuevos parámetros para la impresión Jasper de facturas, la clase en CORE es **org.openXpertya.JasperReport.LaunchInvoice**, con lo cual sera necesario crear la clase **ar.com.disytel.plugin.reportProvider** e implementar **org.openXpertya.plugin.report.ReportProviderInterface**.
 +
 +<code java>
 +package ar.com.disytel.plugin.reportProvider;
 +import org.openXpertya.JasperReport.MJasperReport;
 +import org.openXpertya.model.MInvoice;
 +import org.openXpertya.model.PO;
 +import org.openXpertya.plugin.report.ReportProviderInterface;
 +
 +public class LaunchInvoice implements ReportProviderInterface {
 +
 + @Override
 + public void addReportParametersToLaunch(MJasperReport report, PO po) {
 + // Agregar los parámetros que necesitemos
 + report.addParameter("FOO", getFoo(po));
 + report.addParameter("BAR", getBar(po));
 + }
 +}
 +</code>
  
  
  
  
plugins/ejemploplugin.1458585243.txt.gz · Última modificación: 2021/04/30 19:20 (editor externo)