- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Direct Access not allowed in data dictionary.
Perguntas Direct Access not allowed in data dictionary.
- clistenis
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 97
- Obrigados Recebidos: 0
4 anos 11 meses atrás #32772
por clistenis
Direct Access not allowed in data dictionary. foi criado por clistenis
Pessoas boa tarde.
Gostaria da ajuda de vocês.
Estou validando os fontes no codeanalisys e ocorreu o seguinte erro em fazer um dbseek na SX3.
Segue em anexo, alguem poderia me ajudar ?
Já analisei OpenSXs, FWSX3util mais infelizmente ainda não consegui adequar meu fonte.
O mesmo é para ser usado para montar uma MSNewGetDados.
Grato.
Gostaria da ajuda de vocês.
Estou validando os fontes no codeanalisys e ocorreu o seguinte erro em fazer um dbseek na SX3.
Segue em anexo, alguem poderia me ajudar ?
Já analisei OpenSXs, FWSX3util mais infelizmente ainda não consegui adequar meu fonte.
O mesmo é para ser usado para montar uma MSNewGetDados.
Grato.
Por favor Acessar ou Registrar para participar da conversa.
- kanaamlrr
- Desconectado
- Membro Platina
Menos
Mais
- Postagens: 1576
- Obrigados Recebidos: 4
4 anos 11 meses atrás - 4 anos 11 meses atrás #32790
por kanaamlrr
Respondido por kanaamlrr no tópico Direct Access not allowed in data dictionary.
Boa tarde!
Eu criei essa função genérica para resolver essas situações de dicionário:
Para fazer a chamada você pode utilizar basicamente de duas formas:
Espero ter ajudado.
Abraço!
Eu criei essa função genérica para resolver essas situações de dicionário:
#Include 'Protheus.ch'
/*
Funcao : retSXs
Objetivos : Rotina para retornar dados do dicionário já utilizando estrutura da função OpenSxs()
Autor : Kanaãm L. R. Rodrigues
Data/Hora : 23/04/2019
Parâmetros :
cDic - Alias do dicionário a ser aberto. Ex: SX3, SX2, SIX, etc...
aFields - Array contendo os campos do dicionário a serem retornados. Ex: {"X3_NOME","X3_TAMANHO","X3_DECIMAL"}
cChave - Chave a ser utilizada no filtro do dicionário. Ex: "SA1"
cCpoFil - Campos que serão filtrados. Ex: "X3_ARQUIVO"
lUsado - Somente campos usados (somente para SX3)
lNivel - Somente campos com nivel de acesso (somente para SX3)
*/
*-------------------------------------------------------------*
User Function retSXs(cDic,aFields,cChave,cCpoFil,lUsado,lNivel)
*-------------------------------------------------------------*
Local cAlias := GetNextAlias()
Local cFilter := cAlias + "->(" + cCpoFil + ") == '"+cChave+"'"
Local aRet := {}
Local __cUsado := "X3_USADO"
Local __cNivel := "X3_NIVEL"
Default lUsado := .F.
Default lNivel := .F.
OpenSXs(NIL, NIL, NIL, NIL, NIL, cAlias, cDic, NIL, .F.)
(cAlias)->(dbSetOrder(1))
(cAlias)->(dbSeek(cChave))
While (cAlias)->(!Eof()) .AND. (cAlias)->&(cCpoFil) == cChave
If (lUsado .AND. lNivel .AND. X3USO((cAlias)->&(__cUsado)) .AND. cNivel >= (cAlias)->&(__cNivel));
.OR. (lUsado .AND. X3USO((cAlias)->&(__cUsado)));
.OR. (lNivel .AND. cNivel >= (cAlias)->&(__cNivel))
aAdd(aRet, GenStruct(cAlias,aFields))
Else
aAdd(aRet, GenStruct(cAlias,aFields))
EndIf
(cAlias)->(dbSkip())
EndDo
(cAlias)->(dbCloseArea())
Return aRet
*---------------------------------------*
Static Function GenStruct(cAlias,aFields)
*---------------------------------------*
Local aAux := {}
If aFields[1]=="HEADER"
aFields := {;
"X3_TITULO",;
"X3_CAMPO",;
"X3_PICTURE",;
"X3_TAMANHO",;
"X3_DECIMAL",;
"X3_VALID",;
"X3_USADO",;
"X3_TIPO",;
"X3_F3",;
"X3_CONTEXT"}
EndIf
AEval(aFields, {|cField| AAdd(aAux, (cAlias)->&(cField))})
Return (aAux)
Para fazer a chamada você pode utilizar basicamente de duas formas:
Local aSemSx3 := {}
Local aFields := {"X3_CAMPO","X3_TIPO","X3_TAMANHO","X3_DECIMAL"}
aHeader := U_retSXs("SX3",{"HEADER"},"SZM","X3_ARQUIVO",.T.,.T.)
aSemSx3 := U_retSXs("SX3",aFields,"SZM","X3_ARQUIVO",.T.,.T.)
Espero ter ajudado.
Abraço!
Ultima edição: 4 anos 11 meses atrás por kanaamlrr.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Direct Access not allowed in data dictionary.
Tempo para a criação da página:0.119 segundos