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