=========
`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.