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.