Skip to content

Tratativas Envio/Recebimento, JSON, otimizações, correções e Dictionary de dados do Dataset#8

Open
wellington1993 wants to merge 68 commits intomasterfrom
MergeHotSoft
Open

Tratativas Envio/Recebimento, JSON, otimizações, correções e Dictionary de dados do Dataset#8
wellington1993 wants to merge 68 commits intomasterfrom
MergeHotSoft

Conversation

@wellington1993
Copy link
Copy Markdown

  • 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.

hotsoft-desenv4 and others added 15 commits November 23, 2017 14:43
- Refatorações para guardar o nome dos detalhes (nomedetalheplural)
- 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.
Signed-off-by: Wellington Torrejais da Silva <desenv2@labplus.com.br>
@wellington1993
Copy link
Copy Markdown
Author

@acras Seguem os commits para sua revisão.

constructor Create(const aTableName: string; aDm : IDataPrincipal);
destructor Destroy; override;
end;

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Usado o Indy para fazer encoding para Base64


TDetailList = class(TDictionary<String, TJSONArrayContainer>)
public
destructor Destroy; override;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Garante a correta destruição dos filhos evitando memory leaks

constructor create;
nomePkLocal: string;
function getJsonArray: TJsonArray;
destructor Destroy; override;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Evita memory leaks destruindo os filhos do objeto

procedure SetdmPrincipal(const Value: IDataPrincipal);
function getdmPrincipal: IDataPrincipal;

FStopOnGetRecordError : boolean;
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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);
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ajuste de Memory Leak

finally
dm := nil;
http := nil;
FreeAndNil(http);
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ajuste de memory leak

node := list.FindNode('error');
if node <> nil then
Result := node.Text;
Result := UTF8ToString(HTTPDecode(node.Text));
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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])
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Não adianta logar se não exibir a mensagem do erro de origem no servidor.

hotsoft-desenv7 and others added 22 commits January 17, 2018 17:37
- 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;
- 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
- 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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants