Roberto Zaniboni,
Não entendi sua pergunta. Você já testou esse fonte na versão 22.10?
Porque pelo que entendi isso não vai deixar de funcionar na Versão 22.10.
E sim a abertura das tabelas do dicionário de dados, uma vez que para essa versão é necessário
que o dicionário está no banco então realmente não da para usar DbUseArea()
parar abrir SX3 , SX2 etc.
O que acontece é que você usa arquivos c-Tree e parece que biblioteca que faz as chamadas para ele a CTREECB não vai mais ser distribuída junto com o AppServer.
Bom nesse caso você pode:
Como já havia dito aqui nessa resposta e no comentário que fiz da resposta do Roberto Zaniboni, se ele chegou a testar na versão 12.22.10
Eu fiz um fonte aqui e funcionou, somente fazendo uma observação a minha versão da 22.10
foi migrada da 12.1.33 então a dll ctree.dll ainda está na pasta do
AppServer isso pode ter influenciado o resultado.
Tendo dito isso segue o fonte que eu fiz salvei ele como tl++ ficou EXP0013test.tlpp !
Segue fonte :
user function EXP0013test()
Private cArquivo:= "\system\tabela123.dtc" //Gera o nome do arquivo
Private cIndice := "\system\tabela123" //indice do arquivo
CriarDTC() //função que irá criar a tabela
GravarDTC('000001') //função que irá gravar algum conteudo na tabela
FWAlertInfo( LerDTC('000001') ,'Leitura de tabela DTC') //ler o conteudo gravado
Return
//criar tabela
Static Function CriarDTC()
Local aCampos := {} //defino a variavel do tipo array para criar os campos
if !File(cArquivo)
aAdd(aCampos,{"REV_FILIAL" ,"C", 02,0})
aAdd(aCampos,{"REV_COD" ,"C", 06,0})
aAdd(aCampos,{"REV_DATA" ,"D", 08,0})
aAdd(aCampos,{"REV_CONTA" ,"N", 09,0})
If SELECT("REV") > 0
REV->(dbCloseArea())
Endif
//Criar o arquivo Ctree
dbCreate(cArquivo,aCampos,"CTREECDX")
dbUseArea(.T.,"CTREECDX",cArquivo,"REV",.F.,.F.)
IndRegua( "REV", cIndice, "REV_FILIAL + REV_COD",,,"CODIGO" )
dbClearIndex()
dbSetIndex(cIndice + OrdBagExt() )
FWAlertInfo("Tabela Criada!")
Endif
Return
//gravar na tabela
Static Function GravarDTC(cCodigo)
//Verifico se o alias está aberto e fecho
If ( SELECT("REV") ) > 0
dbSelectArea("REV")
REV->(dbCloseArea())
EndIf
//abro a tabela
dbUseArea( .T.,"CTREECDX", cArquivo,"REV", .T., .F. )
dbSelectArea("REV")
IndRegua( "REV", cIndice, "REV_FILIAL + REV_COD",,,"CODIGO" )
dbClearIndex()
dbSetIndex(cIndice + OrdBagExt() )
dbSelectArea("REV")
REV->(dbSetOrder(1))
REV->(dbGoTop())
If( REV->(!dbSeek('01' + cCodigo)) )
if RecLock("REV",.T.)
REV->REV_FILIAL := '01'
REV->REV_COD := cCodigo
REV->REV_DATA := dDatabase
REV->REV_CONTA := 1
MsUnLock("REV")
FWAlertInfo("Registro Inserido","Sucesso")
Else
FWAlertWarning("Ocorreu um erro","Erro")
endif
Else
if RecLock("REV",.F.)
REV->REV_DATA := dDatabase
REV->REV_CONTA := 2
MsUnLock("REV")
FWAlertInfo("Registro Alterado","Sucesso")
Else
FWAlertWarning("Ocorreu um erro","Erro")
endif
Endif
Return
//Ler tabela
Static Function LerDTC(cCodigo)
Local cRetorno := ""
If ( SELECT("REV") ) > 0
dbSelectArea("REV")
REV->(dbCloseArea())
EndIf
dbUseArea( .T.,"CTREECDX", cArquivo,"REV", .T., .F. )
dbSelectArea("REV")
IndRegua( "REV", cIndice, "REV_FILIAL + REV_COD",,,"CODIGO" )
dbClearIndex()
dbSetIndex(cIndice + OrdBagExt() )
REV->(dbSetOrder(1))
REV->(dbGoTop())
If( REV->(dbSeek('01'+cCodigo)) )
cRetorno := "Codigo: " + REV->REV_COD + CRLF + "Data: " + DTOC(REV->REV_DATA) + CRLF + "Conta: " + Str(REV->REV_CONTA)
Endif
Return(cRetorno)