Referência de regras
Um roteamento tem duas partes: General, com as opções de varredura e de log, e FileMatching, com a lista de regras. No modo banco de dados, o roteamento é mantido no Riversoft® Console Portal e pode ser exportado com -export. No modo arquivo local, é um arquivo JSON criado a partir do modelo example-config_rules.json.
{
"General": { "Name": "ENTRADA", "ScanDir": "/caixa/IN", "LogLevelOnSuccess": 6, "LogLevelOnError": 1 },
"FileMatching": [
{
"Index": 0,
"Name": "NOTAS",
"FileRegEx": "^NOTAS.*\\.TXT$",
"General": { "SourceUser": "PARCEIRO", "WeekDayInterval": 127, "EndDateHour": 23, "EndDateMinute": 59, "EndDateSecond": 59 },
"Filename": { "RenameFileTo": "" },
"Copy": { "CopyToDir": "/caixa/OUT", "CopyFileOption": 13 },
"Backup": { "BkpToDir": "/backup/notas", "BkpFileOption": 4 }
}
]
}Os campos de texto aceitam expressões regulares no padrão RE2. Os campos numéricos marcados como opções são somas de valores: para combinar opções, some os valores, por exemplo 1 + 4 + 8 = 13.
General do roteamento
| Campo | Descrição |
|---|---|
Name, Description | Nome e descrição do roteamento. |
ScanDir | Diretório da varredura. A opção -scan tem prioridade. |
ScanSubDir | 0: somente o diretório; 1: somente os subdiretórios; 2: o diretório e os subdiretórios. As opções -nosubdir, -subdir e -subdir2 têm prioridade. |
ScanDirRegEx, ScanDirRegExNeg | Expressões que incluem ou excluem diretórios da varredura. |
ScanFileRegEx, ScanFileRegExNeg | Expressões que incluem ou excluem arquivos da varredura. |
ScanFirstRule | Número (Index) da primeira regra avaliada. Padrão: 0. |
ScanLockSem | Nome do semáforo que impede duas varreduras simultâneas com o mesmo nome. |
ScanLockSemTimeout | Tempo máximo de espera pelo semáforo, em milissegundos. -1 espera sem limite. |
ScanLockSemOptions | Opções. 1: termina imediatamente se o semáforo estiver em uso. |
LogErrorOption | Opções. 1: registra erro quando o arquivo não pode ser lido; 2: registra erro quando um diretório não pode ser lido. |
LogLevelOnSuccess, LogLevelOnWarning, LogLevelOnInfo, LogLevelOnError | Nível das mensagens de sucesso, aviso, informação e erro das regras. Padrões: 6, 7, 7 e 1. Veja Níveis das mensagens. |
ScanCheckFileInUse, DelayRetry, MaxRetries | Mantidos para compatibilidade. Não são usados nesta versão. |
Seleção do arquivo
Cada item de FileMatching é uma regra. As regras são avaliadas em ordem de Index, e vale a primeira que corresponder ao arquivo.
| Campo | Descrição |
|---|---|
Index | Número da regra, a partir de 0, sem lacunas. Uma lacuna encerra a avaliação. |
Name, Description | Nome e descrição da regra. Disponíveis em $RULENAME e $DESCR. |
Locked | 1 bloqueia a regra, que passa a ser ignorada. |
FileRegEx | Expressão aplicada ao nome do arquivo. |
DirRegEx | Expressão aplicada ao diretório do arquivo. |
SrcRegEx | Expressão aplicada à origem informada em -src. |
ContentRegEx | Expressão aplicada às primeiras linhas do arquivo. O número de linhas é definido em General.ContentLinesToRead. |
Um campo vazio aceita qualquer valor.
Nota
Quando ContentRegEx está preenchido e o conteúdo não corresponde, o processamento do arquivo termina com erro, sem avaliar as regras seguintes. Use FileRegEx e DirRegEx para separar os arquivos antes de verificar o conteúdo.
General da regra
| Campo | Descrição |
|---|---|
SourceUser, DestinationUser | Usuários de origem e de destino associados à regra. Disponíveis em $SRCUSER e $DSTUSER e usados no registro das mensagens. |
ExecProgBefore | Comando executado antes da cópia. |
ExecProg | Comando executado depois da cópia. |
ExecProgError | Comando executado quando uma etapa falha. |
CheckLockUnlockFileName | Arquivo de controle conferido antes do processamento e removido no fim. Aceita variáveis. |
CreateLockUnlockFileName | Arquivo de controle criado durante o processamento. Aceita variáveis. |
CheckLockUnlockOption | Opções dos arquivos de controle. Veja Arquivos de controle. |
RemoveAfterCopy | 1 remove o arquivo original no fim do processamento. |
RemoveAfterHours | Com RemoveAfterCopy, remove o original somente se ele tiver mais horas do que o valor informado. 0: remove sempre. |
ProcessAfterSeconds | Idade mínima do arquivo, desde a última modificação, para ser processado. O valor é interpretado em milissegundos. 0 desabilita. |
InsertTimestamp | Opções. 1: acrescenta a data e hora no fim do nome; 2: acrescenta no início. O separador é .. |
InsertTimestampPart | Origem da data e hora: 0, hora atual; 1, 2 ou 3, data de modificação do arquivo. |
InsertTimestampFormat | Formato da data e hora, escrito com a data de referência 2006-01-02 15:04:05. Exemplo: 20060102150405 gera AAAAMMDDhhmmss. Vazio: AAAAMMDDhhmmss0mmm. |
DelayNextFileProcess | Pausa depois de processar o arquivo, em milissegundos. |
StartDateHour, StartDateMinute, StartDateSecond | Início do horário permitido. |
EndDateHour, EndDateMinute, EndDateSecond | Fim do horário permitido. |
WeekDayInterval | Dias permitidos: some 1 (domingo), 2 (segunda), 4 (terça), 8 (quarta), 16 (quinta), 32 (sexta) e 64 (sábado). 127 ou 255: todos os dias. |
FileLenOption | Opções. 1: confere o tamanho mínimo; 2: confere o tamanho máximo. |
FileLenMin, FileLenMax | Tamanhos mínimo e máximo, em bytes. |
ReplaceFromFileOption | 1 habilita a montagem do nome a partir do conteúdo (Filename.ReplacesFromFile). |
ContentLinesToRead | Número de linhas lidas para ContentRegEx. |
OtherOption | Opções. 2: reinicia o número sequencial a cada dia. |
NextSection | Nome da próxima regra a executar sobre o mesmo arquivo. |
Overwrite | Mantido para compatibilidade. Para sobrescrever, use as opções de Copy e Backup. |
Quando o arquivo está fora do horário, do dia, da idade ou do tamanho permitidos, o processamento termina com um aviso.
Novo nome (Filename)
O novo nome é montado nesta ordem:
- Parte de
RenameFileTo. Vazio: o novo nome começa vazio e, se nada for acrescentado, o nome original é mantido. - Aplica
ReplacesFromFile, quando habilitado emReplaceFromFileOption. - Aplica
Replaces, em ordem. - Acrescenta a data e hora, conforme
InsertTimestamp. - Aplica
ReplacesByRegEx, em ordem.
Replaces
Cada item copia um trecho de uma origem para o novo nome. As posições começam em 1.
| Campos | Origem do trecho |
|---|---|
ReplaceFileNamePosFrom, ReplaceFileNamePosTo, ReplaceFileNameLen | Nome original do arquivo. |
ReplaceFileNameFromPathPosFrom, ReplaceFileNameFromPathPosTo, ReplaceFileNameFromPathLen | Diretório original do arquivo. |
VarReplaceFileNamePosFrom, VarReplaceFileNamePosTo, VarReplaceFileNameLen, VarReplaceFileNameValue | Valor fixo. O valor de -var0 substitui o do primeiro item, -var1 o do segundo, e assim por diante. |
InsertTimestampPosFrom, InsertTimestampPosTo, InsertTimestampLen | Data e hora. |
InsertSeqNumberTo, InsertSeqNumberLen, InsertSeqNumberMin, InsertSeqNumberMax | Número sequencial com zeros à esquerda, de Min a Max, que volta ao mínimo depois do máximo. |
...PosFrom: posição inicial do trecho na origem.0: início....PosTo: posição no novo nome onde o trecho é escrito, sobrepondo o que houver.0ou-1: acrescenta no fim....Len: número de caracteres.0desabilita o item.
O último número sequencial usado é guardado no diretório applLockDir. InsertSeqNumberSeq é mantido para compatibilidade.
Exemplo: para o arquivo NF20261110.TXT, o item abaixo gera 20261110, copiando 8 caracteres a partir da posição 3:
{ "ReplaceFileNamePosFrom": 3, "ReplaceFileNamePosTo": -1, "ReplaceFileNameLen": 8 }ReplacesFromFile
Copia para o novo nome um trecho da primeira linha do arquivo que corresponde à expressão.
| Campo | Descrição |
|---|---|
ReplaceFromFileRegEx | Expressão que localiza a linha. |
ReplaceFromFilePosFrom, ReplaceFromFilePosTo, ReplaceFromFileLen | Trecho da linha copiado, com as mesmas regras de Replaces. |
ReplaceFromFileNext | 1 continua lendo as linhas seguintes depois de encontrar esta. |
ReplacesByRegEx
Substitui no novo nome cada ocorrência de RegExReplaceFrom por RegExReplaceTo. Use ${1}, ${2} para os grupos e ${0} para o trecho encontrado. Exemplo: "RegExReplaceFrom": "(?i)\\.txt$", "RegExReplaceTo": ".csv". RegExReplaceOcorr é mantido para compatibilidade.
Cópia (Copy)
| Campo | Descrição |
|---|---|
CopyToDir | Diretório de destino. Vazio: o diretório do arquivo original. A opção -copydir tem prioridade. |
CopyFileOption | Opções da cópia. Veja a tabela abaixo. |
Replaces | Monta o diretório de destino por posições, como em Filename.Replaces, com os campos PathReplace... (diretório original), PathReplaceFromFileName... (nome do arquivo), PathInsertTimestamp... (data e hora) e PathVarReplace... (valor fixo ou -var0 a -var9). |
ReplacesByRegEx | Substituições por expressão regular no diretório de destino. |
CopyTempExtension, CopyFileRecSize | Mantidos para compatibilidade. Não são usados nesta versão. |
| Valor | Opção de CopyFileOption |
|---|---|
1 | Executa a cópia. Sem esta opção, não há cópia. |
4 | Cria o diretório de destino, se não existir. |
8 | Move o arquivo em vez de copiar. |
16 | Sobrescreve o arquivo de destino. Sem esta opção, a cópia falha se o destino existir. |
64 | Insere CR antes de cada LF (formato Windows). |
128 | Remove os caracteres CR (formato Linux). |
512 | Converte o novo nome para minúsculas. |
1024 | Converte o novo nome para maiúsculas. |
Backup (Backup)
| Campo | Descrição |
|---|---|
BkpToDir | Diretório do backup. A opção -backupdir tem prioridade. |
BkpFileOption | Opções do backup. 0: não há backup. Com qualquer outro valor, o backup é feito; informe também BkpToDir. |
Replaces, ReplacesByRegEx | Montam o diretório do backup, como em Copy. |
| Valor | Opção de BkpFileOption |
|---|---|
1 | Usa o novo nome no backup. Sem esta opção, usa o nome original. |
4 | Cria o diretório do backup, se não existir. |
16 | Sobrescreve o backup existente. |
32 | Faz o backup antes da cópia. Sem esta opção, o backup é feito depois da cópia. |
64, 128 | Insere CR antes de LF ou remove CR. |
256 | Acrescenta a data e hora no fim do nome do backup. |
Arquivos de controle
Os arquivos de controle sinalizam a outros processos que um arquivo está em processamento ou pronto. Os nomes aceitam variáveis, por exemplo $PATHOLDNAME/$OLDNAME.lck.
| Valor | Opção de CheckLockUnlockOption |
|---|---|
2 | Antes do processamento, exige que CheckLockUnlockFileName exista. |
4 | Antes do comando ExecProgBefore, cria CreateLockUnlockFileName. Falha se ele já existir. |
8 | Depois da cópia, cria CreateLockUnlockFileName. |
16 | No fim, remove CreateLockUnlockFileName. |
32 | No fim, remove CheckLockUnlockFileName. |
Comandos externos
ExecProgBefore, ExecProg e ExecProgError recebem um comando com argumentos, por exemplo:
/usr/local/bin/notificar.sh "$FILENEWNAME" $SRCUSER $DSTUSER- As variáveis são substituídas antes da execução. Veja Referência de variáveis.
- O comando é executado diretamente, sem um shell: use o caminho completo e, para redirecionamentos ou pipes, chame um script.
- Argumentos entre aspas duplas ou simples são passados sem as aspas.
- O Riversoft STCP Gemini Rename espera o fim do comando. Um código de saída diferente de
0é tratado como falha.