private async void ris_Click(object sender, EventArgs e) { ProdutoIderis updatedProduct; var selectedRowsCount = dg.SelectedRows.Count; foreach (DataGridViewRow row in dg.SelectedRows) { row.DefaultCellStyle.BackColor = Color.DarkGray; } foreach (DataGridViewRow item in dg.SelectedRows) { ProdutoIderis productToUpdate = null; try { productToUpdate = (ProdutoIderis)item.DataBoundItem; updatedProduct = await IderisDataHandler.PutProduct(productToUpdate); item.DefaultCellStyle.BackColor = Color.Green; if (selectedRowsCount > 10) { await Task.Delay(6000); //Implementar uma fila para lidar com a questão do limite de 10 calls por minuto. } } catch (Exception ex) { item.DefaultCellStyle.BackColor = Color.Red; item.Cells[0].ToolTipText = $"Erro ao atualizar {productToUpdate.Id} - {productToUpdate.Titulo}: {ex.Message}"; } } }
private static IEnumerable <ProdutoIderis> Deserialize(string jsonString) { List <ProdutoIderis> products = new List <ProdutoIderis>(); JObject retornoIderis = JObject.Parse(jsonString); IList <JToken> results = retornoIderis.SelectToken("result").ToList(); foreach (JToken result in results) { var jsSerializer = new JsonSerializer(); jsSerializer.Culture = CultureInfo.GetCultureInfo("pt-BR"); //Necesssário para serializar decimais corretamente. ProdutoIderis produto = result.ToObject <ProdutoIderis>(jsSerializer); products.Add(produto); } return(products); }
public static async Task <ProdutoIderis> PutProduct(ProdutoIderis product) { string url = $"http://api.ideris.com.br/produto"; var productJsonString = JsonConvert.SerializeObject(product); var content = new StringContent(productJsonString, Encoding.UTF8, "application/json"); using HttpResponseMessage response = await ApiHelper.ApiClient.PutAsync(url, content); if (response.IsSuccessStatusCode) { string jsonString = await response.Content.ReadAsStringAsync(); var products = Deserialize(jsonString); return(products.FirstOrDefault()); } else { var responseMessage = await response.Content.ReadAsStringAsync(); throw new Exception(responseMessage); } }