Histórico da Página
...
Spike - S_T_A_M_P_ para Extrator Fiscal
Objetivo
Com base no estudo clique aqui.
1. Após a atualização do extrator, quando o usuário executar o RUPFIS, iremos validar tudo que o sistema precisa, lib, dbacess, etc... estando
Ao estar tudo "ok", iremos executar a rotina de criação do S_T_A_M_P nas tabela SFT e também o TAFSTAMP na tabela C20 do TAF.
2. No extrator cria criar um botão de habilitar integração automática, com isso iremos validar se o cliente possui lib, dbaccess, bin atualizados e se o S_T_A_M_P existe na tabela,
se sim iremos subir o Job que fica validando a SFT e integrando com o TAF ( habilitar o parâmetro MV_TAFINT ). Considerar o parâmetro MV_EXTQTTH para abertura de threads.
Conclusão
A primeira Primeira questão não é viável, pois o RUPFIS só é "chamado" na execução do UPDDISTR de virada de release, em atualizações pontuais, ou acumulados, o RUPFIS não é executado.
Segunda questão: É totalmente viável executar as verificação verificações necessárias.
- Schedule: Como a funcionalidade será apenas para o TAF módulo, não há necessidade de automatizar o processo de schedule, a configuração será diretamente no SIGACFG via recurso padrão do Protheus.
...
- O banco de dados suporta o campo S_T_A_M_P_?
A função TCConfig( < cParms > ) possui o recurso SETUSEROWSTAMP=ON|OFF que rmite OFF que permite ligar ou desligar a criação da coluna interna S_T_A_M_P_ para novas tabelas.
Pode retornar "OK" em caso de sucesso, "NOT_SUPPORTED" caso o Banco de Dados não tenha suporte para a coluna S_T_A_M_P_,
ou "INVALID_OPTION", caso seja informado um parâmetro diferente de "ON" ou "OFF". TOTVS Application Server build igual ou superior a 7.00.170117A com geração superior a 23/09/2019
Usar GetBuild( .f.).A versão do DBAcces deve ser maior ou igual 19/11/2019
Usar TCAPIBuild()
Com as verificações acima, apenas se o TAF for módulo, a base já se mostra apta a receber o campo S_T_A_M_T_P, neste momento será criado um botão no extrator ficalfiscal,
com um texto informativo de que o cliente já pode implementar o novo campo, o campo é um link para a documentação de implementação do campo.
Se o TAF form for módulo, porém , algum dos outros prepré-requisitos não entendamentenderem, o botão ficará com uma cor de "erro/falha/inapto" (vermelho por exemplo) ,
com a mensagem do motivo específico e com o link direcionando para a pagina página específica do motivo.
Exemplo de erro, onde algum pré-requisito não é antedido:
Exemplo onde todos os pré-requisitos são atendidos:
Caso o TAF seja segregado, o botão não aparece.
Exemplo do algoritmo das validações e disponibilização do botão
Local lTafModule := TemRegC1E()
if lTafModule
cConfigRow := TCConfig('SETUSEROWSTAMP=ON')
aGetBuild := strtokarr(GetBuild( .f.),'-')
cDbAcesBld := TCAPIBuild()
if cConfigRow <> 'OK'
cTexto := 'O banco de dados não possui suporte para integração on-line (automática)'
cLink := 'https://tdn.totvs.com/display/tec/TCConfig'
lButtonOk := .f.
elseif aGetBuild[1] < '7.00.191205P'
cTexto := 'Para utilização do modelo integração On-Line(automático/ nativa/) está disponível apenas para TOTVS Application Server build igual ou superior a 7.00.170117A com geração superior a 23/09/2019.'
cLink := 'https://tdn.totvs.com/display/tec/TCConfig'
lButtonOk := .f.
elseif aGetBuild[1] >= '7.00.191205P' .and. aGetBuild[2] < '20190923'
cTexto := 'Para utilização do modelo integração On-Line(automático/ nativa/) está disponível apenas para TOTVS Application Server build igual ou superior a 7.00.170117A com geração superior a 23/09/2019.'
cLink := 'https://tdn.totvs.com/display/tec/TCConfig'
lButtonOk := .f.
elseif substr(cDbAcesBld,1,8) < '20191119'
cTexto := 'Para utilização do modelo integração On-Line(automático/ nativa/) está disponível apenas para TOTVS Application Server build igual ou superior a 7.00.170117A com geração superior a 23/09/2019.'
cLink := 'https://tdn.totvs.com/display/tec/TCConfig'
lButtonOk := .f.
elseif lButtonOk
if Ascan( TCStruct(RetSqlName( "C20" )), {|x| x[1] == 'S_T_A_M_P_' }) == 0
DbSelectArea("C20")
endif
if Ascan( TCStruct(RetSqlName( "SFT" )), {|x| x[1] == 'S_T_A_M_P_' }) == 0
DbSelectArea("SFT")
endif
cTexto := "Base apta a integração on-line (automático), clique para maiores informações."
cLink := 'https://tdn.totvs.com/display/tec/TCConfig'
endif
endif
//CSS do botão:
if lTafModule
cCssBtn2 := "QPushButton {"
cCssBtn2 += " background-repeat: none; margin: 2px;"
cCssBtn2 += " border-style: outset;"
cCssBtn2 += " border-width: 2px;"
cCssBtn2 += " border: 1px solid #FF0000;"
cCssBtn2 += " border-radius: 5px;"
cCssBtn2 += " border-color: #0b5c6f;"
cCssBtn2 += " font: bold 12px Arial;"
if !lButtonOk
cCssBtn2 += " color: #FF0000;"
else
cCssBtn2 += " color: #0b5c6f;"
endif
cCssBtn2 += " padding: 6px;"
cCssBtn2 += "}"
endif
// Estanciando o botão
if lTafModule
oBtnNews2 := TButton():New( 150, 15,cTexto,oP01Fldr,{||ShellExecute("open",cLink,"","",1)},,10,,,.F.,.T.,.F.,,.F.,,,.F. )
oBtnNews2:SetCss(cCssBtn2)
endif
O fonte FisaExtWiz.prw, usado para o POC, está anexo a issue.