Nos textos anteriores foi possível destacar como fazer INSERT, DELETE e UPDATE – cada um individualmente em comandos separados.
Aqui vamos mostrar o METHOD PATCH. Na especificação padrão do RESTful o PATCH efetua um UPDATE no banco de dados. Qual então a diferença entre PUT e PATCH ? Regra geral no OData, o comando PUT faz update de todas as colunas da tabela, enquanto o PATCH faz igualmente um update, no entanto realiza atualização somente nas colunas indicadas no BODY.
No MVCBrServer, o PUT e o PATCH possuem as mesmas funcionalidades, ou seja, atualizam somente as colunas indicadas no BODY como já visto no texto que discorremos sobre o METHOD PUT.
Uma variação implementada no MVCBrServer é a possibilidade do comando PATCH executar múltiplas funções e aceitar enviar INSERT, DELETE e UPDATE dentro de um mesmo ARRAY com as linhas de comando.
Para executar múltiplas funcionalidade, cada linha deve ser indicada com uma propriedade “rowstate” com um dos valores: “modified”, “inserted”, “deleted”.
Exemplo:
url: http://localhost:8080/OData/OData.svc/vendas() body: [ { "rowstate":"deleted","data":"2017-03-17","documento":3}, { "rowstate":"inserted","data":"2017-03-17","documento":3,"cliente":1,"total":10}, { "rowstate":"modified","data":"2017-03-17","documento":3,"cliente":2,"total":10} ]
Este BODY envia 3 comandos no mesmo ARRAY que serão executados na seguinte ordem:
- na linha 1 o “rowstate”:”deleted” indica que a linha deve ser processada como um comando DELETE;
- na linha 2 o “rowstate”:”inserted” indica que a linha é um INSERT;
- na linha 3 o “rowstate”:”modified” deve processar um UPDATE para a linha;
Resposta: {"@odata.context":"\/OData\/OData.svc\/vendas()","StartsAt":"2017-03-17T20:45:46.541Z", "@odata.count":"3","EndsAt":"2017-03-17T20:45:46.559Z"}
Em relação ao controle de transação da operação o controle ocorre no mesmo formato que já tratamos aqui ACID , ou seja – tudo ou nada.