---
description: "Use quando editar JavaScript Rhino no DavinTI/Vitruvio (.js) e scripts nos formularios/processos .xml Vitruvio: compatibilidade ES5, padroes de db/query, interop Java, concatenacao SQL/HTML e alteracoes seguras para producao."
name: "Rhino ES5 Vitruvio"
applyTo: "**/*.js, **/*.xml"
---
# Rhino ES5 (Vitruvio)

- O runtime e Rhino ES5. Use sempre `var`.
- Nao use `let`, `const`, template strings, arrow functions, optional chaining ou outros recursos modernos de JS.
- Em comparacoes com objetos Java (interop), prefira `==` e `!=`.
- Monte SQL/HTML com concatenacao incremental:
  - `var sql = ""; sql += " SELECT ...";`
- Prefira APIs/libs padrao da plataforma:
  - `libService.loadScript('db'|'javadateutils'|'util'|...)`
  - `new db("CONEXAO")`, `db.queryRow(sql, params)`, `db.query(sql, params).each(function (row) { ... })`, `db.transaction(function () { ... })`, `db.executeProcedure(nome, parametros)`, `db.update(sql, params)`
  - `engine.getField('campo').setValue`, `engine.getLabel('id').setValue`, `engine.getWidget('id')`, `engine.setGlobalVariable('nome', funcao);`
  - `execution.getVariable/ setVariable`, `taskService`, `vFormService`, `sendMessageToVitruvio({ ... })`
- `db.query` retorna `null` quando nao ha linhas; se o objeto existir, ja ha ao menos um registro e deve ser percorrido com `lista.each(...)` (nao usar `size`).
- Organize helpers internos (formatação de data, filtros, builders de HTML) antes das funcoes expostas (`this.metodo = function () { ... }`).
- Mantenha nomenclatura e convencoes existentes em portugues.
- Priorize alteracoes minimas e compativeis com producao, evitando refactors amplos.
