Tratativas Envio/Recebimento, JSON, otimizações, correções e Dictionary de dados do Dataset#8
Tratativas Envio/Recebimento, JSON, otimizações, correções e Dictionary de dados do Dataset#8wellington1993 wants to merge 68 commits intomasterfrom
Conversation
wellington1993
commented
Dec 4, 2017
- Implementações relacionadas a montagem e o envio de JSON
- Tratativas em relação ao retorno XML
- Tratamentos para BLOB
- Ajustes nas tradução de valores para o servidor
- Ajustes gerais(tratativas e desempenho) com base nas tabelas testadas.
… do IdRemoto no retorno do POST
- Refatorações para guardar o nome dos detalhes (nomedetalheplural)
# Conflicts: # lib/DIntegradorModuloWeb.pas
- Tratativas para codificação e decodificação de http/utf8
- Tratativas para nomesingular e xmlcontent
Esta implementação foi necessária pois o Field passado por parâmetro no método TranslateValueToServer estava dando Access Violation ao acessar o Field.asString.
…és de um camomando SQL com "ExecSQL"
Signed-off-by: Wellington Torrejais da Silva <desenv2@labplus.com.br>
|
@acras Seguem os commits para sua revisão. |
Signed-off-by: Wellington Torrejais da Silva <desenv2@labplus.com.br>
Signed-off-by: Wellington Torrejais da Silva <desenv2@labplus.com.br>
…rno do Idremoto Signed-off-by: Wellington Torrejais da Silva <desenv2@labplus.com.br>
Signed-off-by: Wellington Torrejais da Silva <desenv2@labplus.com.br>
| constructor Create(const aTableName: string; aDm : IDataPrincipal); | ||
| destructor Destroy; override; | ||
| end; | ||
|
|
There was a problem hiding this comment.
Estas classes guardam o tipo de dados para cada campo, este dicionário de dados servirá como apoio para gerar os parâmetros no update/insert.
| implementation | ||
|
|
||
| uses AguardeFormUn, ComObj; | ||
| uses AguardeFormUn, ComObj, idCoderMIME, IdGlobal; |
There was a problem hiding this comment.
Usado o Indy para fazer encoding para Base64
|
|
||
| TDetailList = class(TDictionary<String, TJSONArrayContainer>) | ||
| public | ||
| destructor Destroy; override; |
There was a problem hiding this comment.
Garante a correta destruição dos filhos evitando memory leaks
| constructor create; | ||
| nomePkLocal: string; | ||
| function getJsonArray: TJsonArray; | ||
| destructor Destroy; override; |
There was a problem hiding this comment.
Evita memory leaks destruindo os filhos do objeto
| procedure SetdmPrincipal(const Value: IDataPrincipal); | ||
| function getdmPrincipal: IDataPrincipal; | ||
|
|
||
| FStopOnGetRecordError : boolean; |
There was a problem hiding this comment.
Flag que especifica se a sincronização deve ou não continuar com a inserção ao obter erro em um dos inserts do processo de GET
| dm := nil; | ||
| if http <> nil then | ||
| FreeAndNil(http); | ||
| FreeAndNil(lTranslateTableNames); |
| finally | ||
| dm := nil; | ||
| http := nil; | ||
| FreeAndNil(http); |
| node := list.FindNode('error'); | ||
| if node <> nil then | ||
| Result := node.Text; | ||
| Result := UTF8ToString(HTTPDecode(node.Text)); |
There was a problem hiding this comment.
Garante que o resultado venha decodificado e que o encoding seja ajustado.
| log := Format('Erro ao tentar salvar registro. Classe: %s, C�digo de erro: %d, Erro: %s.',[ClassName, e.ErrorCode, Self.GetErrorMessage(e.ErrorMessage)]) | ||
| else if e.ErrorCode = 500 then | ||
| log := Format('Erro ao tentar salvar registro. Classe: %s, C�digo de erro: %d. Erro: Erro interno no servidor. ',[ClassName, e.ErrorCode]) | ||
| log := Format('Erro ao tentar salvar registro. Classe: %s, C�digo de erro: %d. Erro: Erro interno no servidor: %s. ',[ClassName, e.ErrorCode, e.ErrorMessage]) |
There was a problem hiding this comment.
Não adianta logar se não exibir a mensagem do erro de origem no servidor.
…uarda ao final de cada Get.
- Refatoração da busca do WHERE (quando for duasVias) - Ao final do get, atualizar o versionId com o último version id
- Alterado para trabalhar com a função function GetDefaultValueForSalvouRetaguarda: Char; virtual;
…nar com a vírgula
- Popular as traduções das tabelas primeiro - atualizar o maior version_id com o último version id recebido no get.
- Retirado o count(*), foi subido por engano
- resincronizar o registro caso dê algum problema no Get
…lhes a lista do translate
…lhes a lista do translate
- híbrido - novo endereço de sincronização - só escrever logs quando for hibridodll
… sincronização, dessa forma evita que um dado recem alterado seja substituido por um pouco mais antigo.