Tecnologia do Blogger.
RSS

[androidbrasil-dev] Re: Recomendações integridade de dados em comunicação com o web service.

Obrigado pela atenção pessoal.


Então hoje meu web service está dessa maneira:

<WebMethod()> _
    Public Function SetCliente(ByVal Identificacao As Integer, ByVal RazaoSocial As String, ByVal NomeFantasia As String, ByVal Inscricao As String, ByVal Contato As String, ByVal Obs As String, ByVal Representante As Integer, ByVal TabelaPreco As Integer, ByVal Exportado As Integer)

Eu passo a linha de parâmetros, processo e trato os dados e utilizo meus métodos de comunicação com o banco de dados:

wCampos = "Identificacao, IdMobile, RazaoSocial, NomeFantasia, Inscricao, Contato, Obs, Representante, TabelaPreco, DataUltSincronizacao, Sincronizado, DataUltExportacao, Exportado, DataCadastro, Usuario "
wValores = wIdentificacao & "," & Identificacao & ",'" & RazaoSocial & "','" & NomeFantasia & "','" & Inscricao & "','" & Contato & "','" & Obs & "'," & Representante & "," & TabelaPreco & ","
wValores += wsDados.dataSql(CDate(DateTime.Today)) & ", 1, '', 0, " & wsDados.dataSql(CDate(DateTime.Today)) & ", 'EXTERNO'"
Return wsDados.execInsert("Cliente", wCampos, wValores)

Eu teria que alterar então para não realizar o insert e eu montar os dados no web service aguardando o 'end' como você sugeriu jeff?

No meu aplicativo eu faço dessa maneira:

DataBase = new DadosBD(Singleton.getContextoAplicacao());
DadosExportacao = DataBase.ExecSelect(Tabela, TabelaColunaComposta, TabelaSelecao, TabelaSelecaoArgumentos, TabelaGroupBy, TabelaHaving, TabelaOrderBy);
DadosExportacao.moveToFirst();
for (int i = 0; i < DadosExportacao.getCount(); i++) {
SoapObject request = new SoapObject(this.getWsNameSpace(), this.getWsNomeMetodo());
for (int j = 0; j < DadosExportacao.getColumnCount(); j++) {
request.addProperty(DadosExportacao.getColumnName(j), DadosExportacao.getString(j));
}
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.implicitTypes = false;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(this.getWsUrl());
httpTransport.call(this.getWsNameSpace() + "" + this.getWsNomeMetodo(), envelope);
result = (Boolean) envelope.getResponse();
this.Dados = new ContentValues();
if (result) {
this.Dados.put("Exportado", "1");
DataBase.ExecUpdate(Tabela, Dados, TabelaWhere, TabelaWhereArgumentos);
} else {
this.Dados.put("Exportado", "0");
DataBase.ExecUpdate(Tabela, Dados, TabelaWhere, TabelaWhereArgumentos);
}
DadosExportacao.moveToNext();
}

E tenho alguns métodos que esperam na exceção, caso ocorra uma exceção mesmo todos os registros referentes ao bloco que estava sendo exportado é atribuído ao flag de exportação 0.

Tudo isso roda dentro de AsyncTask que processo uma a uma.

On Saturday, May 25, 2013 8:32:11 AM UTC-3, Guilherme Bernardi wrote:
Pessoal, bom dia.

Fiz um processo de envio de dados do smartphone para um web service que grava em um banco de dados SQL Server.

E estou tendo problemas com a integridade, por exemplo apesar de eu tratar exceções e etc e tentar tratar internamente no banco de dados do aparelho parece que algumas vezes ocorrem falhas que também não consigo simular, mas ocorreram com alguns usuários de ir apenas metade dos dados ou coisa do tipo. Já coloquei Log para todos os lados, tratei as exceções e mesmo assim não consigo identificar onde está ocorrendo o erro.

Eu estou fazendo assim, eu tenho um método de exportação dinâmico que ele é chamado pela persistência e faz a exportação de acordo com a particularidade de cada classe.

Então eu faço consultas no banco de dados e com o cursor eu envio registro a registro ao web service, que está programado para receber uma linha de cada vez.
Caso ocorra exceções eu tenho um flag nas tabelas onde eu gravo na exceção se aquele registro não foi enviado e estorno todos os que tem ligações com ele.

Gostaria de saber se isso é viável...  já que ando tendo esse tipo de problema.

Pensei em mudar tudo para gerar xml dos dados a serem enviados ou json e enviar o arquivo para o mesmo ser processado e interpretado no web service. Pois pelo menos assim eu garantiria que os dados foram exportados, caso dê algum erro no processo eu manteria o arquivo dentro do aparelho e caso ele completasse com sucesso o envio eu apagaria o arquivo na memória.

O que é recomendado para garantir esse tipo de integridade? Alguém tem uma dica ou orientação para me passar...

Obrigado desde já.

--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

  • Digg
  • Del.icio.us
  • StumbleUpon
  • Reddit
  • RSS

0 comentários:

Postar um comentário