Vtlib Relacion entre Modulos de Entidades

Cómo asociar Módulos Estándar tales como Cuentas, Prospectos y Proveedores a un módulo Nuevo (Payslip) con m: m relación

A través de vtlib podemos establecer una relación entre un módulo estándar y uno nuevo usando la función setRelatedList:

$accounts=Vtiger_Module::getInstance('Accounts');
$accounts->setRelatedList(Vtiger_Module::getInstance('Payslip'), 'header',Array('ADD','SELECT'));

Esto establecería una relación m: m entre Cuentas y Payslip para que una nueva sección aparezca en la pestaña más información de las cuentas y debería funcionar.

Puede que tenga que agregar la etiqueta 'Header' al archivo de lenguaje de cuentas.

Esta relación m: m se basa en la función por defecto get_related_list (no se ha dado nombre de función en la llamada de ejemplo, por lo que la función get_related_list se utiliza de forma predeterminada) y la relación entre cuentas y Payslip se guardará en la tabla de base de datos vtiger_crmentityrel.

Esto es vtlib 2.1 comportamiento normal.

Cómo asociar Módulos Estándar tales como Cuentas, Potenciales y Proveedores a un módulo Nuevo (Pausa) con una relación 1: m. La vieja manera Esto funciona de la siguiente manera: Al hacer clic en la pestaña + info de cualquier entidad, el código entra en la tabla vtiger_relatedlist de la base de datos donde se encuentra la información de lo que está relacionado. Extrae de esta tabla, los nombres de las entidades relacionadas y las funciones que necesitan ser llamadas para obtener la lista de entidades relacionadas. Estas funciones serán llamadas contra el objeto que representa la entidad. Por ejemplo,

$accounts->setRelatedList(Vtiger_Module::getInstance('Payslip'), 'header',Array('ADD'),'get_payslip');

Creará una entrada en la lista vtiger_relatedlist indicando que la función get_payslip () debe ser llamada en contra de un objeto de cuenta para obtener su correspondiente nómina. Es por eso que la función debe agregarse en las cuentas. Si busca en la tabla de vtiger_relatedlists verá que las cuentas también están relacionadas con los contactos a través de la función get_contacts que también se puede encontrar en el script accounts.php.

Así que si queremos establecer una nueva sección en la pestaña mas info basado en una relación que no es estándar (get_related_list () / vtiger_crmentityrel), podríamos crear nuestra propia función dentro de esa entidad para recuperar los elementos relacionados en base a la relación que tenemos Establecida.

Así que si agregamos un nuevo campo al módulo Payslip del tipo uitype 10 para capturar la cuenta relacionada. Esto significa que estamos forzando una relación 1: m, una cuenta tiene m nóminas, 1 nómina tiene una cuenta (la que se captura por el campo uitype 10). Esto significa que la tabla de base de datos vtiger_payslip tiene un nuevo campo llamado accountid donde se está guardando la relación entre los módulos. Como se ve, la función get_related_list () no encontrará esta relación, ya que no sabe nada sobre los campos que ha agregado (busca la relación en la tabla vtiger_crmentityrel), por lo que necesitamos crear nuestra propia nueva función que recuperará los Registros basados ​​en este campo uitype 10.

La mejor manera de hacerlo es copiar una función existente de otro módulo y modificar la consulta, realmente no tienes que mirar las otras líneas de la función, todas las funciones get_xxx son iguales. Tienes que cambiar:

  • El nombre de la función, que tiene que ser el mismo que el que puso en la llamada setRelatedList ()
  • El nombre de la función en las dos líneas de depuración al principio y al final de la función. Esto no es necesario para que funcione, pero puede ser útil si alguna vez tiene que depurar el script.
  • La consulta, para obtener los registros que necesita
select vtiger_payslip.*, vtiger_crmentiy.* from vtiger_payslip
inner join vtiger_crmentity.crmid=vtiger_payslip.payslpiid
left join vtiger_users....
left join vtiger_group...
...
where deleted=0 and vtiger_payslip.accountid = $id

En el caso del ejemplo, una nueva función get payslip () debe añadirse a los módulos / Accounts / Accounts.php script.

NOTA. Esta es la manera de establecer una relación m: m cuando no se utiliza la tabla vtiger_crmentityrel estándar. Por ejemplo, si desea mostrar las entidades relacionadas con un documento o una actividad que utilizan otras tablas para guardar sus relaciones.

Cómo asociar Módulos Estándar tales como Cuentas, Potenciales y Proveedores a un módulo Nuevo (Payslip) con una relación 1: m. La nueva forma vtlib

Con vtlib ahora podemos establecer esta relación fácilmente. Todo lo que tenemos que hacer es añadir un campo de captura uitype 10 en el módulo con la relación 1 y usar la función especial get_dependents_list () para recuperar las entidades relacionadas. Entonces si.

Así que si agregamos un nuevo campo al módulo de salario de uitype 10 para capturar la cuenta relacionada. Esto significa que estamos forzando una relación 1: m, una cuenta tiene m nóminas, 1 nómina tiene una cuenta (la que se captura por el campo uitype 10). Esto significa que la tabla de base de datos vtiger_payslip tiene un nuevo campo llamado accountid donde se está guardando la relación entre los módulos. Ahora todo lo que tenemos que hacer es relacionar los salarios de la cuenta con la función setRelatedList:

$accounts->setRelatedList(Vtiger_Module::getInstance('Payslip'), 'header',Array('ADD'),'get_dependents_list');

Esta es la manera correcta de establecer esta relación. También obtendremos un botón "Añadir" en la parte superior de la lista relacionada que pre seleccionará automáticamente la entidad relacionada.

Cómo asociar nuevos módulos con Actividades - Añadir / Añadir evento y documentos

Para asociar cualquier módulo a Actividades y documentos, no puede utilizar la función estándar get_related.

Cuando se utiliza la función setRelatedList (relatedmodule, header, actions, function) y no se especifica la función callback, se llama a una función genérica get_related_list. Esta función espera encontrar una relación de muchos a muchos en la tabla vtiger_crementityrel.

Tanto las actividades como los documentos no establecen su relación en la tabla vtiger_crmentityrel, pero en otros, por lo que no puede utilizar la función estándar, tiene que utilizar sus funciones.

Los documentos se hacen así:

setRelatedList(relatedmodule, header, actions, 'get_attachments')

Actividades como esta:

setRelatedList(relatedmodule, header, actions, 'get_activities')

PERO, eso significa que su nuevo módulo DEBE tener estas funciones en su archivo principal. Get_attachments no es un problema porque la base CRMEntity en el archivo data / CRMEntity.php ya lo tiene, por lo que sólo funciona. Para actividades puedes hacer dos cosas:

  • Copia la función get_activities de Accounts.php en data / CRMEntity.php, de esta manera lo tendrás para todos tus módulos
  • Copie la función get_activities de Accounts.php en el archivo principal de los nuevos módulos. Esto hará que su módulo sea distribuible y sea más fácil de actualizar

No es necesario realizar modificaciones en la función get_activities, es la misma para todos los módulos. ¿Cuál de las dos opciones? eso depende de la meta del nuevo módulo y los cambios que está haciendo.

Cómo asociar nuevos módulos con el historial de actividades

Similar a la solución anterior en este caso, debe utilizar las funciones vtiger ya existentes para obtener un historial de sucesos.

Create a new related block:

setRelatedList('Calendar', 'Activity History', 'add', 'get_history')

Ahora copiar la función de get_history Accounts.php (por ejemplo) y adaptar en consecuencia (normalmente basta con cambiar Cuentas por su módulo).

results matching ""

    No results matching ""