Codeanalysis erro validação fonte

Utilizando o codeanalysis me deparei com a situação em anexo, na documentação indica o uso da função OpenSxs, mas mesmo assim é reportado o erro de acesso direto ao dicionario. Como devo proceder?

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Boa tarde. Nenhum acesso (seja leitura ou escrita) é permitido nos dicionários. Existem funções auxiliares para tal em http://tdn.totvs.com/pages/viewpage.action?pageId=353290193

Eu sempre uso o DbSelectArea() na SX3 e nunca tive problema. Olhe o exemplo abaixo:

dbSelectArea("SX3") dbSetOrder(1) dbSeek("SZH") Do While ( !Eof() .And. SX3->X3_ARQUIVO == "SZH" ) If ( X3USO(SX3->X3_USADO) .And. cNivel >= SX3->X3_NIVEL ) If aScan(aNoFields, SX3->X3_CAMPO ) = 0 aAdd(aHeader,{ Titulo(TRIM(SX3->X3_CAMPO)),; //1 TRIM(SX3->X3_CAMPO),; //2 SX3->X3_PICTURE,; //3 SX3->X3_TAMANHO,; //4 SX3->X3_DECIMAL,; //5 SX3->X3_VALID,; //6 SX3->X3_USADO,; //7 SX3->X3_TIPO,; //8 SX3->X3_ARQUIVO,; //9 SX3->X3_CONTEXT } ) //10 EndIf EndIf dbSelectArea("SX3") dbSkip() EndDo

Certo, hoje tudo funciona perfeitamente, mas estou trabalhando para a migração dos dicionários. Como poderia reescrever o código abaixo? As funções listadas no guia não retornam todas as informações dos campos.

OpenSxs(,,,,,"SX3TMP","SX3",,.F.) DbSelectArea("SX3TMP") DbSetOrder(1) DbSeek("SC6") nUsado := 0 Do While !Eof() .And. SX3TMP->X3_ARQUIVO == "SC6" If X3Uso(SX3TMP->X3_USADO) //.And. cNivel >= SX3->X3_NIVEL //.And. SX3->X3_CONTEXT <> "V" If (Alltrim(SX3TMP->X3_CAMPO) $ "C6_ITEM/C6_PRODUTO/C6_DESCRI/C6_LOCAL/C6_LOTECTL/C6_QTDVEN/C6_QTDENT/C6_QTDLIB/C6_TES") _cValid := "" Do Case Case Alltrim(SX3TMP->X3_CAMPO) == "C6_LOTECTL" _cValid := "U_EL_VALLOTE()" Case Alltrim(SX3TMP->X3_CAMPO) == "C6_QTDLIB" _cValid := "U_EL_VALLIB()" EndCase AADD(aHeader, { AllTrim(SX3TMP->X3_TITULO),; SX3TMP->X3_CAMPO,; SX3TMP->X3_PICTURE,; SX3TMP->X3_TAMANHO,; SX3TMP->X3_DECIMAL,; _cValid,; SX3TMP->X3_USADO,; SX3TMP->X3_TIPO,; SX3TMP->X3_ARQUIVO,; SX3TMP->X3_CONTEXT } ) nUsado++ Endif EndIf DbSelectArea("SX3TMP") DbSkip() Enddo

Gustavo, boa tarde! Teve algum retorno quanto ao seu código acima?

Foi criada uma documentação sobre o assunto, aqui explica certinho (com exemplo):

MP - ADVPL - OPENSXS() PARA LEITURA DE DICIONÁRIO DE DADOS

Guilherme Bigois, tudo bem? Estou tentando validar os fontes no code analysis, ja enviei o projeto, porém nao mostra as inconsistencias, mostra que estao todos A, na verdade qdo clico em ISSUES nao tem nada, o que estou fazendo de errado, pode me ajudar ? Falei com a Totvs, ela recomedou perguntar aqui no Forum...skype edglausiga. Grato.

Bom dia Gustavo Vanazi, Conseguiu resolver seu problema?

Esse link do OpenSxs que eles enviam, não consegui entender de jeito nenhum como colocar isso no meu fonte.

TA FODA essas alterações que a TOTVS faz e a gente é obrigado a adequar!!

Bom dia!
Eu consegui resolver essa questao usando o OpenSxs, alem disso coloquei & na frente de cada um dos campos. Segue exemplo

OpenSXs(,“MEUSX3”, “SX3”, NIL, .F.)
dbSelectArea(“MEUSX3”)
dbSetOrder(1)

If dbSeek(“SA1”)
While (MEUSX3->(!Eof()) .And. MEUSX3->&X3_ARQUIVO == “SA1”)
… Logica de Programacao
dbSkip()
Enddo
Endif