Campo especial: _search
Una de las dificultades es la obligación de crear índices en datastore cuando se quiere buscar información por diferentes campos. Para simplificar este proceso se puede crear una campo especial en el modelo de datos llamado _search
{ "model":
{
"_search": [ "list","index|allownull"]
}
}
En la definición del campo indicaremos que valores se introdicirán en la lista _search como copia de otros campos, sabiendo que dichos valores se guardarán en un array y cuyo contenido será convertido a UPPERCASE().
La forma de indicar esto se realiza de la siguiente manera (ejemplo de: CloudFrameWorkCompanies)
"_search": {
"name": "Search Fields",
"search_fields": "CompanyLegalId,CompanySocialName,CompanyPhone,CompanyEmail,FinancialId,CompanyCat",
"search_split":"CompanySocialName",
"read_only": true,
"tab": 2
}
Donde search_fields es el listado de campos del CFO cuyo contenido queremos guardar en _search para poder producir una búsqueda sencilla sobre todos esos campos.
Es recomendable en la visualización del CFO mostrar el campo _search en alguna zona para poder visualizar el contenido que el CFO está almacenando en el registro.
Enlazar un campo de otro CFO con nuestro campo _search
El principal valor de tener un campo _search es que cuando nos referencia desde otro CFO que tenga una relación 1-n
Ejemplo: en CloudFrameWorkCRMEvents
"CompanyId": {
"name": "Company",
"type": "api_select_partial",
"external_values": "datastore",
"api": "/cfi/CloudFrameWorkCompanies/fields?server_limit=10&fields=CompanyName,CompanyLegalId&_search=1",
"empty_value": "Company",
"defaultvalue": null,
"allow_empty": true,
"display_cfo": true,
"cfo": "CloudFrameWorkCompanies"
}
El campo CloudFrameWorkCRMEvents,CompanyId Busca en el campo CloudFrameWorkCompanies._search facilitando encontrar los elementos de búsqueda.