Aplicaciones de Script
Con Apps, puedes crear y gestionar tus propias extensiones con scripts para la aplicación.
Habilitar el Constructor de Apps
1. En Administración del sitio, accede a tus privilegios y características de la aplicación.
2. Bajo ScriptApp, estos privilegios:
3. Haz clic en Guardar.
4. Inicia sesión en la aplicación.
5. Desde el Menú Principal, ve a Admin > Roles.
6. Haz clic en el rol para el cual deseas habilitar Apps.
7. Bajo Privilegios, habilita Apps de la misma manera que lo hiciste para la aplicación.
- Si previamente habilitaste Click Scripts o Web Service Scripts y tenías privilegios para editarlos habilitados, tendrás el privilegio _EditScriptApp habilitado automáticamente después de la actualización.
Acceder al Constructor de Apps
El Constructor de Apps está disponible bajo la opción de menú Menú Principal > Admin > Desarrollo > Constructor de Apps.
Al hacer clic, te llevará a una lista de Apps existentes.
Click Scripts y Web Service Scripts están dentro de una App para cada uno de los scripts existentes.
Crear una nueva App
1. Haz clic en + App para crear una nueva App.
2. Especifica un nombre para la nueva app y asigna algunos roles a ella.
Estos roles determinan qué acciones están permitidas para los Click Scripts en esta App.
3. Haz clic en Guardar para guardar la App y continuar agregando scripts a ella.
- Las Apps para Click / Web Service Scripts antiguos tendrán un script en la lista correspondiente. Estos scripts se ejecutarán como antes.
- Crear una nueva App con un solo script te permite trabajar con Click / Web Service Scripts como antes.
- Las Apps facilitan la gestión de estos scripts al permitirte agrupar los scripts por funcionalidad.
- Si se necesitan varios scripts para lograr un objetivo específico, pueden crearse en la misma App. Los scripts en la misma App también pueden interactuar. Puedes ver cómo en el siguiente ejemplo.
Ejemplo: enviar un comando a los usuarios una vez al día
En este ejemplo, queremos enviar un comando particular a un grupo particular de usuarios una vez al día.
Supongamos que el comando se llama “HelloCommand” y los usuarios relevantes están en una Etiqueta llamada “Usuarios Relevantes”.
Primero, crearemos una App llamada “ExampleApp” y le asignaremos el rol _Administrator.
Ahora añade un Script de Clic llamado SendCommandOnTimer. Elige el tipo Timer y especifica la hora de la primera ejecución. Si los campos de horas/minutos/segundos se dejan en 0, este script se ejecutará una vez al día a la hora especificada.
Edita el script para:
// obtener usuarios de la etiqueta RelevantUsers var uids = tags.getTagByName( 'RelevantUsers' ).userIDs;
for ( var i = 0; i < uids.length; i++) {
var uid = uids[ i ];
// encontrar dispositivo
var devs = directory.getDevices(uid);
if (devs.length > 0) {
// enviar comando
commands.send(devs[0].id, 'HelloCommand' );
}
} |
Ahora guarda el script y hemos terminado: a las 5 PM, el script enviará un comando a todos los activos conectados.
Avanzado
El comando del ejemplo anterior también podría ser enviado manualmente por un operador. ¿Qué pasa si queremos omitir los activos que ya recibieron el comando enviado por el operador cuando lo enviamos desde el script? En la App del ejemplo anterior, crea otro Script de Clic de Temporizador llamado “Reset”, configurado para ejecutarse a una hora temprana del día, por ejemplo, a las 3:00 AM, que solo haga esto:
// llenar el objeto app.state con el array de usuarios relevantes app.setState({ userIDs: tags.getTagByName( 'RelevantUsers' ).userIDs });
|
Ahora cambia el script “SendCommandOnTimer” a esto:
var DEFAULT_EMPTY_STATE = {userIDs: []};
// cargar el objeto app.state var st = app.state || DEFAULT_EMPTY_STATE;
// enviar comando a todos los usuarios en el array en app.state for ( var i = 0; i < st.userIDs.length; i++) {
var uid = st.userIDs[ i ];
var devs = directory.getDevices(uid);
if (devs.length > 0) {
commands.send(devs[0].id, 'HelloCommand' );
}
} app.setState(DEFAULT_EMPTY_STATE); |
Ahora crea una Etiqueta de Comando llamada “HelloCommandTag” y añade el “HelloCommand” a ella. Después de esto, crea un nuevo Script de Clic de Comando llamado “HelloCommandSuccess” en ExampleApp y enlázalo a HelloCommandTag. Debe contener este script:
if ( new Date().getHours() < 17) {
// si la hora actual es < 5 PM
if (command.name == 'HelloCommand' && click.operation == 'Completed' ) {
// si el comando se completó con éxito
// cargar estado
var st = app.state || {userIDs: []};
// eliminar este id de usuario del array en el estado
for ( var i = 0; i < st.userIDs.length; i++) {
if (st.userIDs[ i ] == user.id) {
st.userIDs.splice(i, 1);
}
}
// actualizar estado
app.setState(st);
}
} |
ExampleApp ahora se asegurará de que HelloCommand se envíe desde el script solo a activos que no lo hayan recibido aún.
Exportar
Las aplicaciones se incluirán en la plantilla de la aplicación VehicleTracker al exportar/sincronizar la aplicación.
También puedes exportar las aplicaciones por separado, utilizando la opción de menú contextual Exportar de la aplicación.
Impórtalas a través de la opción “Importar plantilla” en VehicleTracker. Una aplicación se exportará junto con todos los objetos requeridos por las definiciones del script. Por ejemplo, si creas un Script de Clic de Notificador, la Regla de Evento a la que está conectado también se exportará. Cualquier objeto que no se incluya automáticamente, pero que sea necesario para que los scripts en la aplicación funcionen correctamente (como la etiqueta ‘RelevantUsers’ accedida desde un script en el ejemplo anterior) se puede agregar manualmente a la aplicación en la sección de Referencias.
Habilitar el registro en tiempo de ejecución
La forma más fácil de ver los registros de tus scripts es usar la Consola de la Aplicación. Todo lo registrado con el método log() se mostrará allí.
También puedes registrar en un archivo con la función log y el registro de errores de Click Scripts en tiempo de ejecución editando el archivo NLog.config en la carpeta Franson NMEA Service bajo la carpeta de instalación del servidor de GpsGate (si no estás alojando tu propio servidor, puedes contactar al soporte para acceder a los archivos). Bajo <targets>, deberías agregar una nueva entrada de destino como esta:
< target name = "TARGET_NAME" xsi:type = "File" fileName = "FILE_NAME" layout = "${longdate} | ${message}" />
|
donde TARGET_NAME es un nombre único para el destino del archivo y FILE_NAME es el nombre del archivo de registro que deseas crear con la ruta completa al archivo. Bajo <rules>, agrega una entrada como esta:
< logger name = "NAME_OF_CLICK_SCRIPT" minlevel = "Info" writeTo = "TARGET_NAME" />
|
donde NAME_OF_CLICK_SCRIPT es el nombre del script de clic que deseas registrar en el archivo, y TARGET_NAME es el nombre único del destino que agregaste arriba. Los errores y datos registrados a través del método log en ese Click Script se escribirán en el archivo especificado.