Fuentes de datos

Los widgets de App Maker y la API de cliente acceden a los datos a través de fuentes de datos. Estas definen lo siguiente:

  • La forma en que tu aplicación consulta datos en tus modelos
  • La forma en que tu IU accede a esta información

Las fuentes de datos tienen una propiedad de item que indica el elemento seleccionado en una fuente de datos. En tu IU, los widgets usan la propiedad de item para mostrar o editar información sobre el registro que está seleccionado en la fuente de datos. Las secuencias de comandos del lado del cliente también pueden acceder y modificar registros a través de esta propiedad.

En este artículo, obtendrás información sobre lo siguiente:

  1. Tipos de fuentes de datos
  2. El ciclo de vida de la fuente de datos
  3. Cómo crear una fuente de datos de consulta, que incluye cómo compilar una consulta y establecer otra configuración de fuente de datos
  4. Cómo definir mejor una fuente de datos de consulta con secuencias de comandos de cliente
  5. Cómo trabajar con fuentes de datos de relación para acceder a registros asociados
  6. Cómo usar las fuentes de datos de modo de creación para crear registros en borrador a partir de la entrada del usuario

Tipos de fuentes de datos

App Maker tiene los siguientes tipos de fuentes de datos:

  1. Fuente de datos de consulta
  2. Fuente de datos de relación
  3. Fuente de datos de modo de creación

Una fuente de datos de consulta almacena lo siguiente:

  • Información sobre una consulta de un modelo único
  • Los registros de la última ejecución de la consulta

De forma predeterminada, se crea una fuente de datos de consulta para cada modelo con el nombre del modelo. Puedes personalizar la fuente de datos de consulta y crear más para un mismo modelo. Cuando desees seleccionar opciones diferentes para un modelo único, como resultados filtrados, órdenes de clasificación distintos o tamaños de página diferentes, es posible que quieras tener más fuentes de datos de consulta. También puedes usar varias fuentes de datos cuando quieras que se seleccionen registros diferentes al mismo tiempo, como para comparar dos valores de datasource.item. Usa widgets de IU y secuencias de comandos del lado del cliente para cambiar y volver a ejecutar la consulta. Se pueden vincular los resultados de la última consulta a las propiedades de los widgets y se puede acceder a ellos en las secuencias de comandos del lado del cliente.

Cuando desarrollas tu IU, por lo general, debes asociar una fuente de datos de consulta con los paneles de nivel superior de páginas o widgets compuestos. Todos los widgets secundarios del panel heredan de forma automática esa fuente de datos. Puedes asociar las propiedades de los widgets con los campos en los registros de la fuente de datos.

Una fuente de datos de relación te permite mostrar datos sobre registros asociados. Crea una fuente de datos de relación a partir de una fuente de datos de consulta o alguna otra fuente de datos de relación, para un extremo de relación particular. Las fuentes de datos de relación muestran los registros en un extremo de relación que están asociados con el registro actualmente seleccionado de la fuente de datos superior.

Las fuentes de datos de relación se suelen usar para implementar una vista de detalles principales. Por ejemplo, podrías compilar una IU para mostrar el pedido de un cliente y los elementos relacionados. En ese caso, tendrías dos modelos, Pedidos y Elementos y puedes crear una relación de uno a varios entre ellos. Para obtener más información sobre cómo usar las fuentes de datos de relación en el editor de la IU, dirígete a vincula datos a tu IU.

Las fuentes de datos de modo de creación crean elementos en una consulta superior o una fuente de datos de relación.

Ciclo de vida de la fuente de datos

Las fuentes de datos pueden tener uno de estos cuatro estados:

  1. No cargada
  2. No cargada + Cargando
  3. Cargada
  4. Cargada + Cargando

Una fuente de datos no cargada es aquella que no tiene ningún dato; los elementos de la fuente de datos son un arreglo vacío y el elemento seleccionado es null. Una fuente de datos que se está cargando está en proceso de obtener datos. Una fuente de datos cargada tiene datos, aunque pueden estar vacíos.

Para que una fuente de datos se encuentre en uno de los estados de cargando, debe haber una carga activada. Las cargas se pueden activar de las siguientes maneras:

  1. De forma predeterminada, una carga se activa cuando un widget que usa esa fuente de datos se adjunta a una página. En general, los widgets se adjuntan cuando un usuario abre la página superior del widget.
  2. De forma predeterminada, las cargas se activan cuando se adjunta un widget que tiene una vinculación a las propiedades de los datos de una fuente de datos. Por ejemplo, si tienes un widget de etiqueta en una página Pedidos vinculado a un campo en el modelo Clientes, la fuente de datos Clientes se carga cuando se muestra la página Pedidos.
  3. Una carga se activa mediante una secuencia de comandos de cliente que llama a los métodos load, loadPage, prevPage o nextPage en la fuente de datos.

Puedes inhabilitar de forma automática la carga de datos para las fuentes de datos de consulta, lo que evita que las dos primeras cargas se activen en la lista. Para descargar una fuente de datos, llama al método unload en la fuente de datos.

Las fuentes de datos de consulta tienen un evento onLoad que se activa cuando una fuente de datos pasa al estado Cargada. El evento onLoad es útil cuando deseas ejecutar una secuencia de comandos que realiza una acción después de que una fuente de datos subió datos. Por ejemplo, podrías ingresar la siguiente secuencia de comandos en el editor de código onLoad para hacer que un widget sea visible una vez que los datos estén disponibles:

var widget = app.pages.MyPage.descendants.MyWidget;
widget.visible = true;

Fuentes de datos de consulta

Cuando creas un modelo, se crea una fuente de datos de consulta de forma automática. Puedes personalizar las fuentes de datos de consulta y crear más para un modelo.

Para editar o crear una fuente de datos de consulta, sigue estos pasos:

  1. Haz clic en el modelo que se encuentra en el panel de navegación y dirígete a la pestaña Fuentes de datos (Datasources).
  2. Para editar una fuente de datos, haz clic en ella. Si quieres crear una fuente de datos, haz clic en Agregar fuente de datos (Add datasource).
  3. Configura la fuente de datos. Los cambios se guardan de forma automática.

Las fuentes de datos tienen las siguientes opciones de configuración:

Secuencia de comandos del servidor de consultas

Las fuentes de datos suben todos los registros del modelo de forma predeterminada. La propiedad de la secuencia de comandos de consulta te permite anular el comportamiento de consulta predeterminado cuando especificas una lógica personalizada del lado del servidor, como los filtros. Para los modelos calculados, la secuencia de comandos de consulta te permite definir por completo el comportamiento de consulta de una fuente de datos y crear registros en ella.

Características y requisitos de la secuencia de comandos de consulta:

  • Puedes llamar a una función de la secuencia de comandos del servidor desde el editor de secuencia de comandos de consulta. Esto es útil si tu secuencia de comandos de consulta es larga.
  • Puedes pasar parámetros del cliente a la secuencia de comandos de consulta con parámetros personalizados.
  • La secuencia de comandos de consulta debe mostrar un arreglo de registros que pertenecen al modelo de fuente de datos.

Ejemplo de filtros

Por ejemplo, la consulta de la fuente de datos predeterminada Empleados muestra todos los registros en el modelo Empleados. Supongamos que solo quieres mostrar los empleados cuya edad es un número par mayor que la edad mínima especificada en la consulta. Para aplicar esta consulta a la fuente de datos, ingresa el siguiente código en el editor de código de la secuencia de comandos de consulta:

var employeeResult = [];
// Modify passed query to also filter by minimum age.
query.filters.Age._greaterThan = 20;
var employeesAboveMinimumAge = query.run();
for (var i = 0; i < employeesAboveMinimumAge.length; i++) {
  if (employeesAboveMinimumAge[i].age % 2 == 0) {
    employeeResult.push(employeesAboveMinimumAge[i]);
  }
}
return employeeResult;

Ejemplo de la creación de un registro calculado

Los modelos calculados se usan a fin de representar los resultados de las secuencias de comandos como registros para que puedas usarlos en la IU. Por ejemplo, deseas consultar tu modelo Empleados con el fin de crear un modelo calculado que genere registros de la cantidad de empleados que hay en cada ubicación. Debido a que los registros EmployeesByLocation reales no existen en la base de datos, tu secuencia de comandos de consulta necesita crear registros mediante llamadas a newRecord(). La siguiente secuencia de comandos calcula la cantidad de empleados en cada ubicación y crea un registro para cada ubicación en el modelo calculado:

var calculatedModelRecords = [];
var recordsByLocation = {};
var allEmployees = app.models.Employees.newQuery().run();
for (var i = 0; i < allEmployees.length; i++) {
  var employee = allEmployees[i];
  if (!recordsByLocation[employee.location]) {
    var calculatedModelRecord = app.models.EmployeesByLocation.newRecord();
    calculatedModelRecord.numberOfEmployees = 1;
    calculatedModelRecord.location = employee.location;
    calculatedModelRecords.push(calculatedModelRecord);
    recordsByLocation[employee.location] = calculatedModelRecord;
  } else {
    recordsByLocation[employee.location].numberOfEmployees++;
  }
}
return calculatedModelRecords;

Parámetros personalizados

Una secuencia de comandos de consulta también usa parámetros que la base de datos no puede proporcionar. Por ejemplo, es posible que quieras filtrar datos según el precio actual de las acciones de una empresa, que obtienes de un servicio web. Puedes pasar parámetros del cliente a tu secuencia de comandos de consulta en el servidor con parámetros personalizados.

Para agregar un parámetro, sigue estos pasos:

  1. En la pestaña Fuentes de datos (Datasources), haz clic en Agregar parámetro (Add Parameter).
  2. Selecciona el tipo de parámetro.
  3. Ingresa un nombre para el parámetro.

Accede y realiza la vinculación al parámetro con la propiedad parameters de la consulta de la fuente de datos. Por ejemplo, puedes vincular la propiedad del valor de un widget de campo de texto al parámetro de consulta con vinculaciones, como se muestra a continuación:

textField.value <-> datasource.query.parameters.MyParam

Las secuencias de comandos de consulta pueden acceder al parámetro como un parámetro de consulta. Para aplicar este enfoque al ejemplo anterior, podemos agregar lo siguiente a la secuencia de comandos de consulta. De esta forma, el filtro de edad mínima solo se agrega si un parámetro booleano personalizado con el nombre RestrictAge es true:

// Modify query to also filter by minimum age if client enables the option.
if (query.parameters.RestrictAge) {
  query.filters.Age._greaterThan = 20;
}
var employees = query.run();

Compilador de consultas

El compilador de consultas está disponible para las fuentes de datos de Cloud SQL. Es un analógico simplificado de la cláusula WHERE de MySQL, que admite el filtrado en modelos relacionados y facilita las consultas en null. Usa el compilador de consultas para ejecutar consultas complejas en función de la información que envían los usuarios de la aplicación.

Por ejemplo, podrías compilar una app que permita que los usuarios busquen una base de datos de RR. HH. de los empleados que cumplen con los requisitos para obtener planes de jubilación diferentes. El compilador de consultas te ayuda a crear las expresiones lógicas que tu app necesita para encontrar datos. De esta manera, no tienes que escribir una secuencia de comandos personalizada para interpretar las entradas del usuario y aplicarla a una búsqueda de base de datos de Cloud SQL. El compilador de consultas también admite la finalización de códigos (presiona Ctrl+Espacio).

Para implementar una consulta con parámetros de entrada del usuario, sigue estos pasos:

  1. Construye tu expresión de consulta en el compilador de consultas y crea los parámetros de entrada del usuario a medida que lo haces.
  2. Vincula las propiedades del widget a los parámetros de entrada del usuario.

Crea una consulta

El compilador de consultas procesa las consultas de acuerdo con las siguientes reglas:

  • Las expresiones de consulta se evalúan de izquierda a derecha.
  • Los parámetros que ingresa el usuario se distinguen de los campos de modelo porque están precedidos por dos puntos (:).
  • El operador y (and) tiene prioridad sobre el operador o (or).
  • Las expresiones de subconsulta entre paréntesis tienen prioridad sobre los operadores y (and) y o (or).
  • El operador “!” niega el valor booleano de una expresión.
  • El modificador “?” para los operadores leaf considera verdadero un valor nulo del lado derecho de la expresión. Las expresiones que usan el modificador “?” no se pueden negar.

Para el ejemplo de la base de datos de RR. HH., la app debe mostrar los empleados que se encuentran dentro de un rango de edad determinado o que comenzaron a trabajar después de una fecha específica. La consulta es la que se muestra a continuación:

(Age >= :AgeMin and Age < :AgeMax) or StartDate > :StartDate
  • Edad (Age): un campo en el modelo de la app. Contiene la edad de cada empleado. La app solicita a los usuarios que ingresen las edades mínimas (:AgeMin) y máximas (:AgeMax). La consulta muestra los empleados que están dentro de ese rango.
  • Dos puntos (:): los dos puntos identifican los parámetros que obtienen sus valores a través de la IU de la app.
  • Paréntesis: identifican una subconsulta. App Maker evalúa la subconsulta antes de pasar a :StartDate.
  • Y (and): un operador. Indica a la app que muestre los empleados que cumplan con ambos criterios.
  • O (or): un operador. Indica a la app que muestre los empleados que cumplan con alguno de los criterios.
  • StartDate: un campo que contiene la fecha en la que un empleado comenzó a trabajar. Los usuarios ingresan una :StartDate y la app muestra los empleados que comenzaron después de esa fecha.

Vincula una expresión de consulta a una IU

Cuando agregas parámetros (precedidos por dos puntos) a tu expresión, el compilador de consultas los reconoce de forma automática y crea parámetros de consulta en el área debajo del compilador de consultas. También aparecen en la IU de vinculación de datos, que debes usar para vincular los parámetros a los widgets en tu app.

Para usar el ejemplo de la base de datos de RR. HH., los pasos que debes realizar son los siguientes:

  1. Abre Widgets widgets y agrega dos cuadros de texto text_fields a una página.
  2. Vincula las propiedades de valor (value) del cuadro de texto para lo que se encuentra a continuación:
    • @datasource.query.parameters.AgeMin
    • @datasource.query.parameters.AgeMax
  3. Agrega un widget de cuadro de fecha date_range a la página.
  4. Vincula la propiedad de valor (value) del widget de cuadro de fecha para lo que se encuentra a continuación:
    • @datasource.query.parameters.StartDate
  5. Cambia el evento onValueChange a Volver a subir la fuente de datos (Reload Datasource) para el widget de entrada.

Más ejemplos del compilador de consultas

Consulta Muestra
Age >= :AgeMin and Age <= :AgeMax and Active = :IsActive Todos los empleados activos entre la edad mínima y la edad máxima
(Status = :Pending or Status = :Active) and Name startsWith :NamePrefix Todos los empleados pendientes o activos cuyos nombres comienzan con NamePrefix
!(Status = :Pending or Status = :Active) Todos los empleados que no están pendientes o activos
Age >=? :AgeMin

Si el parámetro de consulta AgeMin es nulo, muestra todos los empleados. De lo contrario, muestra los empleados cuya edad es mayor que la edad mínima.

Este operador puede ser útil cuando vinculas el parámetro de consulta AgeMin en una IU. Por ejemplo, si el parámetro de consulta AgeMin está vinculado a un campo de texto, al principio se muestran todos los empleados. Los registros se filtran una vez que el usuario ingresa un valor para AgeMin. Si el usuario borra el campo de texto, se muestran todos los empleados de nuevo.

Si la consulta usa el operador >= en lugar de >=?, no se muestra ningún empleado al principio o cuando el usuario borra el campo de texto.

Role notIn :Engineering or :Marketing

Todos los empleados que no están en funciones de ingeniería o marketing

in y notIn funcionan bien con el widget de selección múltiple , que permite que los usuarios elijan más de un parámetro de los que definiste.

Computer startsWith :Chromebook and notContains :Pixel Todos los empleados que tienen Chromebooks, sin importar el modelo específico y excluye a los empleados con Chromebook Pixels.

Consulta de SQL para SQL calculado

Para obtener más información, dirígete a los modelos de SQL calculados.

Otras propiedades de la fuente de datos de consulta

Tamaño de la página

La configuración del tamaño de la página controla la cantidad de registros que muestra la fuente de datos para una consulta única. Usa esta configuración para controlar la cantidad de resultados que se muestran en la IU y mejorar el rendimiento. Si el servidor tiene 10,000 registros, el proceso de subirlos a todos a la vez es inmanejable y lento en la IU. En su lugar, establece el tamaño de la página y crea un botón de Siguiente para llamar al método nextPage en la fuente de datos.

Para mostrar todos los registros, establece el tamaño de la página en cero.

El tamaño de la página es una propiedad de la fuente de datos y, por eso, puedes realizar lo siguiente:

  • Vincular las propiedades del widget a él
  • Acceder y modificar el tamaño de la página en secuencia de comandos del lado del cliente

Por ejemplo, puedes permitir que el usuario controle cuántos registros se muestran si vinculas la propiedad value de un widget de control deslizante a la propiedad pageSize de la fuente de datos.

Ordenamiento

Puedes ordenar los registros por cualquier campo ordenable de manera ascendente o descendente. Para ordenar por más de un campo, usa una secuencia de comandos de consulta de cliente.

Modo de guardado manual

Cuando se cambia el valor de un elemento de la fuente de datos en App Maker, el cambio se guarda automáticamente en el servidor de forma predeterminada. Por ejemplo, si un usuario cambia el valor en un widget de campo de texto, el valor nuevo se guarda de forma automática en el campo de registro al que está vinculado.

Para inhabilitar este comportamiento de guardado automático, puedes configurar la fuente de datos en modo de guardado manual. En la pestaña Fuentes de datos (Datasources) en el editor de modelos, selecciona la casilla de verificación Modo de guardado manual (Manual save mode).

En el modo de guardado manual, los cambios se deben guardar de forma explícita en la IU o en tu secuencia de comandos. En la IU, los campos y formularios de entrada se comportan como los formularios web tradicionales y requieren la acción del usuario. Un usuario debe hacer clic en el botón Guardar (Save) para el que la acción onClick es Guardar cambios en la fuente de datos (Save Changes to Datasource).

En una secuencia de comandos del lado del cliente, puedes usar los siguientes métodos para la administración de cambios:

  • saveChanges: guarda los cambios actuales en el servidor.
  • clearChanges: abandona los cambios que se realizaron después de la última llamada a saveChanges.
  • hasChanges: muestra true si la fuente de datos tiene cambios sin guardar.

Los cambios realizados en los registros a los que se accedió a través del item de la fuente de datos y las propiedades de los items, incluidos los registros a los que se accedió a través de las propiedades de relación, se almacenan de forma local en el cliente y se pueden guardar o revertir.

Datos cargados de forma automática

De forma predeterminada, las fuentes de datos suben automáticamente los datos cuando un widget está vinculado a los datos en la fuente de datos. Cuando borras la casilla de verificación de Datos cargados de forma automática (Automatically load data), la fuente de datos solo sube datos cuando llamas a los métodos load, loadPage, nextPage o prevPage.

Retrasa la carga de datos cuando quieres que el usuario proporcione el valor de un filtro de consulta antes de que subas los datos.

Acción OnLoad

Para ejecutar JavaScript del lado del cliente cada vez que la fuente de datos realice cargas, ingresa la secuencia de comandos en el cuadro de código. La acción onLoad se activa cada vez que los resultados de una consulta se muestran del servidor al cliente. Obtén más información sobre la carga en la sección ciclo de vida de la fuente de datos.

Acción en el cambio de elementos

Para ejecutar JavaScript del lado del cliente cada vez que el elemento actual cambie, ingresa la secuencia de comandos en el cuadro de código.

El elemento actual puede cambiar por los siguientes motivos:

  • La fuente de datos vuelve a subir los datos y el elemento actual no se encuentra en los datos mostrados.
  • Una secuencia de comandos del lado del cliente llama a los métodos prev o next en la fuente de datos.
  • Una secuencia de comandos o una vinculación del lado del cliente asigna un valor a la propiedad de item en la fuente de datos.
  • Una secuencia de comandos del lado del cliente llama a los métodos selectIndex o selectKey en la fuente de datos.
  • Algunos widgets cambian de forma automática el elemento actual para la fuente de datos. Por ejemplo, el widget de lista cambia el elemento actual de su fuente de datos cada vez que el usuario hace clic en una fila.

Recuperación previa

La recuperación previa se usa para subir registros asociados desde un extremo de relación de manera eficiente cuando tu secuencia de comandos o IU de cliente los usa. Si tus secuencias de comandos de cliente usan registros de relación, debes subir de forma explícita los registros asociados desde el servidor porque los del otro extremo de relación no se suben de manera automática. Una forma de subir registros asociados es habilitar la recuperación previa, que indica a App Maker que suba los registros relacionados cuando sube los resultados de la consulta.

La recuperación previa puede mejorar el rendimiento de la IU cuando la fuente de datos tiene muchos registros y necesitas subir los registros asociados para todos ellos. Por ejemplo, tienes un modelo de Empleados con una relación de Gerente consigo mismo y dos extremos de relación: Gerente y Miembros del equipo. Tu IU muestra una lista de registros de Empleados en función de una fuente de datos de consulta y también se muestra el Gerente de cada empleado.

Sin la recuperación previa, App Maker solicita el registro del gerente asociado para cada registro de empleado en la fuente de datos. Este proceso puede ser lento porque requiere muchas solicitudes al servidor. Con la recuperación previa habilitada, App Maker sube los registros asociados junto con los resultados de la consulta y la IU funciona más rápido después de la carga inicial.

Obtén información sobre otras formas de subir registros asociados al cliente en Modifica las asociaciones con una secuencia de comandos de cliente.

Define mejor la consulta de fuente de datos en el cliente

Una fuente de datos de consulta contiene propiedades y métodos que puedes usar para modificar la consulta con una secuencia de comandos de cliente. El objeto de consulta representa la consulta que se envía al servidor cuando una fuente de datos está cargada. Contiene propiedades que especifican las condiciones de la consulta y la página de resultados para mostrar.

Cuando activas una carga en una fuente de datos de consulta, sucede lo siguiente:

  1. La fuente de datos de consulta envía la consulta actual al servidor.
  2. La fuente de datos de consulta actualiza los datos con los resultados de la consulta.
  3. También se actualizan los registros en el cliente con los resultados de la consulta.

Cuando subes una fuente de datos de consulta, podrías obtener cambios en los valores de registro en el cliente incluso si los registros en el resultado de la consulta no cambian. Esto ocurre cuando una secuencia de comandos del lado del servidor o algún otro cliente cambió el registro.

Filtros

La propiedad filters del objeto de consulta contiene las condiciones de la consulta en los campos de un modelo. Especifica un filtro con la siguiente sintaxis:

datasource.query.filters.field-id.filter-operator = value

En el que:

  • field-id es un campo en el modelo que se puede usar para filtrar.
  • filter-operator es la acción del filtro, como equals o contains. Los operadores de filtros que se admiten dependen del tipo de campo y la base de datos. Obtén más información sobre los operadores de filtros en la documentación de consulta de la API de cliente.
  • value es el parámetro que se usa para el campo y el operador en la consulta. El tipo del valor debe coincidir con el tipo del campo, excepto para los operadores in y notIn. Para los operadores in y notIn, los valores de los parámetros deben ser arreglos del tipo de campo.

Para un campo de lista, uno o más elementos de la lista deben cumplir con el filtro de consulta. Si asignas varios valores a las propiedades en filters, los registros deben coincidir con todos los filtros que se subirán.

El objeto de consulta para las fuentes de datos del modelo de Cloud SQL también contiene propiedades de filtro de relación. Estas propiedades te permiten filtrar registros por un registro asociado, su campo o su clave. El filtrado solo se admite para relaciones del tipo uno a uno y varios a uno.

Ejemplos de consulta del cliente:

  • Filtro único: El siguiente código agrega un filtro de consulta a una fuente de datos de widget que muestra los registros con el nombre “John Smith”:

    var datasource = widget.datasource;
    datasource.query.filters.Name._equals = 'John Smith';

  • Más de un filtro: El siguiente código agrega filtros de consulta que coinciden con los registros que comienzan con el nombre “John” y su edad es mayor que 18 años.

    var datasource = widget.datasource;
    datasource.query.filters.Name._startsWith = 'John';
    datasource.query.filters.Age._greaterThan = 18;

  • Coincidencia de campos de lista: La siguiente consulta sube el registro record.Emails = ['smith.j@example.com', 'john@example.com'] porque uno de los elementos en el campo de lista Correos electrónicos comienza con john@:

    datasource.query.filters.Emails._startsWith = 'john@';

  • Operador in: El siguiente código usa el operador in en un filtro de consulta para subir registros en los que el valor del campo favoriteColor es blue o green:

    var datasource = widget.datasource;
    var colors = ['blue', 'green'];
    datasource.query.filters.FavoriteColor._in = colors;

  • Filtro de campo de relación: Si el modelo Empleado tiene una relación del tipo uno a varios que representa a los gerentes y los miembros del equipo, puedes realizar lo siguiente:

    • Subir registros de los miembros del equipo que están asignados a manager1:

      var datasource = widget.datasource;
      datasource.query.filters.Manager._equals = 'manager1';

    • Filtrar por las claves de registro de gerente:

      datasource.query.filters.Manager._key._in = ['manager1RecordKey', 'manager2RecordKey'];

    • Filtrar por el nombre del gerente:

      datasource.query.filters.Manager.Manager.Name._equals = 'John Doe';

    Al igual que con otros filtros de campo, si estableces el valor de propiedad del filtro de relación en null, el filtro no se aplica.

Ordenamiento

Puedes anular el ordenamiento que está configurado para la fuente de datos en una secuencia de comandos de cliente. Los datos se pueden ordenar por uno o más campos ordenables del modelo de la fuente de datos. Para las fuentes de datos del modelo de Cloud SQL, también puedes ordenar por los campos en los registros relacionados, si los extremos de relación son de uno a uno o de varios a uno. Por ejemplo, si tienes una relación de Ciudades y Estado de varios a uno, puedes ordenar las ciudades por su estado.

Obtén más información sobre la propiedad de ordenamiento de consultas.

Índice de la página

La propiedad de índice de página especifica el número de página que se subirá. De forma predeterminada, se sube la página 1 de los resultados de la consulta. Puedes cambiar esta propiedad por cualquier número positivo; los registros de ese número de página se suben la próxima vez que se suba la fuente de datos de consulta.

Tamaño de la página

La propiedad de tamaño de la página especifica la cantidad de registros que se mostrarán desde el servidor para un resultado de la consulta.

Fuentes de datos de relación

Las fuentes de datos de relación te permiten ver con facilidad los registros asociados de un registro desde la fuente de datos de un extremo de relación.

Puedes establecer una fuente de datos de relación para un widget en el Editor de propiedades (Property Editor). El cuadro de diálogo de la fuente de datos muestra una fuente de datos de relación de cada relación que está configurada para el modelo superior. Obtén información sobre cómo seleccionar fuentes de datos de relación en la IU en Vincula datos a tu IU. Puedes trabajar con un ejemplo en el instructivo Conecta modelos de datos.

Carga registros asociados

Cuando se sube el widget que está configurado con una fuente de datos de relación, los registros que están asociados al registro actual se suben de forma automática. Los registros asociados también se suben cuando activas una carga en una fuente de datos de relación.

Por lo general, quieres asegurarte de que se suban los registros asociados antes de que la app use los datos. Si deseas ejecutar una secuencia de comandos o recibir notificaciones cuando se suban asociaciones de un registro, usa el evento onDataLoaded para un widget. A continuación, se presenta un enfoque común para usar los registros asociados en tu app:

  1. Crea un panel invisible que use una fuente de datos de relación para asegurarse de que se suban los datos relacionados.
  2. Usa el evento onDataLoaded en el panel invisible para realizar alguna lógica que use los datos relacionados.

Para volver a subir los registros asociados desde el servidor, llama a load en una fuente de datos de relación. Es posible que desees volver a subir los registros asociados cuando los modifica una secuencia de comandos del servidor en lugar de vinculaciones o secuencias de comandos del lado del cliente.

También puedes usar el método _reload en el registro actual para volver a subir los registros asociados.

Fuentes de datos de modo de creación

Usa una fuente de datos de modo de creación para crear elementos en una fuente de datos de consulta superior o en una fuente de datos de relación que no se guardan de forma automática en la base de datos. En cambio, los datos se almacenan en un registro borrador en el lado del cliente hasta que el usuario activa una acción para guardar el registro. El registro borrador también puede proporcionar una plantilla para los registros nuevos. La fuente de datos de modo de creación pertenece al mismo modelo que su fuente de datos superior.

Con la fuente de datos de modo de creación, puedes realizar lo siguiente:

  • Vincular elementos de la IU a los campos en la fuente de datos de modo de creación. Estos campos propagarán el registro borrador con valores
  • Establecer los valores de campo predeterminados para el registro de la fuente de datos. Con este enfoque, los campos obligatorios siempre tienen valores. Después de que una fuente de datos de modo de creación guarda un registro en la base de datos, los valores del campo se restablecen a sus valores predeterminados. Puedes establecer los valores predeterminados con una secuencia de comandos o en la IU

Puedes trabajar con fuentes de datos de modo de creación con la IU de la app y con una secuencia de comandos de cliente.

Crea registros con un formulario

Los valores en los formularios de tipo de entrada están vinculados, de forma predeterminada, a los campos en la fuente de datos de modo de creación. A medida que el usuario completa el formulario, App Maker guarda los valores en el registro borrador. La fuente de datos de modo de creación es @datasource.parent-datasource.modes.create, que la IU informa como parent-datasource (create). Cada campo del formulario está vinculado a datasource.item.field, que corresponde a los campos del registro borrador.

A medida que el usuario completa el formulario, el registro se guarda en el cliente hasta que el usuario hace clic en Enviar (Submit). La acción onClick del botón Enviar (Submit) es datasource.item.createItem(), que crea el elemento y lo agrega a la fuente de datos superior. La acción onClick del botón Borrar (Clear) es widget.datasource.clearChanges(), que borra el registro de la fuente de datos de creación.

Obtén más información en Widgets de datos: formulario y en el instructivo Trabaja con datos.

Crea registros con una secuencia de comandos

Las secuencias de comandos de cliente pueden agregar registros a las fuentes de datos de modo de creación. Agrega registros de esta manera cuando quieras realizar estas tareas:

  • Agregar datos de sesión de forma automática, como el nombre de usuario y la fecha de creación del registro
  • Procesar los datos de un formulario antes de crear el registro para que coincida con un campo en la fuente de datos, como concatenar nombres y apellidos

Por ejemplo, tienes un modelo Personas con un campo DateAdded. Si estableces la propiedad DateAdded del registro de la fuente de datos de modo de creación en new Date();, un registro que se creó a través de esa fuente de datos tiene la fecha actual de la zona horaria del usuario para comenzar, como se muestra a continuación:

var createDatasource = app.datasources.people.modes.create;
var draft = createDatasource.item;
draft.DateAdded = new Date();
createDatasource.createItem(function(createdRecord) {
 alert('Created record on ' + createdRecord.DateAdded)
});

Obtén más información sobre CreateDataSource.