========= `xMova Android `_ ========= ----------- Instruções ----------- * ``actionbarsubtitle``: Exibe mensagens abaixo do título da tela. Para remover o texto deve usar o arroba (@). * ``addDate``: Função para somar ou subtrair tempo de um campo Date. Recebe uma data, um tempo e um tipo (h, m, s). O tempo pode ser positivo ou negativo. Método retorna um date com a soma dos dois valores. **Exemplo**:: Entidade id inc dataAtual now data Date fieldEvents autoFill data return addDate dataAtual 1 @m * ``bluetooth``: Usada para receber ou enviar arquivos via bluetooth. (default: sender) (veja: :ref:`Sincronismo Off-line por Bluetooth `) * ``bluetooth`` - ``sender``: Define que será aberta a opção para enviar dados (ex.: bluetooth sender). * ``bluetooth`` - ``receiver``: Define que será aberta a opção para receber dados (ex.: bluetooth receiver). * ``bluetooth`` - ``fileReceiver``: Define que será a opção para receber arquivos (ex.: bluetooth fileReceiver). Para usar esta opção deve ser criada uma entidade de nome ReceivedFiles com os seguintes campos (id String uuid, name String notFill, date Now, content bytes) * ``clear``: Realiza a limpeza (apaga todos os dados) do aplicativo. * ``concat``: Faz a junção de dois textos. **Exemplo**:: Entidade id inc campo1 long campo2 int campo3 String fieldEvents autoFill campo3 return concat campo1 campo2 * ``cryptography``: Retorna um texto encriptografado conforme um algoritmo definido (apenas os suportados pelo Java: SHA-1, SHA-256 e MD5). Recebe dois parâmetros (ambos strings): algoritmo e field/string. **Exemplo**:: Entidade String encrypt = cryptography @SHA-1 senha * ``replaceall``: Retorna uma string modificada de acordo com a regex e o replace. Recebe três parâmetros, todos strings: element, regex e replacement. Caso não detecte algum padrão, retorna a String vazia. **Exemplo**:: Entidade String telephone = replaceall "1239101234" "(/d{2})(/d{4})(/d*)" "($1)-$2-$3" * ``matches``: Retorna um boleano que identifica se uma string contém um padrão de expressão regular. Recebe dois parâmetros, todos strings: element e regex. **Exemplo**:: Entidade matches "1239101234" "(/d{2})(/d{4})(/d*)" * ``confirm``: Retorna tela para confirmação do campo. O retorno false, não permite prosseguir com o fluxo. * ``confirm`` - ``password``: Retorna tela para confirmação do campo através do input numérico. .. note:: Da versão 2.7 do Core em diante, deve ser usada a funcionalidade **input** para requisição de password Caso o parametro passado seja igual a 0(zero), é gerado um número aleatório com 4 digitos, e o usuário deve repetir este número no input (ex.: confirm password=0). Caso o parametro passado seja maior que 0(zero), é gerado um número aleatório com 4 digitos a partir do número passado, e o usuário deve informar um número de 4 digitos chamado contra-senha (ex.: confirm password=123). .. note:: Algoritmo para gerar Contra Senha: Usa-se a senha que foi gerada de forma randômica, e o número passado como parametro no password que é carregado na constante Password. Faz-se a concatenação da soma de cada unidade dos números da senha randômica com cada unídate dos números do Password com a ordem invertida e pega os últimos 4 números. Senha randômica terá sempre 4 números, Password terá no máximo 4 números e pode ser complementada com zeros a esquerda. **Exemplo**:: Password=> 1206 Password invertido=> 6021 Senha gerada=> 9999 soma => (6 + 9),(0 + 9),(2 + 9),(1 + 9) concatenação=> 1591110 contra-senha=> 1110 * ``confirm``- ``lang``: É passado uma chave presente no Lang, que contém o texto que será apresentado na tela. * ``confirm``- ``lang`` - ``vars``: Variáveis passadas para compor a mensagem presente no custom lang passado. **Exemplo**:: Entidade campo1 long fieldEvents onValidate campo1 return confirm password=0 lang=custom.msgCampo1 vars=var1:campo1 * ``crud`` - ``Entity``: Indica que sera aberto um crud para preencher uma entidade, criando um novo registro. * ``crud`` - ``finishRecord``: Indica que a entidade aberta será finalizada. * ``finishRecord``: Quando executado em conjunto com um record finaliza o record que foi passado. **Exemplo**:: Boletim sync=out if inc apontamento List transient crudActions agendarFechamento schedule time=8h Boletim boletim = selectLast from Boletim finishRecord boletim * ``string`` - ``getGCMIdentifier``: Retorna o identificador do Google correspondente ao dispositivo do usuário. Caso não tenha conseguido obter, por falta de Google Play Services instalado, retorna uma string vazia. * ``currentDate``: Retorna a data atual. * ``currentDateType``: Retorna o tipo da data no celular no momento. Valores retornados: "S", "G", "M", "D" e "U". * ``currentDateTypeIsValid``: Retorna se o tipo da data é válida. Retorna true se for do Servidor ou GPS. Retorna false para qualquer outro tipo. * ``{date}`` - ``getYear``: Retorna um inteiro correspondente ao ano atual, de acordo com a data do aplicativo. * ``{date}`` - ``getMonth``: Retorna um inteiro correspondente ao mês atual, de acordo com a data do aplicativo. * ``{date}`` - ``getDay``: Retorna um inteiro correspondente ao dia atual, de acordo com a data do aplicativo. * ``{date}`` - ``getHour``: Retorna um inteiro correspondente a hora atual, de acordo com a data do aplicativo. * ``{date}`` - ``getMinutes``: Retorna um inteiro correspondente ao minuto atual, de acordo com a data do aplicativo. * ``{date}`` - ``getSeconds``: Retorna um inteiro correspondente ao segundo atual, de acordo com a data do aplicativo. * ``{date}`` - ``getWeekDay``: Retorna um inteiro correspondente ao dia da semana atual, de acordo com a data do aplicativo. (Domingo: 1, Segunda: 2, Terça: 3, Quarta: 4, Quinta: 5, Sexta: 6, Sábado: 7) * ``difDateMilli``: Retorna diferença entre duas datas em milissegundos. Informar data menor seguido de data maior. * ``getYearWeek``: Retorna um valor inteiro representando o dia da semana do ano. * ``Long`` - ``generateuuid``: Retorna um valor randômico baseado na data/hora válida que representa um uuid sequencial (igual presente nos apontamentos) para o fluxo. **Exemplo**:: Entidade data1 now data2 date campo1 long fieldEvents onValidate campo1 return difDateMilli data1 data2 * ``dateToMilli``: Transforma um valor Date em Millissegundos do Java. Entrada com timezone aplicado (obra/parametro) => Saída em UTC. Entrada pode ser no timezone definido pelo usuário. Se nenhum timezone for passado como parâmetro, utilizará o timezone da obra. Timezones suportados no seguinte endereço: `TimeZones `_ **Exemplo**:: Entidade data1 now dataMilli1 long dataMilli2 long fieldEvents autoFill dataMilli1 return dateToMilli data1 dataMilli2 return dateToMilli data1 @"America/Campo_Grande" * ``milliToDate``: Transforma um valor Millissegundos em Date. Entrada em UTC => Saída com timezone aplicado (obra/parametro). Saída pode ser no timezone definido pelo usuário. Se nenhum timezone for passado como parâmetro, utilizará o timezone da obra. Timezones suportados no seguinte endereço: `TimeZones `_ **Exemplo**:: Entidade data1 now longData1 long date2 Date date3 Date fieldEvents autoFill longData1 return difDateMilli 0 data1 date2 return milliToDate longData1 dataMilli2 return milliToDate longData1 @"America/Campo_Grande" * ``dropTable``: Exclui a entidade passada. (ex.: dropTable Servico) * ``exit``: Fecha o aplicativo. * ``fill``: Indica o preenchimento de um campo. * ``finishRecord``: Para ser usado em eventos de CRUD ou em um action de entidade para iniciar o processo de finalização do registro. Por exemplo: após preencher algum campo da entidade Boletim, o desenvolvedor pode chamar esta instrução para iniciar o processo de finalização do Boletim. **Exemplo**:: Boletim sync=out confirm=Finish cleanupDays=20 noSyncAction noFinishAction id inc status int turno Turno apontServico ApontServico transient notFill add crudActions EncerrarTurno isVisible return status == %StatusInicioServico finishRecord * ``formatDateMilli``: Recebe millisegundos e retorna uma string no formato hh:mm:ss. * ``goToField``: Indica o preenchimento de um campo. * ``isBetweenDates``: Recebe 3 datas, e verifica que se 3ª data está entre a 1ª e a 2ª data. Se estiver retorna 1, caso contrário retorna 0. * ``isBetweenDates`` - ``include``: Inclue as datas de inicio e fim na validação. (ex.: include=true) * ``isOnline``: Retorna um inteiro indicando se o aplicativo está online (1) ou offline (0) * ``log``: Imprime no log o texto passado. * ``msg``: Mostra tela com mensagem. * ``msg`` - ``wait``: Pausa o fluxo de execução até que a tela da mensagem seja fechada.(ex.: msg wait=true) * ``msg``- ``lang``: É passado uma chave presente no Lang, que contém o texto que será apresentado na tela. * ``msg``- ``lang`` - ``vars``: Variáveis passadas para compor a mensagem presente no custom lang passado. * ``percentage``: Usada para calcular porcentagens no fluxo. * ``playSound``: Usada para execução de sons no fluxo. (default: BarcodeBeep). * ``playSound`` - ``name``: Usado para definir qual será o som a ser tocado. Opções disponíveis: BarcodeBeep, BarcodeError, AlertTimer, BarcodeRead. (ex.: playSound name=BarcodeBeep). * ``playSound`` - ``loop``: Usado para definir quantas vezes o som deverá ser executado. (default: 0 - Tocado uma vez sem repetição). (ex.: playSound loop=2). * ``printEntity``: Imprime no console todos os registros da entidade. * ``restart``: Fecha e abre o aplicativo. * ``save [record]``: Salva no banco o registro informado como parâmetro. Todas as telas que tiverem uma instância desse registro receberão o novo registro salvo. * ``save [saveSyncOut]``: Se presente, e a entidade for SyncOut, grava também uma cópia do registro na entidade de sync. Isso fará com que o registro que acabou de ser alterado e salvo vá para o servidor no próximo sync. * ``save [syncOutOnly]``: Se a entidade for SyncOut, grava o registro apenas na entidade de _SyncOut. Isso fará com que o registro que acabou de ser alterado e salvo vá para o servidor no próximo sync. * ``simpledateformat``: Usado para formatar uma data no padrão Java. Utiliza uma string de formato e recebe um long de data e horas. (ex.: simpledateformat @"hh:mm:ss" variavel_long). * ``hoursformat ``: Usado para gerar uma String em formatado contador/decorrer de tempo da forma: hh*:mm:ss. A entrada esperada é do tipo long, do qual representa o tempo em millisegundos. **Exemplo**:: Apontamento sync=out id inc boletim Boletim operador Operador servico Servico events afterInsert Boletim registroBoletim = boletim registroBoletim.status = %StatusIdaCarga save registroBoletim saveSyncOut sync type=background //Envia o registro que acabou de ser alterado para o server * ``setAlertTimer``: Inicia o processo de alerta. Que após passado o tempo total de tolerancia mostra uma mensagem de alerta na tela. * ``setAlertTimer`` - ``message``: É passado uma chave presente no Lang, que contém o texto que será apresentado na tela. * ``setAlertTimer`` - ``time``: Define o tempo de tolerancia do ultimo alertTimer. * ``setAlertTimer`` - ``snooze``: Define o tempo de espera entre a execução de um alerta e outro. Caso este valor não seja passado é usado o valor da variável do app **timerInterval** que por padrão tem o valor de 1m. * ``setAlertTimer`` - ``repeat``: Define quantas vezes o alerta deve se repetir, caso seja passado '-1' ou nenhum valor seja passado o alerta vai se repetir até que seja cancelado. **Exemplo**:: Boletim sync=out openFinish id inc tolerancia int dataAbertura Now idTurno Turno apontamento List transient dataFechamento Now fill=Finish events afterInsert if tolerancia > 0 setAlertTimer lang=custom.msgTempoPrimeiroApont totalTime=tolerancia else stopAlertTimer * ``stopAlertTimer``: Finaliza o preocesso de alerta se ele estiver iniciado. * ``{showProgressUIDialog}`` - ``starWait``: Inicia do processo que mostra o progresso. * ``{showProgressUIDialog}`` - ``stopWait``: Finaliza o processo de progresso. * ``{showProgressUIDialog}`` - ``stopWait`` - ``after``: Determina quanto tempo a instrução deve aguardar para executar. * ``{showProgressUIDialog}`` - ``stop``: Determina quanto tempo depois a instrução stopWait deve ser chamada automaticamente. (ex.: startWait stop=20s) * ``speech``: Usada para falar algum texto no fluxo. (ex.: speech ola, speech @"ola mundo"). * ``speech``: (2.17+) Usada para falar algum texto no fluxo. (ex.: speech ola, speech @"ola mundo", speech value=@"Ola", speech value=value entity=_MARTE_TTS fieldToSearch=message_id messageField=message). **Exemplo**:: Boletim sync=out cleanupDays=1 notSavedMessage confirm=create|finish id inc crudActions speech Object fromDatabase = confirm text=@"Carregar frase do banco?" if fromDatabase == true Object value= input type=Integer text=@"Id para busca" backAfterOk Object result = speech value=value entity=@"Phrases" fieldToSearch=@"id" messageField=@"message" toast result else String phrase = input type=String text=@"Digite a frase" backAfterOk speech phrase toast phrase * ``show``: Indica que será apresentada uma tela. * ``{sql}`` - ``delete``: DELETE FROM Entidade WHERE id == :campo * ``{sql}`` - ``insert``: INSERT INTO Entidade (id,descricao) VALUES (:campo1,:campo2) * ``{sql}`` - ``rowCount table=``: Integer count = rowCount table=Entidade * ``{sql}`` - ``select``: SELECT * FROM Entidade WHERE id == :campo * ``{sql}`` - ``select count``: SELECT COUNT FROM Entidade WHERE id == :campo, retorna a quantidade de registros que foram selecionados. * ``{sql}`` - ``selectDistinctField``: selectDistinctField id FROM Entidade WHERE id == :campo * ``{sql}`` - ``selectField``: selectField id FROM Entidade WHERE id == :campo * ``{sql}`` - ``selectFirst``: selectFirst FROM Entidade WHERE id == :campo * ``{sql}`` - ``selectLast``: selectLast FROM Entidade WHERE id == :campo * ``{sql}`` - ``sumField``: Integer count = SumField campo FROM Entidade WHERE id == :campo * ``{sql}`` - ``update``: UPDATE Entidade SET campo = :campo1 WHERE id == :campo * ``subStr``: Retorna uma parte de um texto. **Exemplo**:: Entidade id inc valor Str notFill inicio int fim int texto Str substring Str OnGetDefaultInputValue="valor" fieldEvents onValidate texto valor = substr inicio fim texto return true * ``strLen``: Retorna a quantidade de caracteres de um texto. **Exemplo**:: Entidade id inc valor int notFill texto Str length int OnGetDefaultInputValue="valor" fieldEvents onValidate texto valor = strlen texto return true * ``sync``: Efetua um sincronismo Background. Não permite prosseguir caso esteja offline. * ``sync`` - ``background``: Efetua um sincronismo Background. Permite prosseguir caso esteja offline. * ``sync`` - ``noBack``: Efetua um sincronismo Foreground. Permite prosseguir caso esteja offline. * ``toast``: Exibe mensagens rápidas e temporais no cabeçalho da tela. * ``verifyemptyentity``: Verifica se existe alguma entidade do tipo sync=in que esteja vazia. Não verifica entidade que contém o atributo emptyVerify=false. * ``for``: Usado para iterar sobre uma lista de registros. Sempre que é criado um for é adicionada uma variável cujo nome é o nome da variável de iteração do loop acrescido de 'Idx' e cujo valor é o índice de cada iteração do loop. **Exemplo**:: Entidade id inc valor int notFill texto Str options option1 _grupos = SELECT * FROM Grupo _funcionarios = SELECT * FROM Funcionario for g in _grupos log g log gIdx //recebe o valor do índice de cada iteração for f in _funcionarios log f log g log gIdx log fIdx * ``roundFloat``: (roundFloat valorfloat numero_casas_decimais). Faz o arredondamento de um valor do tipo ponto flutuante deixando com o máximo de casas definidos. Sua implementação é uma manipulação matemática: multiplicação do número de casas estipulados em potência de base 10, em seguida divisão pelo mesmo valor, arredondando para o mais próximo (teto, não piso). **Exemplo**:: roundFloat value 3 * ``getUuid``: retorna uma String representando o valor do device uuid * ``hasOfflineData``: retorna um Boolean representando se há dados pendentes no aplicativo para enviar a web. Retorna True se houver dados a enviar e False se não tiver. Ele verifica nas tabelas de sync_out e nos dados recebidos via bluetooth. **Exemplo**:: Boletim temDadosOffline boolean fieldEvents autoFill temDadosOffline return hasOfflineData * ``schedule``: Agenda um conjunto de código para ser executado em um determinado período de tempo, podendo conter repetição ou não. * ``schedule`` - ``time``: determina a quantidade em milisegundos que a ação deverá ser executada a partir da hora atual. (Aceita o tempo no formato time=1h (s|m|h) digitado diretamente na instrução ou pode receber uma variável do tipo long que represente os millisegundos, uma variável do tipo String no mesmo formato dos valores que podem ser digitados diretamente ou um campo do tipo date) * ``schedule`` - ``hour``: determina um horário no formato HH:mm ou HH:mm:ss em que a ação deverá ocorrer, por padrão a ação é repetida sempre no mesmo horário todos os dias. (O valor pode ser digitado diretamente na instrução ou então pode ser recebido de uma variável) * ``schedule`` - ``repeatIn``: determina a quantidade de tempo que a instrução deve aguardar para se repetir. (Aceita o tempo no formato time=1h (s|m|h) digitado diretamente na instrução ou pode receber uma variável do tipo long que represente os millisegundos ou então uma variável do tipo String no mesmo formato dos valores que podem ser digitados diretamente) **Exemplo**:: schedule time=1m log Executing from schedule **Exemplo**:: Boletim id int apontamentos List transient timeToExecute Date notFill crudActions agendar fill timeToExecute fieldEvents afterFill timeToExecute schedule time=timeToExecute Boletim boletim = selectLast Boletim finishRecord boletim **Exemplo**:: Boletim sync=out notSavedMessage id inc text String primeiroNivel List transient dateToExecute Date notFill timeToExecute String notFill hourToExecute String notFill repeatInStr String notFill repeatInMillis Long notFill actionToCancel Integer notFill crudActions agendarTime schedule time=20s toast scheduled time log scheduledActionTest time log execute log scheduled log id agendarDate fill dateToExecute agendarStr fill timeToExecute agendarHour fill hourToExecute agendaRepeatInMillis schedule time=20s repeatIn=3m toast agendaRepeatInMillis log scheduledActionTest agendaRepeatInMillis log execute log scheduled log id log repeatIn agendarRepeatInValueStr fill repeatInStr agendarRepeatInValueMillis fill repeatInMillis * ``cancelSchedule``: Usado para cancelar uma ação previamente agendada usando a instrução **schedule**, caso não seja passada nenhuma valor para o atributo **action** todas as ações agendadas do fluxo são canceladas * ``cancelSchedule`` - ``actions``: Atributo usado para definir quais ações do fluxo devem ser canceladas. Pode ser passado um record, uma lista de records ou uma lista de ids. **Exemplo**:: Boletim sync=out notSavedMessage id inc text String primeiroNivel List transient dateToExecute Date notFill timeToExecute String notFill hourToExecute String notFill repeatInStr String notFill repeatInMillis Long notFill actionToCancel Integer notFill crudActions agendarTime schedule time=20s toast scheduled time log scheduledActionTest time log execute log scheduled log id agendarDate fill dateToExecute agendarStr fill timeToExecute agendarHour fill hourToExecute agendaRepeatInMillis schedule time=20s repeatIn=3m toast agendaRepeatInMillis log scheduledActionTest agendaRepeatInMillis log execute log scheduled log id log repeatIn agendarRepeatInValueStr fill repeatInStr agendarRepeatInValueMillis fill repeatInMillis cancelAll cancelSchedule cancelAction fill actionToCancel cancelSelectLast _SCHEDULED_ACTION actionsValue = selectLast from _SCHEDULED_ACTION cancelSchedule actions=actionsValue cancelSelectAll _SCHEDULED_ACTION actionsValue = select * from _SCHEDULED_ACTION cancelSchedule actions=actionsValue * ``isGpsEnabled``: (2.7.49+) Retorna um boolean indicando se o GPS está ou não ativo * ``hasFixedPoint``: (2.17+) Retorna um boolean indicando se existe ou não fixed point para o fluxo corrente * `´changeDrawerState``: (2.17+) Permite alterar o estado do drawer. Exemplo: **changeDrawerState open right**, **changeDrawerState close** * ``cancelEvent``: (2.17+) Permite cancelar a execução dos eventos **OnMovimentStop** e **OnMovimentStart**. Exemplo: **cancelEvent OnMovimentStop**. * ``setStatusColor``: (2.17+) Permite definir uma cor no formato RGB (#123456) para o fundo da imagem do capitão Simova que fica na barra de status. (Cores Padrões: green, orange, red, inactive, black, blue e grey) Exemplo: **setStatusColor #001144**, **setStatusColor inactive**. Pode ser usado o valor de um campo que contenha o valor da cor.