Jump to content
ghlevin

Console Application - Enviar arquivos JSON para uma Conta de Armazenamento Azure (Blob)

Recommended Posts

Possuo uma Console Application em C# que faz a extração de dados do Dynamics 365 Customer Voice, da Microsoft. O código abaixo pega dados de tabelas de Projetos, Pesquisas, Perguntas e Respostas respectivamente. Os dados extraídos vão para arquivos JSON que ficam salvos no meu HD.

    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Query;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using UmbracoMVC.App_Code.Infrastructure.CRMIntegration.Business;
    using System.IO;
    using Microsoft.Crm.Sdk.Messages;
    using System.Globalization;
    using E2BWorkflow.Classes;
    using System.Web.Management;
    using System.ServiceModel;
    using System.Drawing;
    using System.Web.UI.WebControls;
    using System.Web.Script.Serialization;  
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                GetCustomerVoice();
            }
    
            public static void GetCustomerVoice()
            {
                IOrganizationService crmServiceTo;
    
                crmServiceTo = Connect.Crm("myemail@e-mail.com", "mypassword", "https://mydynamics.crm4.dynamics.com/XRMServices/2011/Organization.svc");
    
                // Get Projects
                QueryExpression qP = new QueryExpression("msfp_project");
                qP.ColumnSet = new ColumnSet(true);
                var projects = crmServiceTo.RetrieveMultiple(qP);
                foreach (var p in projects.Entities)
                {
                    msfp_project project = p.ToEntity<msfp_project>();
                }
                var projectsList = projects.Entities.Select(
                    s => new {
                        msfp_projectId = s.Attributes["msfp_projectid"],
                        msfp_name = s.Attributes["msfp_name"]
                    }
                ).ToList();
    
                var jsonSerialiser = new JavaScriptSerializer();
                var json = jsonSerialiser.Serialize(projectsList);
                System.IO.File.WriteAllText(@"C:\MyDirectory\projects.json", json);
    
                // Get Surveys
                QueryExpression qS = new QueryExpression("msfp_survey");
                qS.ColumnSet = new ColumnSet(true);
                var surveys = crmServiceTo.RetrieveMultiple(qS);
                foreach (var s in surveys.Entities)
                {
                    msfp_survey survey = s.ToEntity<msfp_survey>();
                }
                var surveysList = surveys.Entities.Select(
                    s => new {
                        msfp_surveyId = s.Attributes["msfp_surveyid"],
                        msfp_name = s.Attributes.Contains("msfp_name") ? s.GetAttributeValue<string>("msfp_questiontext") : "",
                        msfp_anonymousurl = s.Attributes.Contains("msfp_anonymousurl") ? s.GetAttributeValue<string>("msfp_anonymousurl") : "",
                        msfp_friendlyname = s.Attributes.Contains("msfp_friendlyname") ? s.GetAttributeValue<string>("msfp_friendlyname") : "",
                        msfp_surveyurl = s.Attributes.Contains("msfp_surveyurl") ? s.GetAttributeValue<string>("msfp_surveyurl") : "",
                        msfp_projectId = s.Attributes.Contains("msfp_project") && s.GetAttributeValue<EntityReference>("msfp_project").Id != null ? s.GetAttributeValue<EntityReference>("msfp_project").Id : Guid.Empty
                    }
                ).ToList();
    
                jsonSerialiser = new JavaScriptSerializer();
                json = jsonSerialiser.Serialize(surveysList);
                System.IO.File.WriteAllText(@"C:\MyDirectory\surveys.json", json);
    
                // Get Questions
                QueryExpression qQ = new QueryExpression("msfp_question");
                qQ.ColumnSet = new ColumnSet(true);
                var questions = crmServiceTo.RetrieveMultiple(qQ);
                foreach (var q in questions.Entities)
                {
                    msfp_question question = q.ToEntity<msfp_question>();
                }
                var questionsList = questions.Entities.Select(
                    s => new {
                        msfp_questionId = s.Attributes["msfp_questionid"],
                        msfp_questionText = s.Attributes.Contains("msfp_questiontext") ? s.GetAttributeValue<string>("msfp_questiontext") : "",
                        msfp_surveyId = s.Attributes.Contains("msfp_survey") && s.GetAttributeValue<EntityReference>("msfp_survey").Id != null ? s.GetAttributeValue<EntityReference>("msfp_survey").Id : Guid.Empty
                    }
                ).ToList();
    
                jsonSerialiser = new JavaScriptSerializer();
                json = jsonSerialiser.Serialize(questionsList);
                System.IO.File.WriteAllText(@"C:\MyDirectory\questions.json", json);
    
                //Get Question Responses
                QueryExpression qR = new QueryExpression("msfp_questionresponse");
                qR.ColumnSet = new ColumnSet(true);
                var responses = crmServiceTo.RetrieveMultiple(qR);
                foreach (var r in responses.Entities)
                {
                    msfp_questionresponse response = r.ToEntity<msfp_questionresponse>();
                }
    
                var responsesList = responses.Entities.Select(
                    s => new {
                        msfp_questionresponseId = s.Attributes["msfp_questionresponseid"],
                        msfp_questionresponse = s.Attributes["msfp_name"],
                        msfp_questionId = s.GetAttributeValue<EntityReference>("msfp_questionid").Id
                    }
                ).ToList();
    
                jsonSerialiser = new JavaScriptSerializer();
                json = jsonSerialiser.Serialize(responsesList);
                System.IO.File.WriteAllText(@"C:\MyDirectory\responses.json", json);
    
                Console.WriteLine("END");
                Console.ReadKey();
            }
        }
    }

Agora o que eu preciso é que esses JSONs sejam salvos dentro de um contêiner de um blob em uma Conta de Armazenamento Azure. Procurei várias soluções na Internet, mas não estou bem certo do que deveria usar em uma Console Application.

Share this post


Link to post
Share on other sites

Em geral, use a biblioteca Azure.Storage.Blobs.

 

O que você deve cuidar, é que a Azure possui uma biblioteca para cada tipo de storage (FileShare, BlobStorage, etc..);

 

Se está usando BlobStorage, Azure.Storage.Blobs

 

Outro ponto, é que deve primeiro criar o arquivo e depois realizar o upload.

 

Em geral, o código abaixo é a base que necessitas

// conexão com o container
BlobContainerClient container = new BlobContainerClient("connectionString", "containerName");
container.CreateIfNotExists();

// criação do stream em memória
string json = JsonSerializer.Serialize("{JSON string}");
byte[] jsonEncoded = Encoding.UTF8.GetBytes(json);
var source = new MemoryStream(jsonEncoded);

// recupera o BlobClient (o arquivo em específico ainda não existe)
BlobClient blob = container.GetBlobClient("file/path/json.json");

// Realiza o upload dele.
await blob.UploadAsync(source, new BlobHttpHeaders() { ContentType = "application/octet-stream" });

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By luigiferrari
      Gostaria de fazer um programa onde o usuário digitaria o tamanho de conjuntos e quantas linhas possui os conjuntos, exemplo:

      Seguindo, o programa perguntaria qual conjunto o usuário quer adicionar o valor, e então o valor seria adicionado nas linhas, e qnd cheio, seria o FIFO.
      Mas minhas principais duvidas seriam:
      1- Como eu crio um vetor dentro de outro (não necessariamente precisa ser um vetor, aceito sugestões de como fazer isso)
      2- Caso eu faça com o vetor, teria que gerar x vetores, por exemplo, caso o usuário colocasse em "qts conjuntos: 5" teria que criar 5 conjuntos(vetores) diferentes. Como faço isso?!
      Lembrando aceito qualquer sugestão, estou fazendo em C# mas tbm entendo de Python e PHP caso tenha alguma ideia.
    • By paulopoxoreo1234@gmail.com
      Fiz  a multiplicação da 2 matrizes mas não consigo fazer a transposta dela. Peço ajuda para solucionar este problema.
      #include <stdio.h> #include <stdlib.h> #define T_BUFFER 512 int main(void) { int *numeros, q_linhas = 0, q_colunas = 0, linhas, colunas; char buffer[T_BUFFER]; /* Pega a quantidade de linhas da matriz */ do { printf("Digite a quantidade de linhas da matriz\n"); if (fgets(buffer, T_BUFFER, stdin) != NULL) { if (buffer[0] != '\n') { if (sscanf(buffer, "%i", &q_linhas) != 1) { printf("Digite um numero\n"); } } else { printf("Digite uma entrada valida!\n"); } } } while (q_linhas <= 0); /* Pega a quantidade de colunas da matriz */ do { printf("Digite a quantidade de colunas da matriz\n"); if (fgets(buffer, T_BUFFER, stdin) != NULL) { if (buffer[0] != '\n') { if (sscanf(buffer, "%i", &q_colunas) != 1) { printf("Digite um numero\n"); } } else { printf("Digite uma entrada valida!\n"); } } } while (q_colunas <= 0); /* Reserva memoria para a matriz */ numeros = malloc(sizeof(*numeros)*q_linhas*q_colunas); if (numeros == NULL) { perror("Erro ao reservar memoria!"); exit(EXIT_FAILURE); } /* Lê a matriz do úsuario */ for (linhas = 0; linhas < q_linhas; linhas++) { for (colunas = 0; colunas < q_colunas; colunas++) { int pega_novamente = 1; /* Pega um numero */ do { printf("[%i][%i]\n", linhas, colunas); if (fgets(buffer, T_BUFFER, stdin) != NULL) { if (buffer[0] != '\n') { if (sscanf(buffer, "%i", &numeros[(linhas*q_colunas)+colunas]) == 1) { pega_novamente = 0; /* Sai do "do {} while()" */ } } else { printf("Digite uma entrada valida!\n"); } } } while (pega_novamente); } } /* Mostra a matriz */ printf("Matriz digitada\n"); for (linhas = 0; linhas < q_linhas; linhas++) { for (colunas = 0; colunas < q_colunas; colunas++) { printf("%i,", numeros[(linhas*q_colunas)+colunas]); } putchar('\n'); } getchar(); /* Espera o enter */ /* Libera a memoria */ free(numeros); return(0); }  
    • By dudepaiva
      Boa tarde!
      Estou buscando os dados em uma planilha e adicionando em uma lista. Antes de adicionar em uma lista, utilizo o GROUPBY para agrupar a informação desejada, até aqui tudo bem, porém quando tento lançar essa informação num COMBOBOX, ocorre erro de parametro.
      A primeira linha em negrito, é onde busco e agrupo as informações. A segunda é onde ocorre o erro.
       
      Segue código:
       
      Quero trazer os dois campos abaixo.
       
      public class ProdutoDTO
          {
              private string codigo;
              private string nomeTributario;
              private string linhaReduzida;
              private string linha;
              private string marcaReduzida;
              private string marca;
              private string gramatura;
              public ProdutoDTO()
              {
              }
              public ProdutoDTO(string codigo, string nomeTributario, string linhaReduzida, string linha, string marcaReduzida, string marca, string gramatura)
              {
                  this.Codigo = codigo;
                  this.nomeTributario = nomeTributario;
                  this.linhaReduzida = linhaReduzida;
                  this.linha = linha;
                  this.marcaReduzida = marcaReduzida;
                  this.marca = marca;
                  this.gramatura = gramatura;
              }
              public string Codigo { get => codigo; set => codigo = value; }
              public string NomeTributario { get => nomeTributario; set => nomeTributario = value; }
              public string LinhaReduzida { get => linhaReduzida; set => linhaReduzida = value; }
              public string Linha { get => linha; set => linha = value; }
              public string MarcaReduzida { get => marcaReduzida; set => marcaReduzida = value; }
              public string Marca { get => marca; set => marca = value; }
              public string Gramatura { get => gramatura; set => gramatura = value; }
          }
       
      A primeira linha em negrito, é onde busco e agrupo as informações. A segunda é onde ocorre o erro.
       
      private void AbrirArquivoExcel()
              {
                  //Configura OpenFileDialog.
                  OpenFileDialog openFD = new OpenFileDialog();
                  openFD.Title = "Localizar arquivo";
                  openFD.InitialDirectory = @"C:\Documentos\Planilhas";
                  openFD.Filter = "Arquivo Excel (*.xlsx) | *.xlsx";
                  openFD.CheckFileExists = true;
                  openFD.CheckPathExists = true;
                  openFD.ShowReadOnly = true;
                  openFD.RestoreDirectory = true;
                  openFD.ReadOnlyChecked = true;
                  if (openFD.ShowDialog() == DialogResult.OK)
                  {
                      try
                      {
                          txtOpenFD.Text = openFD.FileName;
                          var produtos = produtoBLL.Buscar(openFD.FileName, "Dados").GroupBy(x => x.Linha).ToList();
                          cbLinha.DataSource = produtos;
                          cbLinha.ValueMember = "Codigo";
                          cbLinha.DisplayMember = "Linha";
                          cbLinha.SelectedIndex = -1;
                          cbLinha.Text = "Selecione";
                          //CarregarComboBox(cbLinha, produtos, "Linha", "LinhaReduzida");
                      }
                      catch (Exception)
                      {
                          throw;
                      }
                  }
              }
       
      Desde já agradeço a ajuda! Já quebrei a cabeça!

    • By Samuel Pietro
      Olá pessoal!

      Preciso da ajuda de vocês no seguinte!
      Tenho um arquivo retornos.json
       
      { "retornos": [ { "id": 1, "sigla": "00", "nome": "Efetuado" }, { "id": 2, "sigla": "01", "nome": "Inválido" }, { "id": 3, "sigla": "02", "nome": "Corrompido" } ] }
      E na minha aplicação feita com CodeIgniter tenho uma consulta que me mostra a sigla que está cadastrada no BD.
       
      foreach ($results as $r) {  $retorno = $r->codRetorno; } 
      Eu preciso que essa consulta ao me retornar a sigla 02 por exemplo o echo apresente o "nome" para tal "sigla" que esta cadastrada no JSON.

      No caso seria a seguinte lógica: 
      if ("$retorno" == JSON["sigla"]){ echo JSON["nome"];  } //ESTE NÃO É UM CÓDIGO VÁLIDO, É APENAS PARA FINS DE ENTENDER A LÓGICA DO QUE EU PRECISO. // PS. ESSA LOGICA PRECISA SER APLICADA DENTRO DE UM FOREACH COM MILHARES DE REGISTROS.
      Como eu posso fazer isso?
       
    • By paulopoxoreo1234@gmail.com
      Sabe-se que numa matriz A com 10 linhas e 3 colunas está armazenado o gabarito de um concurso, onde na primeira coluna fica armazenado a nota da prova objetiva, na segunda coluna fica armazenado a nota da prova subjetiva e na terceira coluna está armazenado a nota mínima a ser alcançada na prova objetiva para que seja corrigida a prova subjetiva. A partir disso, desenvolva um programa em C que lido as informações do gabarito para a matriz A diga: Qual a porcentagem de participantes que não tiveram a prova subjetiva corrigida? Qual a média final dos participantes que tiveram a prova subjetiva corrigida? Considerando que a média final é dada pela seguinte fórmula:, onde Mp é a média do participante que teve a prova subjetiva corrigida, PO é a nota da prova objetiva, PS é a nota da prova subjetiva, MF é a média final dos participantes que tiveram a prova subjetiva corrigida  e n a quantidade de participantes que tiveram a prova subjetiva corrigida.
      ABAIXO ESTÁ O CÓDIGO PARA COMPILAÇÃO. GOSTARIA DE VER SE VOCÊS APONTAM A SOLUÇÃO DO ERRO.
       
      #include<stdio.h>
      #include<conio.h>
      #define MATRIZ 3
       float matriz[MATRIZ][3],aprovados,reprovados,MF;
       int p,q,r;
       int main(){
           for(q=1;q<=MATRIZ;q++){
               for(p=1;p<=3;p++){      //validação matriz A;
                   switch (p){
                       case 1:
                                printf("\n\ncandidato (%d)\n",q);
                                printf("PO   -> ");break;
                       case 2: printf("PS  -> ");break;
                       case 3: printf("nota minima na objetiva  -> ");break;
                   }
                  scanf("%f",&matriz[q][p]);
                  }
               if(matriz[q][1]>=matriz[q][3]){
                      MF=MF+(matriz[q][1]+matriz[q][2])/2;
                      r++;//alunos que foram aprovados para a segunda etapa;
                  }
               printf("MP -> %.2f",(matriz[q][1]+matriz[q][2])/2);
               printf("\n");
           }
           MF=MF/r;
           if(r!=MATRIZ)
               aprovados=r*(100/MATRIZ);
          else
              aprovados=100;
           reprovados=100-aprovados;
           printf("\n\nprovas subjetiva corrigidas : %d",r);
           printf("\nporcentagem de aprovados : %.2f %",aprovados);
           printf("\nporcentagem de reprovados : %.2f %",reprovados);
           printf("\nmedia dos aprovados : %.2f",MF);
       }
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.