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 TK_T
      olá sou iniciante consegui fazer um o código de um exercício só que quando eu peço o valor 12ab ele lê como numérica alguém pode me ajudar? 
      Exercício: Leia uma string e diga se a mesma é numérica (na base decimal) ou não.
      Ex.: "123" -> numérica
      "abc" -> não numérica
      "12ab" -> não numérica
      "12.34" -> numérica 
      #include <stdio.h> int main() { char Numero; printf("Digite Algo: "); scanf("%c", &Numero); if(Numero == '1' || Numero == '2' || Numero == '3' || Numero == '4' || Numero == '5' || Numero == '6' || Numero == '7' || Numero == '8' || Numero== '9' || Numero == '0') printf("\tNumérica...\n"); else printf("\tNão Numérica\n"); return 0; }  
    • By ldblucas
      Boa tarde,
       
      Atualmente qual a melhor formar de fazer um conexao C# com o banco Oracle ?
       
       
       
      desde já agradeço
    • By bruno153
      Pessoal, 
       
      preciso super de uma ajuda com o seguinte problema, eu preciso transformar com o javascript um JSON dessa forma:

      {
        "registros": {
          "valores": [
            {
              "label": "DANILO KATHSON BILRO DE SOUZA",
              "data": [
                {
                  "realizado": "96.51"
                },
                {
                  "realizado": "94.58"
                },
                {
                  "realizado": "89.99"
                },
                {
                  "realizado": "93.38"
                }
              ]
            },
            {
              "label": "FRANCISCO GEILSON RAMALHO",
              "data": [
                {
                  "realizado": "88.94"
                },
                {
                  "realizado": "95.95"
                },
                {
                  "realizado": "94.20"
                },
                {
                  "realizado": "92.36"
                }
              ]
            }
          ]
        }
      }
       
      Para que ele fique dessa forma:

      {
        "registros": {
          "valores": [
            {
              "label": "DANILO KATHSON BILRO DE SOUZA",
              "data": ["96.51", "94.58", "89.99", "93.38"]
              ]
            },
            {
              "label": "FRANCISCO GEILSON RAMALHO",
              "data": ["88.94", "95.95", "94.20", "92.36"
              ]
            }
          ]
        }
      }

      poderiam me dar um caminho de como eu poderia fazer isso?

      Desde já, agradeço muito pelo atenção.
    • By dayvidham
      Olá, atualmente faço parte de uma comunidade brasileira que está imersa em um projeto DeFi de um Token que roda na rede BSC.
      Temos um Token chamado SkyRocketSR criado a 31 dias e ja somos mais de 5000 pessoas interessadas no seu sucesso.
      Estamos em busca de programadores, designers e todos que poderem somar à comunidade de alguma forma.
      Alguém gostaria de saber mais do projeto e quem sabe compor a equipe da linha de frente já que somos uma comunidade?
      Obrigado e contamos com você.

      https://skyrocketsr.com/en/

      Aqui há mais sobre nós!
×

Important Information

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