crear nuevo módulo - Printable Version +- CoreBOSBB (https://discussions.corebos.org) +-- Forum: Support (https://discussions.corebos.org/forumdisplay.php?fid=17) +--- Forum: User Support (https://discussions.corebos.org/forumdisplay.php?fid=6) +--- Thread: crear nuevo módulo (/showthread.php?tid=943) |
RE: crear nuevo módulo - joebordes - 12-14-2022 Hola hay varias maneras de hacer esto. 1.- javascript Cada módulo tiene un fichero ModuleFile.js que carga código javascript propio del módulo. Como este fichero está dentro del módulo se exporta con el y se copiará al instalarlo en otra instalación. El problema de esto es que has de estás cómodo capturando los eventos de guardar y balancearlos con las validaciones y demás. https://github.com/tsolucio/corebos/blob/master/vtlib/ModuleDir/ModuleFile.js 2.- save_module Cada módulo tiene un fichero ModuleFile.php que contiene un método llamado save_module() este método se llama al finalizar una operación de "guardar". Tienes a tu disposición todos los campos y sus valores y puedes ejecutar cualquier operación en la base de datos. Es el sitio ideal para unos cálculos rápidos. Recuerda que este método se llama antes de los flujos de trabajo por lo que si actualizas la base de datos con valores calculados has de actualizar también el array column_fields para que los flujos de trabajo "vean" los nuevos valores. Este fichero, al igual que el de javascript se copia al exportar/importar el módulo con lo que tus cambios se copiarán de una instalación a la otra el problema que tiene este es que si necesitas cambiar los cálculos tienes que modificar el código https://github.com/tsolucio/corebos/blob/master/vtlib/ModuleDir/ModuleFile.php#L101 3.- eventos coreBOS tiene una gran variedad de eventos en los que puedes añadir tu código, por ejemplo, tienes un evento `after_save` En el wiki se explica cómo añadir tu código a estos eventos. así podrías crear un script dentro del directorio de tu módulo y crear funciones para diferentes eventos. Después registras estos eventos en el método `vtlib_handler` de ModuleFile.php o en el propio manifest.xml Este es similar a la opción 2, la ventaja es que tienes más opciones de cuando se ejecuta tu código y que puedes aplicar cambios en otros módulos si es necesario https://github.com/tsolucio/corebos/blob/master/vtlib/ModuleDir/ModuleFile.php#L112 https://github.com/tsolucio/corebos/blob/master/vtlib/ModuleDir/manifest.xml#L210 https://discussions.corebos.org/documentation/doku.php?id=en:devel:corebos_hooks 4.- flujos de trabajo si los cálculos los puedes hacer con flujos de trabajo, entonces puedes crear los flujos de trabajo mediante código en el método `vtlib_handler` al instalar. La gran ventaja de este es que los cálculos los puede controlar/cambiar cualquier usuario administrador en cualquier instalación done los instales. La desventaja es que es un poco más complejo crear los flujos de trabajo mediante código y no se puede hacer todo lo que se puede hacer con código utilizando flujos de trabajo (aunque en realidad son muy potentes). https://github.com/tsolucio/corebos/blob/master/build/changeSets/PotentialForecastAmount.php#L52-L66 RE: crear nuevo módulo - inspectorflint - 12-15-2022 Muchas gracias, Joe. RE: crear nuevo módulo - inspectorflint - 08-02-2023 Buenas tardes a todos: He creado un nuevo módulo en la última versión , directamente con el constructor de módulos (una gran mejora ) . Una vez creado, y para realizar una funcionalidad añadida desde el modulo de facturas, añadí un botón que crea elementos en el modulo nuevo a partir de una factura , en concreto son recibos y los crea con los diferentes vencimientos que recoge de campos personalizados de la cuenta. Hasta aquí perfecto. Lo que he visto es que ahora en la tabla vtiger_crmentity hay un campo adicional, ccuid, que también aparece en la tabla vtiger_crmobject, pero no sé como crear el valor de ese campo. Sin ese campo, ni la entrada en la tabla vtiger_crmobject, sí se crean los registros en el nuevo módulo, pero al intentar añadir una Acción de negocio tipo LISTLINKROW , al cargar el listview da un error... select id from vtiger_ws_entity where name=''select id from vtiger_ws_entity where name='' Fatal error: Uncaught WebServiceException: Permission to perform the operation is denied for id: 0 in /home/cermeval/www/crm/include/Webservices/VtigerWebserviceObject.php:78 Stack trace: #0 /home/cermeval/www/crm/include/Webservices/Retrieve.php(206): VtigerWebserviceObject::fromId(Object(PearDatabase), '0') #1 /home/cermeval/www/crm/modules/com_vtiger_workflow/VTEntityCache.inc(36): vtws_retrieve_deleted('0x13402', Object(Users)) #2 /home/cermeval/www/crm/modules/com_vtiger_workflow/VTEntityCache.inc(164): VTWorkflowEntity->__construct(Object(Users), '0x13402', true) #3 /home/cermeval/www/crm/modules/com_vtiger_workflow/VTSimpleTemplate.inc(30): VTEntityCache->forId('0x13402') #4 /home/cermeval/www/crm/modules/BusinessActions/BusinessActions.php(322): VTSimpleTemplate->render(Object(VTEntityCache), '0x13402') #5 /home/cermeval/www/crm/include/ListView/ListViewController.php(653): BusinessActions::getAllByType(87, Array, Array, '5', '13402') #6 /home/cermeval/www/crm/modules/Vtiger/ListView.php(224): ListViewController-> in /home/cermeval/www/crm/include/Webservices/VtigerWebserviceObject.php on line 78 Si creo manualmente un registro del nuevo módulo, me genera este valor: f74503af1005df9286709fddf62edae40fc43f75 Como puedo generar ese valor para los registros creados automáticamente? Gracias. RE: crear nuevo módulo - joebordes - 08-02-2023 entiendo que estas creando registros insertando directamente in la base de datos? si es así, no deberías ya que aparte de detalles como el que mencionas también estas perdiendo toda la potencia de los flujos de trabajo además es más sencillo hacerlo utilizando la infraestructura de la aplicación https://github.com/tsolucio/corebos/blob/master/modules/BusinessActions/BusinessActions.php#L373-L395 ahi puedes ver como se crea un registro desde dentro de la aplicación. solo has de cambiar el nombre del módulo y los nomres de los campos ¿has pensado en utilizar el módulo de cobro pagos? ese fue creado para la gestión de recibos RE: crear nuevo módulo - joebordes - 08-02-2023 por si aun quieres seguir insertando directamente, utiliza este método: https://github.com/tsolucio/corebos/blob/master/data/CRMEntity.php#L102 RE: crear nuevo módulo - inspectorflint - 08-02-2023 (08-02-2023, 04:34 PM)joebordes Wrote: por si aun quieres seguir insertando directamente, utiliza este método: Joe. Gracias por la rapidez La verdad es que me he decidido por la inserción directa porque dependiendo de la forma de pago de la cuenta relacionada con la factura, hay que generar 1, 2 3 o 4 recibos, con vencimientos diferentes cada uno de ellos e importes diferentes también, a partir de una fecha valor que indica el cliente. Algo lioso, y me encontraba más cómodo de esta forma, no se si seria posible hacer esto a través de la infraestructura. De todas formas, investigaré eso que me indicas Saludos RE: crear nuevo módulo - joebordes - 08-02-2023 si, se puede, incluso solo con flujos de trabajo creo que tengo un video muy muy viejo donde explico como hacer eso desde la forma de pago de una facura pero puedes utilizar el código de arriba tambien para crear los otros registros RE: crear nuevo módulo - joebordes - 08-02-2023 https://youtu.be/QazE4NkCtUI |