Função SX3 - Dicionário de Dados

Senhores, Boa Tarde.

Sou novo no ADVPL, e ajustei um código para rodar com a SX3 no banco poderia me falar se está correto?

Antes....

dbSelectarea("SX3") dbSetorder(1) MsSeek("ZB0") While (!Eof() .AND. (SX3->X3_ARQUIVO == "ZB0")) If X3USO(SX3->X3_USADO) .AND. SX3->X3_CONTEXT # 'V' cCpo := "ZB0->"+Trim(SX3->X3_CAMPO) cComp := "M->"+Trim(SX3->X3_CAMPO) cTit := SX3->X3_TITULO cAnt := Iif(SX3->X3_TIPO == "N",Transform(&cCpo,SX3->X3_PICTURE),Iif(SX3->X3_TIPO="D",DTOC(&cCpo),ALLTRIM(&cCpo))) cNovo := Iif(SX3->X3_TIPO == "N",Transform(&cComp,SX3->X3_PICTURE),Iif(SX3->X3_TIPO="D",DTOC(&cComp),ALLTRIM(&cComp))) If &cCpo # &cComp aAdd(aAlterado,{cCpo,cCod,cDesc,cTit,cNovo,cAnt,adados[1][4],DTOS(Date())+" - "+time()})//GetTimeStamp(DTOS(Date())) EndIf EndIf dbSkip() Enddo

Depois.....

aStruField := FWSX3Util():GetAllFields("ZB0")

If Len(aStruField) > 0 For nC := 1 to Len(aStruField) IF X3USO(aStruField[nc,1]) .AND. GetSx3Cache(aStruField[nc,1], "X3_CONTEXT") <> 'V' cCpo := "ZB0->"+Trim(aStruField[nC,1]) cComp := "M->"+Trim(aStruField[nC,1]) cTit := FWX3Titulo((aStruField[nC,1])) cAnt := Iif(GetSx3Cache(aStruField[nC,1]) == "N",Transform(&cCpo,GetSx3Cache(aStruField[nC,1],"X3_PICTURE")),Iif(FWSX3Util():GetFieldType(aStruField[nC,1])="D",DTOC(&cCpo),ALLTRIM(&cCpo))) cNovo := Iif(GetSx3Cache(aStruField[nC,1]) == "N",Transform(&cComp,etSx3Cache(aStruField[nC,1],"X3_PICTURE")),Iif(FWSX3Util():GetFieldType(aStruField[nC,1])="D",DTOC(&cComp),ALLTRIM(&cComp))) If &cCpo # &cComp aAdd(aAlterado,{cCpo,cCod,cDesc,cTit,cNovo,cAnt,adados[1][4],DTOS(Date())+" - "+time()})//GetTimeStamp(DTOS(Date())) EndIf EndIf NEXT Endif

Bruno o código tinha alguns comandos incompletos e que precisavam de ajustes. Alterei aqui e acho que vai funcionar. Também alterei um pouco para deixar mais legível.



    aStruField := FWSX3Util():GetAllFields("ZB0")

    If Len(aStruField) > 0
        For nC := 1 to Len(aStruField)
            IF     X3USO(GetSx3Cache(aStruField[nC],'X3_USADO') .And. ;
                GetSx3Cache(aStruField[nC], "X3_CONTEXT") <> 'V'

                cCpo     := "ZB0->"+Trim(aStruField[nC])
                cComp     := "M->"+Trim(aStruField[nC])
                cTit     := FWX3Titulo((aStruField[nC]))
                If FWSX3Util():GetFieldType(aStruField[nC]) == 'N'
                    cAnt     := Transform(&cCpo    ,GetSx3Cache(aStruField[nC],"X3_PICTURE"))
                    cNovo     := Transform(&cComp    ,GetSx3Cache(aStruField[nC],"X3_PICTURE"))
                ElseIf FWSX3Util():GetFieldType(aStruField[nC]) == 'D'
                    cAnt     := DtoC(&cCpo)
                    cNovo     := DtoC(&cComp)
                Else
                    cAnt     := AllTrim(&cCpo)
                    cNovo     := AllTrim(&cComp)
                EndIf
                If .Not. ( cNovo == cAnt )
                    aAdd(aAlterado,{cCpo,cCod,cDesc,cTit,cNovo,cAnt,adados[1][4],DTOS(Date())+" - "+time()})//GetTimeStamp(DTOS(Date()))
                EndIf
            EndIf
        Next
    Endif