OpenSxs para versão 12.1.23

Por favor, alguém ajuda como eu utilizo essa função OpenSxs no meu fonte customizado?

Não consegui fazer funcionar até agora

No exemplo em anexo não funcionou.

Gostaria de utilizar em SX2, SX3, SX6, SXG, etc...

Tambem já olhei esse link e não consegui https://centraldeatendimento.totvs.com/hc/pt-br/articles/360026047911-MP-ADVPL-OPENSXS-PARA-LEITURA-DE-DICION%C3%81RIO-DE-DADOS

Lucas, boa tarde.

Se for para consulta ao dicionários você pode utilizar as classes no link http://tdn.totvs.com/display/PROT/Classes

Cara, não é tão simples assim, não é possivel. Já cansei desses links. Ta foda.

Unica coisa que consegui até agora foi alterar aonde consultava SX3, troquei pra: FwSx3Util():GetAllFields() e GetSx3Cache. Agora aonde não tem essas classes de tabela especifica igual tem a SX3, por exemplo a SXG, to vendo se consigo pelo OpenSXS porém não estou coneguindo, por exemplo, o que eu faço aqui?

aSX3[nI][nPosTam] := SXG->XG_SIZE

E a SX6 que eu criava parametros direto do fonte? SX6->X6_FIL := Space(Len(SX6->X6_FIL)) SX6->X6_VAR := "ES_USAMAIL" SX6->X6_TIPO := "N" SX6->X6_DESCRIC := "Utiliza SMTP na Imp de XML" SX6->X6_CONTEUD := AllTrim(Str(nUsaMail)) SX6->X6_CONTSPA := AllTrim(Str(nUsaMail)) SX6->X6_CONTENG := AllTrim(Str(nUsaMail)) SX6->X6_PROPRI := "U" SX6->X6_PYME := "S"

Qq coisa que de reclock no dicionário você não vai conseguir mais. Para o SX6 tem que usar o SuperGetMV para que se o parâmetro não existir assuma um valor.

Segue um exemplo funcional que utilizo e funciona bem:


OpenSxs(,,,,,"SX3TRB","SX3",,.F.)
If Select("SX3TRB") > 0
    dbSelectArea('SX3TRB')
    SX3TRB->( dbSetOrder( 1 ) ) //ORDENA POR ALIAS
    SX3TRB->( dbGoTop(  ) )        
    If SX3TRB->( msSeek( cTabela ) )
        While SX3TRB->(!Eof()) .AND. SX3TRB->X3_ARQUIVO==cTabela
            if AT("_FILIAL",SX3TRB->X3_CAMPO) > 0
                cAliasFil := SX3TRB->X3_CAMPO
                cExpressao:= Space(TamSx3(cAliasFil)[1])
            Endif
            if SX3TRB->X3_TIPO <> "M" .AND. SX3TRB->X3_CONTEXT <> "V"
                aadd(aCampos,SX3TRB->X3_CAMPO + "=" + SX3TRB->X3_TITULO)
            Endif
            SX3TRB->(dbSkip())
        End            
    Endif
    SX3TRB->( DbCloseArea() ) 
Endif


Local aCampos := {"C5_NUM","C5_CLIENTE","C5_LOJACLI","C5_EMISSAO","C5_PBRUTO"}
For i := 1 to Len(aCampos)

    OpenSxs(,,,,,"SX3TRB","SX3",,.F.)
    If Select("SX3TRB") > 0
        dbSelectArea('SX3TRB')
        SX3TRB->( dbSetOrder( 2 ) ) //ORDENA POR CAMPOS
        SX3TRB->( dbGoTop(  ) )        
        If SX3TRB->( msSeek( aCampos[i] ) )
            if SX3TRB->X3_TIPO    == "N"
                aadd(aAuxDet,{'Right','<NumberFormat ss:Format="0.00"/>'})
            Elseif SX3TRB->X3_TIPO    == "D"
                aadd(aAuxDet,{'Left','<NumberFormat ss:Format="Short Date"/>'})
            Else
                aadd(aAuxDet,{'Left',''})
            ENDIF            
        Endif
        SX3TRB->( DbCloseArea() ) 
    Endif

Next

@Rodrigo, as vezes você consegue me ajudar com um caso, visto o seu exemplo número 02:

Segue meu post: Uso da SX3, DbselectArea(

Estou apanhando feito condenado.

Uma dúvida, as mudanças feitas sobre o uso da SX3 é so para não abri-la diretamente no dbselectarea() e sim abrir a area gerada pela OpenSX?