Biblioteca de Desarrollo vTiger ( vtlib )

Módulos

La clase Vtiger_Module proporciona una API para trabajar con los módulos de vtiger CRM.

include_once('vtlib/Vtiger/Module.php');
$moduleInstance = new Vtiger_Module();
$moduleInstance->name = 'Payslip';
$moduleInstance->save();
$moduleInstance->initTables();
$menuInstance = Vtiger_Menu::getInstance('Tools');
$menuInstance->addModule($moduleInstance);

Vtiger_Module-> initTables() API se inicializará (creara) las 3 tablas necesarias que un módulo debe tener, como se explica a continuación:

Tabla Convención de nombre Descripción
BaseTable vtiger_[MODULENAME] Contiene los campos por default del nuevo modulo
Customtable vtiger_[MODULENAME]cf Contiene los campos personalizados del nuevo modulo

Vtiger_Menu-> addModule ([ModuleInstance]) API creará elementos del menú que sirven como punto de entrada de la interfaz de usuario para el módulo.

Module Block

La clase Vtiger_Block proporciona un API para trabajar con un bloque de módulo, el cual actua como recipiente de los campos manteniendolos juntos. En el ejemplo que se da a continuación se describe la forma de crear nuevos bloques para el módulo creado anteriormente:

include_once('vtlib/Vtiger/Module.php');
$blockInstance = new Vtiger_Block();
$blockInstance->label = 'LBL_PAYSLIP_INFORMATION';
$moduleInstance->addBlock($blockInstance);
$blockInstance2 = new Vtiger_Block();
$blockInstance2->label = 'LBL_CUSTOM_INFORMATION';
$moduleInstance->addBlock($blockInstance2);

Nota: LBL_CUSTOM_INFORMATION debe ser creado siempre para apoyar a los nuevos campos personalizados que se creen para un módulo.

Module Field

Clase Vtiger_Field ofrece API para trabajar con el campo de un Módulo, los cuales son los elementos básicos que almacenan y muestran los datos de registro del módulo.

En el ejemplo que se da a continuación se describe la forma de crear nuevo campo para el módulo creado anteriormente:

include_once('vtlib/Vtiger/Module.php');
$fieldInstance = new Vtiger_Field();
$fieldInstance->name = 'PayslipName';
$fieldInstance->table = 'vtiger_payslip';
$fieldInstance->column = 'payslipname';
$fieldInstance->columntype = 'VARCHAR(100)';
$fieldInstance->uitype = 2;
$fieldInstance->typeofdata = 'V~M';
$blockInstance->addField($fieldInstance);

Nota: El fieldInstance name es un valor obligatorio, esta establecido before saving / adding to block. Otros valores (si no se establece) quedarían pendientes, como se explica a continuación

Campo Descripción
$fieldInstance->table Tabla base del modulo
$fieldInstance->column $fieldInstance->name in lowercase [The table will be altered by adding the column if not present]
$fieldInstance->columntype VARCHAR(255)
$fieldInstance->uitype 1
$fieldInstance->typeofdata V~O
$fieldInstance->label $fieldInstance->name [entrada de asignación debe estar presente también en el archivo de idioma del módulo]
Optional Settings $fieldInstance->presence 0 – Always Active (Cannot be modified using Layout Editor in 5.1.0), 1 – Mark it In Active (5.1.0 onwards), 2 – Active Property can be modified using Layout Editor (5.1.0 onwards)
$fieldInstance->quickcreate 0 – Enable field in Quick Create Form 1 – Disable field on Quick Create Form
$fieldInstance->masseditable 0 – Permanently Disallow field for mass editing (5.1.0 onwards), 1 – Allow field for mass editing (5.1.0 onwards), 2 – Disallow field for mass editing (but can be made available using Layout Editor 5.1.0 onwards)

Entity Identifier

Es uno de los Campo obligatorio e importantes que se debe establecer como un identificador de entidad una vez creado el módulo. Este campo se utiliza para mostrar los detalles en 'Last Viewed Entries' etc ...

$moduleInstance->setEntityIdentifier($fieldInstance);

Establecer Valores en lista de selección (Set Picklist Values)

Si el campo es de tipo Picklist (uitype 15, 16, 33, 55, 111), entonces usted puede configurar los valores iniciales utilizando la siguiente API:

$fieldInstance->setPicklistValues( Array ('Value1', 'Value2') );

Si el campo es de tipo Popup select (uitype = 10), puede configurar los módulos relacionados que pueden ser seleccionados a través de ventanas emergentes utilizando la siguiente API:

$fieldInstance->setRelatedModules(Array('OtherModule1', 'OtherModule2'));

Para desarmar la relacion de un módulo puede utilizar la siguiente API:

$fieldInstance->unsetRelatedModules(Array('OtherModule2'));

Establecer la propiedad MassEdit (Set MassEdit property)

Se puede lograr que un campo este disponible para la edición masiva, para ello puede utilizar las siguientes formas descritas a continuación: Al crear el campo que puede establecer la propiedad:

include_once('vtlib/Vtiger/Module.php');
$fieldInstance = new Vtiger_Field();
$fieldInstance->name = 'TestField';
...
...
$blockInstance->addField($fieldInstance);

Si usted tiene un campo existente de su propiedad este puede ser actualizado mediante la API:

$fieldInstance->setMassEditable(value);

El valor establecido para la propiedad MassEdit, tiene los siguientes significado:

Valor Descripción
0 No disponible para la edición masiva y esta propiedad no pueden ser controlados por el usuario.
1 Disponible para editar en masa
2 No disponible para la edición masiva pero la propiedad puede ser controlado por el usuario (a través de la Disposición de Administración etc)

Module Filter

La clase Vtiger_Filter ofrece API para trabajar con vista personalizada de un módulo o el filtro. La pantalla de la vista de lista se controla a través de estos filtros.

En el ejemplo que se da a continuación se describe la forma de crear nuevo filtro para el módulo:

include_once('vtlib/Vtiger/Module.php');
$filterInstance = new Vtiger_Filter();
$filterInstance->name = 'All';
$filterInstance->isdefault = true;
$moduleInstance->addFilter($filterInstance);

Configurar campos

Para agregar campos al filtro se puede utilizar la siguiente API:

$filterInstance->addField($fieldInstance, $columnIndex);

Donde $columnIndex(opcional) es el orden de índice en el que el campo debe aparecer en la vista de lista.

Normas de instalación

Una vez que el campo se añade a un filtro puedes usar regla de instalación (condiciónes) para filtrar, utilizando la siguiente API:

$filterInstance->addRule($fieldInstance, $comparator, $compareValue, $columnIndex);

Donde $comparador podría ser uno de los siguientes:

EQUALS
NOT_EQUALS
STARTS_WITH
ENDS_WITH
CONTAINS
DOES_NOT_CONTAINS
LESS_THAN
GREATER_THAN
LESS_OR_EQUAL
GREATER_OR_EQUAL

$compareValue es el valor del campo con el que tiene que ser comparado. $columnIndex (opcional) es el orden en el que se debe aplicar esta condición regla.

Un módulo podría estar asociada con varios registros de otro módulo que se muestra en la pestaña "Información adicional" en la vista de detalles.

El ejemplo dado a continuación describe la manera de crear una relación entre un módulo de Hoja de sueldo y Cuentas:

include_once('vtlib/Vtiger/Module.php');
$moduleInstance = Vtiger_Module::getInstance('Payslip');
$accountsModule = Vtiger_Module::getInstance('Accounts');
$relationLabel  = 'Accounts';
$moduleInstance->setRelatedList(
      $accountsModule, $relationLabel, Array('ADD','SELECT')
);

Con esto usted puede agregar una o más cuentas en los registros de nómina. Para excluir a la relación entre los módulos utilizan la siguiente:

$moduleInstance->unsetRelatedList($targetModuleInstance);

About setRelatedList API

Vtiger_Module->setRelatedList(TARGET MODULE[, HEADER LABEL, ALLOWED ACTIONS, CALLBACK FUNCTION NAME]);

TARGET MODULE Nombre del módulo al que relación es ser de configuración.
HEADER LABEL Opcional (por defecto = [META MÓDULO]) Etiqueta a utilizar en el Más información relacionada con la vista de lista.
ALLOWED ACTIONS ADD o SELECT (default = false) ¿Cuál botones se debe mostrar en la vista de lista relacionado al agregar registros.
CALLBACK FUNCTION NAME Opcional (por defecto = get_related_list) La función debe estar definido en el [FUENTE MÓDULO] clase. Esto debería generar las entradas ListView para la visualización.

Nota: Esta API creará una entrada en la tabla vtiger_crmentityrel para realizar un seguimiento de la relación entre los registros de un módulo. Los módulos estándart disponibles en vtiger CRM manejan la relación en tablas separadas y realizan la unión para obtener los datos específicos de cada módulo. Este es un intento de lograr un comportamiento genérico. Usted puede escribir como es de costumbre llamando las funciones para atender las consultas de lista relacionadas que se adapten a sus necesidades.

Limitaciones

Siguientes limitaciones se aplican para las API de listas relacionadas:

  1. Las variables de clase de los módulos estándar no se establecen según lo requiera el get_related_list API módulo vtlib. El manejo del caso debe ser manejado con la función @vtlib_setup_modulevars en include /utils/vtlibUtils.php.

  2. API get_related_list añadido al módulo de clase no maneja union en las tablas donde algunos módulos como (Cuentas) almacenan información, por lo tanto todos los detalles no son mostrados en la lista Visualización. (Ejemplo de clasificación en el campo de la ciudad en vista de lista relacionado fallará si dieOnError es cierto)

Acceso Compartido a Modulos

Para configurar acceso compartido en el módulo se puede hacer como se muestra a continuación:

El ejemplo que se da a continuación describe la forma de configurar el módulo de Nómina como Privado

include_once('vtlib/Vtiger/Module.php'); $moduleInstance = Vtiger_Module::getInstance('Payslip'); $moduleInstance->setDefaultSharing('Private');

El [PERMISSION_TYPE] puede ser uno de los siguientes:

 Public_ReadOnly
 Public_ReadWrite
 Public_ReadWriteDelete
 Private

Module Tool

Características como la importación, la exportación se denominan como herramientas de módulos. Estas herramientas pueden activarse o desactivarse como se muestra a continuación: El ejemplo que se da a continuación describe la manera de activar y desactivar las herramientas para el módulo de Nómina

include_once('vtlib/Vtiger/Module.php');
$moduleInstance = Vtiger_Module::getInstance('Payslip');
$module->enableTools(Array('Import', 'Export'));
$module->disableTools('Export');

Module Event

Para registrar un evento en un módulo, utilice lo siguiente:

include_once('vtlib/Vtiger/Event.php');
Vtiger_Event::register('<MODULENAME>', '<EVENTNAME>', '<HANDLERCLASS>', '<HANDLERFILE>');
MODULENAME Módulo para qué eventos deben registrarse
EVENTNAME vtiger.entity.aftersave, vtiger.entity.beforesave
HANDLERCLASS Clase de controlador de eventos, mira el siguiente ejemplo
HANDLERFILE Archivo donde se define HANDLERCLASS (debe ser dentro del directorio vtiger CRM)

Ejemplo

El registro de eventos de devolución de llamada antes y después de guardar.

if(Vtiger_Event::hasSupport()) {
      Vtiger_Event::register(
            'Payslip', 'vtiger.entity.aftersave',
            'PayslipHandler', 'modules/Payslip/PayslipHandler.php'
      );
      Vtiger_Event::register(
            'Payslip', 'vtiger.entity.beforesave',
            'PayslipHandler', 'modules/Payslip/PayslipHandler.php'
          );
}

modules/Payslip/PayslipHandler.php

<?php
class PayslipHandler extends VTEventHandler {
      function handleEvent($eventName, $data) {
            if($eventName == 'vtiger.entity.beforesave') {
                // Entidad está a punto de ser salvo, tome acción
                        }
            if($eventName == 'vtiger.entity.aftersave') {
                // Entidad se ha guardado, tome acción

                        }
          }
}
?>

Habilitar Webservice en Modulos

Usted tendrá que invocar la API de configuración para habilitar el soporte para los módulos personalizados.

include_once('vtlib/Vtiger/Module.php');
$moduleInstance = Vtiger_Module::getInstance('Payslip');
$moduleInstance->initWebservice();

Nota: Cuando se importa un módulo, el Webservice se invoca automáticamente e inicializa el API .

Se puede añadir enlaces web personalizado al módulo utilizando la siguiente API

include_once('vtlib/Vtiger/Module.php'); $moduleInstance = Vtiger_Module::getInstance('ModuleName'); $moduleInstance->addLink([LinkType], [LinkLabel], [LinkURL]);

LinkType Tipo de Enlace como -DetailView: añadirá un enlace en el menú "Más acciones" en la vista de detalles del registro.DETAILVIEWBASIC: añadirá un enlace a la lista "Acciones" en la vista de detalles del registro. DETAILVIEWWIDGET: Will añadir un widget en la parte derecha de la vista de detalles del registro, similar a Tag widget de nube. ListView: añadirá un enlace bajo el botón 'Más acciones' en la vista de lista de un módulo. LISTVIEWBASIC: añadirá un botón en la vista de lista del módulo similar a Eliminar, botones Misa Editar.
LinkLabel Etiqueta a utilizar para el enlace al mostrar
LinkURL URL del enlace. Puede utilizar variables como $variablename$

En los modulos ListView handler page (modules/Payslip/ListView.php) necesitará este pedazo de código (before the call to $smarty->display()):

include_once('vtlib/Vtiger/Link.php');
$customlink_params = Array('MODULE' => $currentModule, 'ACTION'=>
vtlib_purify($_REQUEST['action']), 'CATEGORY' => $category);
$smarty->assign('CUSTOM_LINKS', Vtiger_Link::getAllByType(getTabid($currentModule),
Array('LISTVIEW', 'LISTVIEWBASIC'), $customlink_params));

En los modulos DetailView handler page (modules/Payslip/DetailView.php) necesitará este pedazo de código (before the call to $smarty->display()) :

include_once('vtlib/Vtiger/Link.php');
$customlink_params = Array('MODULE' => $currentModule, 'RECORD' => $focus->id, 'ACTION'=>
vtlib_purify($_REQUEST['action']));
$smarty->assign('CUSTOM_LINKS', Vtiger_Link::getAllByType(getTabid($currentModule),
Array('DETAILVIEW', 'DETAILVIEWBASIC', 'DETAILVIEWWIDGET'), $customlink_params));

Nota: Las variables $MODULE$, $ACTION$ and $RECORD$ en el linkUrl, serán reemplazados por los valores establecidos a través DetailView.php

Las variables $MODULE$, $ACTION$, $CATEGORY$ en el LinkURL, serán reemplazados con los valores establecidos a través ListView.php

Special LinkType

Siguiendo LinkTypes son tratados de forma especial durante el procesamiento a mostrar:

LinkType Descripción
HEADERSCRIPT El enlace será tratado como un tipo javascript y se importará en la sección principal de la página de salida HTML como script type=’text/javascript’ src=’linkurl’/script
HEADERCSS El enlace será tratado como un tipo CSS y se importará en la sección principal de la página de salida HTML como link rel=’stylesheet’ type=’text/css’ href=’linkurl
HEADERLINK Usted puede ver estos enlace agrupado en el apartado Más en el panel encabezado superior. Es útil si desea proporcionar herramientas de utilidad como Bookmarklet etc.

Package Export

vtlib ofrece API que ayuda en la exportación de módulos en formato zip el cual puede utilizar para futura importación a través del Administrador de modulos.

require_once('vtlib/Vtiger/Package.php');
require_once('vtlib/Vtiger/Module.php');
$package = new Vtiger_Package();
$package->export('<MODULE Instance>', '<DESTINATION DIR>',
'<ZIPFILE NAME>', <DIRECT DOWNLOAD>);
MODULE Instance Ejemplo Vtiger_Module a exportar (packaged)
DESTINATION DIR (Opcional: Predeterminado = prueba / vtlib) Directorio donde se debe crear el archivo zip de salida
ZIPFILE NAME (Opcional: Predeterminado = modulename-timestamp.zip) nombre de archivo, tipo ZIP a utilizar para el archivo de salida.
DIRECT DOWNLOAD (Opcional: Predeterminado = false) Si es cierto, el archivo zip creado serán transmitidos para su descarga y archivo zip se eliminarán después de eso.

Ejemplo

require_once('vtlib/Vtiger/Package.php');
require_once('vtlib/Vtiger/Module.php');
$package = new Vtiger_Package();
$package->export(
      Vtiger_Module::getInstance('Payslip'),
      'test/vtlib',
      'Payslip-Export.zip',
      true
);

Nota: Por favor asegurese que el directorio test/vtlib exista en el directorio raíz de vtigerCRM y tenga privilegios de escritura.

Package Import

Nota: Use el Administrador de Modulo

Language Export

vtlib ofrece una API para exportar el paquete de idioma como un archivo zip (paquete) el cual se puede utilizar para importar a través del Administrador de Modulos.

require_once('vtlib/Vtiger/Module.php');
require_once('vtlib/Vtiger/Language.php');
$language = new Vtiger_Language();
$language->export('<LanguagePrefix>', 
'<DESTINATION DIR>', '<ZIPFILE NAME>','<DIRECT DOWNLOAD>');
Elemento Descripción
LanguageCode_CountryCode LanguagePrefix (LanguageCode_CountryCode) del Lenguaje que se exportara en el (packaged)
DESTINATION DIR (Optional: Default=test/vtlib) Directorio donde se debe crear el archivo zip de salida.
ZIPFILE NAME (Optional: Default=modulename-timestamp.zip) nombre de archivo, tipo ZIP a utilizar para el archivo de salida.
DIRECT DOWNLOAD (Optional: Default=false) Si es cierto, el archivo zip creado serán transmitidos para su descarga y archivo zip se eliminarán después de eso.

Ejemplo

require_once('vtlib/Vtiger/Module.php');
require_once('vtlib/Vtiger/Language.php');
$language = new Vtiger_Language();
$language->export(
      'en_us',
      'test/vtlib',
      'en_us-Export.zip',
      true
);

Nota: Asegurese de que el directorio test/vtlib existe en el directorio raíz vtigerCRM y tenga privilegios de escritura.

Console Tool

CLI es la herramienta de linea de comandos (interfaz de línea de comandos) que le ayudará a obtener un esqueleto de las aplicación o extensiones para Vtiger.

Start

php -f vtlib/tools/console.php. Press CTRL+C o "quit" para salir.

Elija las opciones de abajo:

  1. Create New Module.
  2. Create New Layout.
  3. Create New Language Pack.
  4. Create Test Language Pack.
  5. Import Module.
  6. Update Module.
  7. Remove Module. Enter your choice:

Create New Module

Ingresa tu elección: 1

>>> MODULE <<<
Enter module name: MySandboxModule
Entity field (Name): name
Creating ...DONE.

Create New Layout

Atencion, esta opcion es experimental**

Create New Language Pack
Enter your choice: 3
>>> LANGUAGE <<<
Enter (languagecode_countrycode): kn_in
Creating ...DONE.

Import Module

Enter package path: /Downloads/OthModule.zip Importing ...DONE.

Nota:

php -f vtlib/tools/console.php -- --import=/Downloads/OthModule.zip

Update Module

Enter package path: /Downloads/OthModule-v2.zip Updating ...DONE.

Nota:

php -f vtlib/tools/console.php -- --update=/Downloads/OthModule-v2.zip

Remove Module

Enter package path: /Downloads/OthModule.zip Removing ...DONE.

Nota:

php -f vtlib/tools/console.php -- --remove=OthModule