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.