No artigo de hoje vamos demonstrar em como filtrar registros do Banco de Conhecimento, como por exemplo, mostrar somente registros que foram feitos upload por determinado usuário.
- Crie campos AC9, e no inic padrão coloque a informação desses campos, por exemplo, um campo de usuário (AC9_X_USR) com o inic. padrão RetCodUsr() ou um campo de módulo (AC9_X_MOD) com o conteúdo cModulo
- Assim quando for feito um upload de arquivo, será gravado dados na AC9
- Ai através do ponto de entrada MSDOCVIS, nós fazemos o filtro comparando o módulo ou o usuário
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function MSDOCVIS
Ponto de Entrada após carregar o aCols da tela de Banco de Conhecimento (MpDocument / MsDocument)
@type Function
@author Atilio
@since 24/11/2022
@see https://tdn.totvs.com/pages/releaseview.action?pageId=6087680
@obs Foi usado esse ponto de entrada, pois os dados da AC9 ficam no aCols
Ai é possível filtrar, pois não tem outro p.e. antes que dê pra usar o DbSetFilter
Foi deixado apenas o filtro por Módulo em que foi feito o Upload (ex.: FAT, COM, GPE, etc)
Mas o campo de usuário também existe, caso queira voltar o filtro, basta descomentar os
trechos que acionam a variável cUserAtu
/*/
User Function MSDOCVIS()
Local aArea := GetArea()
Local lRet := .F.
Local nLinha := 1
//Local nPosUser := GdFieldPos("AC9_X_USR")
//Local cUserAtu := RetCodUsr()
Local nPosMod := GdFieldPos("AC9_X_MOD")
Local cModAtu := cModulo
//Percorre todas as linhas dos dados da AC9
For nLinha := 1 To Len(aCols)
//Se houver linhas válidas (pois após o aSize, pode chegar em um momento que o tamanho do aCols seja 0)
If Len(aCols) > 0
//Se o módulo logado for diferente do módulo onde foi feito vínculo no Upload, remove a linha do aCols
If cModAtu != aCols[nLinha][nPosMod]
aDel(aCols, nLinha)
aSize(aCols, Len(aCols)-1)
nLinha--
EndIf
//Se o usuário atual for diferente do usuário que fez o vínculo no Upload, remove a linha do aCols
/*ElseIf cUserAtu != aCols[nLinha][nPosUser]
aDel(aCols, nLinha)
aSize(aCols, Len(aCols)-1)
nLinha--
EndIf*/
EndIf
Next
RestArea(aArea)
Return lRet
Bom pessoal, por hoje é só.
Abraços e até a próxima.