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 clovis.sardinha
      Estou em um impasse pois sei pouco de javascript. Estou fazendo um autocomplete com CI4 e Javascript.
      Consigo gerar, através do controllers/model do CI4 um arquivo em json, mas não consigo retorná-lo para o javascript para poder mostrar as opções para consulta. 
      O console.log mostra que estou obtendo o  json() { [native code] }.
      Segue os dois arquivos para ver se alguém me ajuda.
      //arquivo cidade.js async function carregar_cidade(valor) { if (valor.length >= 3) { //console.log("Pesquisar:" + valor); const dados = fetch('Testes/?cidade='+valor, { method: "get", headers: { "Content-Type": "application/json", "X-Requested-With": "XMLHttpRequest" } }); const resposta = (await dados).json; console.log(resposta); var html = "<ul class='list-group position-fixed'>"; html += "<li class='list-group-item'>" + resposta['cid_nome'] + "</li>"; html += "</ul>"; } } <?php //arquivo Testes.php namespace App\Controllers; use App\Models\CidadeModel; /** NÃO MANDAR PARA O SERVIDOR - APENAS TESTES DE FUNÇÕES E OUTROS ELEMENTOS DO CI4 */ class Testes extends BaseController{ protected $tbCidades; public function __construct(){ $this->tbCidades = new CidadeModel(); } public function index(){ $request = \Config\Services::request(); $client = \Config\Services::curlrequest(); $cidades=[]; if($get=$request->getGet()){ $cities=$get['cidade']; $cidadeFiltrada=$this->tbCidades->getCidByName($cities); $cidades= json_encode($cidadeFiltrada); //dd($cidades); } echo view('Testes/testes'); } public function salvar(){ $request = \Config\Services::request(); if($post=$request->getPost()){ dd($post); } } } <!doctype html> <html lang="pt-br"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrap CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> <title>Autocomplete</title> </head> <body> <div class="container"> <h1 class="mt-4 mb-4">Formulário</h1> <form class="row g-3"> <div class="col-12"> <label for="cidade" class="form-label">Cidade</label> <input type="text" name="cidade" class="form-control" id="cidade" placeholder="Pesquisar cidade" onkeyup="carregar_cidade(this.value)"> </div> <span ></span> </form> </div> <!-- Optional JavaScript; choose one of the two! --> <!-- Option 1: Bootstrap Bundle with Popper --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> <script src="assets/js/cidade.js"></script> </body> </html>
    • By FabianoSouza
      Olá pessoal.
      Eu já utilizo o FOR JSON PATH para retornar o o resultado de uma consulta com JSON. Isso eu já sei fazer.
       
      O que preciso é criar uma função que receba um SELECT como parâmetro e retorne o resultado desse SELECT já formatado como JSON.
      Estou tentando isso, mas sem sucesso.
       
      A function dbo.fn_retornaJsonPath :
      (@String NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) AS BEGIN BEGIN IF @String <> NULL SET @String = (SELECT @String AS jsonPath FOR JSON PATH) END BEGIN IF @String IS NULL SET @String = '[]' END RETURN @String END Forma de executar:
      SET @sql = 'SELECT ' SET @sql = @sql + ' dbo.fn_retornaJsonPath ((SELECT TT.tema FROM dbo.tabela AS TT WHERE TT.cd = CTT.id)) AS ''temas'' ' SET @sql = @sql + ' FROM dbo.minhaTab AS CTT ' EXEC(@sql) Mas não está rolando....
    • By mr22robot
      Ola caros amigos. 
      Estou com uma dúvida aqui que embora nao tenho achado ainda uma resposta, acredito que haja.
      Estou estudando a tão sonhada linguagem de programação asp.net core mvc. Linguagem essa que demorei 5 anos pra iniciar os estudos rsrs.
      Mas estou agarrado em uma situação. 
      Estou usando como base de dados nos meus estudos um banco Oracle. Que já tem algumas informações nele. Utilizei o SCAFFOLD para criar as classes e o contexto baseado no banco e tabelas existentes. 
      Porem agora na fase das consultas, estou perdido em como utilizar o IN que eu utilizo no oracle; no LINQ.
      Ex: 
      SELECT CODPROD,DESCRICAO FROM PRODUTO WHERE CODPROD IN(1,2,3,4,5,6) Como eu utilizo esse filtro com uma restrição de códigos de produtos? no caso o where codprod in(1,2,3,4,5,6) ?.
      Desde já obrigado pela ajuda.
    • By luis0101010
      1.      Programe uma função que recebe um número inteiro e verifica se todos os dígitos deste número são iguais ou diferente e liste eles em ordens crescentes.
      Obs: Código fonte com no mínimo de 10 dígitos.
       
      Como exemplo, os números 456, −235, e 5 satisfazem esta condição, enquanto que o número 6 não.
       
      2.      Crie também a função main que recebe o valor do número digitado pelo usuário e exibe na tela uma mensagem informando se os dígitos deste número são iguais.
       
      Exemplo:
      --Exemplo 1:
      Informe um número:
      -555
      Numero informado possui todos os dígitos iguais
      --Exemplo 2:
      Informe um número:
      67
      Número informado não possui todos os dígitos iguais
    • By PresleyMenezes
      Olá pessoal, gostaria de saber como copiar o conteúdo de um campo json com muitos pais e filhos e colar em outro campo de pais e filhos do mesmo arquivo json?
       
      agradeço a ajuda de vocês.
      em anexo o arquivo json e o codigo que estou tentando fazer

       

       

       
       
       
       

       

       
×

Important Information

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