OpenSxs CodeAnalisys

Pessoal, bom dia! Já vi aqui no forum que muita gente está trocando a abertura das SXS pela função OpenSXs.

Fiz a mesma coisa. O sistema está rodando certinho na Release 17, mas quando subo meu fonte no CodeAnalisys ele está criticando.

Existe alguma outra forma do CodeAnalisys não criticar? Ele dá o erro dizendo que não é pode ter acesso direto ao dicionário de Dados.

Vocês já passaram por isso? Tem solução? Eu acredito que o CodeAnalisys está lendo o texto ao invés de ver as funções.

Desde já, agradeço.

Boa tarde Raphael, a função OpenSXS abre os dicionários, mas isso não evita necessariamente o acesso direto aos mesmos. Quais são os erros? Diversas classes com métodos estáticos estão sendo criados afim de evitar esses acessos diretos, sendo que você pode entrar em contato com a TOTVS e solicitar uma melhoria, um novo método etc.

Olá Daniel, boa tarde!
Neste caso que estou usando é para criar uma tabela temporária. Antes era feito da seguinte forma:
DbSelectArea(“SX3”)
SX3->(MsSeek(“SE2”))
While !SX3->(Eof()) .and. X3_ARQUIVO == “SE2”
//Adicionava as informações no Array
EndDo
//Era feito um DbUserArea para criar a tabela temporária
Agora está ficando:
OpenSxs(,cEmp,“SX3TMP”,“SX3”,.F.)
If Select(“SX3TMP”) > 0
SX3TMP->(DbSetFilter({|| Alltrim(X3_ARQUIVO) == “SE2”}))
While !SX3TMP->(Eof())
//Adiciona campos no Array
SX3TMP->(DbSkip())
EndDo
Endif
//Usa FwTemporaryTable

Daniel Mendes me deu uma dica que abriu minha mente para uma ideia.. Então estou fazendo da seguinte forma:


aCampos := {}
aTabela := {}
aTamanho := {}

//Capturo o nome de todos os campos desprezando os campos virtuais
aCampos := FWSX3Util():GetAllFields( "SE2", .F. )

//Faço uma leitura e capturo o tamanho, decimal e tipo
For nX := 1 to Len(aCampos)
     aTamanho := FwTamSx3(aCampos[nX])
     IF aTamanho[3] <> "M" //Se não for campo Memo
          aAdd(aTabela,{aCampos[nX],aTamanho[3],aTamanho[1],aTamanho[2]})
     Endif
Next nX

oTemporary := FwTemporaryTable("XSE2",aTabela)

//Tabela tem a necessidade de criação de índices
//Para o SIX, usei a OpenSxs

Com este exemplo acima, consegui compilar e não deu erro no programa. Agora vou subir no CodeAnalisys e ver se dá algum erro.

Boa tarde Rafael, você consegue me dar uma força com esta tópico ? Uso da SX3, DbselectArea(