No artigo de hoje, vamos demonstrar em como abrir um arquivo do banco de conhecimento via código fonte em AdvPL ou TLPP.
Para quem utiliza o recurso de fazer upload de arquivos no Protheus, através da rotina de Banco de Conhecimento, pode ser que já se deparou com a necessidade de posicionar na ACB e abrir o arquivo manualmente, sem precisar abrir a tela do banco de conhecimento (função MsDocument).
Para isso, existem duas funções no Protheus que fazem essa tratativa, dependendo de como está parametrizado o MV_MODEDOC, que são as seguintes funções:
- MpDocView, que abre o arquivo quando o upload é feito na file system
- MpBinView, que abre o arquivo quando o upload é feito no banco de dados
Pensando no cenário acima, montamos uma função genérica, que recebe o código do documento, verifica como que está parametrizado o upload pelo parâmetro MV_MODEDOC, e já aciona a função respectiva.
Segue abaixo o código fonte:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} zAbreDoc Função que realiza a abertura de um arquivo do banco de conhecimento @type user function @author Atilio @since 24/02/2025 @version version @see https://tdn.totvs.com/display/public/framework/MpBinView+-+Banco+de+Conhecimento e https://tdn.totvs.com/display/public/framework/MpDocView+-+Banco+de+Conhecimento @example u_zAbreDoc("0000000002") /*/ User Function zAbreDoc(cCodObj) Local aArea := FWGetArea() Local cModeDoc := GetMV("MV_MODEDOC") // 1 = File System; 2 = DataBase Default cCodObj := "" //Se veio código de objeto If ! Empty(cCodObj) DbSelectArea("ACB") ACB->(DbSetOrder(1)) // ACB_FILIAL + ACB_CODOBJ //Se conseguir posicionar If ACB->(MsSeek(FWxFilial("ACB") + cCodObj)) //Se for sistema de arquivos If cModeDoc == "1" MpDocView(ACB->ACB_OBJETO) //Se for banco de dados ElseIf cModeDoc == "2" MpBinView(ACB->ACB_OBJETO, ACB->ACB_BIND) EndIf EndIf EndIf FWRestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.