Enlazar/Relacionar expedientes (relaciones n-->1 y m-->n)

A veces nos interesa que un campo de un expediente nos permita seleccionar items que lo relacionen con otros expedientes

Por ejemplo, tenemos expedientes para introducir temas de personal, y tenemos otros expedientes donde introducimos las formaciones del personal. Aquí nos interesa tener una relación MN , donde un empleado puede estar en muchas formaciones y una formación tiene n empleados

Esta relación puede ser unilateral o simétrica (seleccionar en un sentido o en ambos)

A modo de ejemplo, pongamos q tenemos los patrones con portal_type 'kmkey_personal' y 'kmkey_formacion'

1- Agregar un campo "CPS String List" a los dos schemas afectados. Al campo lo llamaremos 'PER_r_FOR'. El campo debe agregarse y llamarse exactamente igual en los dos schemas.
La única propiedad que debe configurarse es la "Write: expression", y solo en el schema donde vayamos a hacer la selección (si es simétrica, lo haremos en ambos).

campo a agregar en el schema 'kmkey_formacion':

python:object and proxy and util.catalogCrossSetList('kmkey_personal','PER_r_FOR', PER_r_FOR,proxy.getDocid(),'getDocid') or PER_r_FOR

si quisieramos permitir que desde un expediente de personal se puedieran seleccionar n formaciones, haríamos lo mismo en kmkey_personal, utilizando esta expresión :

python:object and proxy and util.catalogCrossSetList('kmkey_formacion','PER_r_FOR', PER_r_FOR,proxy.getDocid(),'getDocid') or PER_r_FOR

fijarse bien en el uso del campo en los parámetros de la función : el segundo parámetro se pasa el nombre del campo (string) y el tercer parámetro es el propio valor del campo, sin comillas


2- Agregar el índice y metadata del campo creado (keyword index) al portal_catalog.

3- Agregar el widget con el nombre igual al nombre del campo al (los) layout correspondiente. Ha de ser un "KMKey Multi select pop up Widget"
Parámetros del widget:
- size : valor 1 --> permite únicamente seleccionar un elemento.
Si ponemos size 2 o más, podremos seleccionar n elementos (es o uno o n)
- vocabulary : kmkey_selected_units
- URL to pop up template : para permitir un solo elemento : 'selectUnitSimple.html', para permitir n elementos : 'selectUnits.html'
- Filter Meta Type (or Portal Type) : dejaremos en blanco para todo, o indicaremos una lista de portal types separados por comas, en el ejemplo, añadiremos el widget en el layout de kmkey_formacion, y en este campo pondremos 'kmkey_personal'.
- Token for view list : podemos indicar un token html para separar los diferentes valores seleccionados en el modo view del expediente, se puede utilizar por ejemplo la coma (,) o un <> para seaparlos con un salto de línea

Si vamos ahora a crear un expediente del tipo kmkey_formacion, veremos que nos aparece el campo y los botones que nos permite abrir el pop-up que visualiza la lista de expedientes de personal, donde relizaremos la selección