No artigo de hoje, vamos mostrar como criar os campos S_T_A_M_P_ e I_N_S_D_T_ direto via código fonte em AdvPL ou TLPP.
Recentemente, me perguntaram se seria possível criar esses campos direto via código fonte, e o grande Sangar Zucchi ( LinkedIn ), comentou nesse artigo um trecho de exemplo: Para que serve os novos campos S_T_A_M_P_ e I_N_S_D_T_ e como utilizá-los no Protheus
Basicamente a lógica para fazer o procedimento seria a seguinte:
- É utilizado a TCConfig para “ativar” os recursos que serão usados na tabela
- É aberto a tabela em modo exclusivo
- É executado o comando TCRefresh para atualizar as informações da tabela no banco de dados
Abaixo o código fonte de exemplo conforme a lógica acima:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} zStamp Criação de campos S_T_A_M_P_ e I_N_S_D_T @type user function @author Atilio @since 23/12/2024 @param cTabAlias, Caractere, Alias da tabela (exemplo SB1) @param lStamp, Lógico, Se .T. tenta criar o campo S_T_A_M_P_ @param lInsDt, Lógico, Se .T. tenta criar o campo I_N_S_D_T_ @example u_zStamp("SB1") @obs Foi construído essa função baseado no comentário do Sangar Zucchi nesse link: https://terminaldeinformacao.com/2023/01/25/para-que-serve-os-novos-campos-s_t_a_m_p_-e-i_n_s_d_t_-e-como-utiliza-los-no-protheus/ /*/ User Function zStamp(cTabAlias, lStamp, lInsDt) Local cTabSQL := "" Local lOkStamp := .F. Local lOkInsDt := .F. Default cTabAlias := "" Default lStamp := .T. Default lInsDt := .T. //Se veio algum alias e ele existir na base If ! Empty(cTabAlias) .And. ExisteSX2(cTabAlias) //Valida se consegue ativar o recurso no BD lOkStamp := (lStamp .And. (TCConfig('SETAUTOSTAMP = ON') == 'OK') .And. (TCConfig('SETUSEROWSTAMP = ON') == 'OK')) lOkInsDt := (lInsDt .And. (TCConfig('SETAUTOINSDT = ON') == 'OK') .And. (TCConfig('SETUSEROWINSDT = ON') == 'OK')) If lOkStamp .Or. lOkInsDt //Busca o nome real da tabela, exemplo SB1 => SB1010 cTabSQL := RetSQLName(cTabAlias) //Se a tabela já estiver aberta, fecha para depois abrir em modo exclusivo If Select(cTabAlias) > 0 (cTabAlias)->(DbCloseArea()) EndIf //Tenta Abrir em modo Exclusivo USE (cTabSQL) ALIAS (cTabAlias) EXCLUSIVE NEW VIA "TOPCONN" If ! NetErr() //Aciona o Refresh na tabela TCRefresh(cTabSQL) Else FWAlertError('Tabela "' + cTabAlias + '" - não foi possível abrir em modo Exclusivo', 'Falha #1') EndIf (cTabAlias)->(DbCloseArea()) //Desativa os recursos TCConfig('SETAUTOSTAMP = OFF') TCConfig('SETUSEROWSTAMP = OFF') //Senão, não será possível criar os campos Else FWAlertError('Não foi possível ativar os recursos no BD', 'Falha #2') EndIf EndIf Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.