Ir para conteúdo
  • Cadastre-se

dev botao

AcbrLib Boleto com Asp.Net MVC


Ver Solução Respondido por Rafael Dias,
  • Este tópico foi criado há 1373 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Consultores
1 hora atrás, Rogerio Valadao disse:

Bom dia pessoal, gostaria muito de integrar o ACBrLIB Boleto com meu sistema Asp.Net MVC 5, a questão é que não estou conseguindo importar a DLL para um projeto MVC, alguem poderia me ajudar com este problema!!!

Bom dia Rogerio.

Que tipo de problema está tendo?

Poderia mencionar as mensagens de erro ou dificuldades?

Descreva também um passo a passo do que está tentando e o objetivo.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
2 minutos atrás, EMBarbosa disse:

Bom dia Rogerio.

Que tipo de problema está tendo?

Poderia mencionar as mensagens de erro ou dificuldades?

Descreva também um passo a passo do que está tentando e o objetivo.

quando tento adicionar a dll na referencia do mvc me da esta msg (could not be added.please make sure that the file is accessible and that it is a valid assembly)

Link para o comentário
Compartilhar em outros sites

  • Consultores
8 minutos atrás, Rogerio Valadao disse:

quando tento adicionar a dll na referencia do mvc me da esta msg (could not be added.please make sure that the file is accessible and that it is a valid assembly)

Eu não tenho experiência com Asp Net, mas encontrei essa resposta: https://stackoverflow.com/a/7080555/460775

Em parte ela diz que uma dll nativa não pode ser usada diretamente pelo ASP .Net, mas você pode usar o DLLImport para ter acesso.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
2 horas atrás, EMBarbosa disse:

Eu não tenho experiência com Asp Net, mas encontrei essa resposta: https://stackoverflow.com/a/7080555/460775

Em parte ela diz que uma dll nativa não pode ser usada diretamente pelo ASP .Net, mas você pode usar o DLLImport para ter acesso.

opa vou pesquisar então obrigado amigo achando a solução posto aqui !!!!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solution

Baixe o demo no SVN nele vai tem um classe que ajuda você a consumir a dll em C#, com a classe você pode usar ela em asp.net.

http://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/C%23/

Obs.: Baixe toda a pasta pois tem arquivos compartilhados entre todos os demos, use o svn para o mesmo.

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
2 horas atrás, Rafael Dias disse:

Baixe o demo no SVN nele vai tem um classe que ajuda você a consumir a dll em C#, com a classe você pode usar ela em asp.net.

http://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/C%23/

Obs.: Baixe toda a pasta pois tem arquivos compartilhados entre todos os demos, use o svn para o mesmo.

ola amigo então fiz isto agora ele achou a biblioteca porem na hora de inicializar ele me da o seguinte erro (Unable to create file "C:\Program Files (x86)\IIS Express\ACBrLib.ini)

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
34 minutos atrás, Rafael Dias disse:

sim este erro ai é que infelizmente a dll criar o arquivo de configuração fisico, e como tu não especificou o caminho tenta criar na pasta do IIS, você pode corrigir isso usando a função Server.MapPath("/")


var nfe = new ACBrBoleto(Server.MapPath("/") + "ACBrLib.ini", "");

 

Ola amigo deu certo sim muito obrigado, só mais uma pergunta como trabalho com asp.net tenho a mesma aplicação copilada para vários clientes e separo eles por banco de dados, então não sei bem como eu usaria este arquivo dinamicamente ex:
se eu tiver 30 clientes diferentes usando a mesma aplicação separando por url e por banco de dados, cada um com um cnpj diferente, e todos emitindo boletos ao mesmo tempo como eu deixaria isto dinâmico ele criaria uma arquivo para cada cliente mesmo sendo na mesma aplicação web ? ou eu não estou entendendo a finalidade do arquivo !!!

Link para o comentário
Compartilhar em outros sites

recomendo criar um arquivo de configuração por cliente, lembrando que se tratando de asp .net vc vai ter que usar lock para isolar cada chamada das api pois no momento elas não funcionam em multi thread, já estamos trabalhando em uma maneira de resolver isso e deve sair ainda este mês se tudo der certo.

Use a classe de forma statica e antes de cada chamadas faça um lock carregue a configuração do cliente e emita o boleto, lembrando que hoje em dia os boletos tem que serem registrado para poder se possivel pagar os mesmo.

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
12 horas atrás, Rafael Dias disse:

recomendo criar um arquivo de configuração por cliente, lembrando que se tratando de asp .net vc vai ter que usar lock para isolar cada chamada das api pois no momento elas não funcionam em multi thread, já estamos trabalhando em uma maneira de resolver isso e deve sair ainda este mês se tudo der certo.

Use a classe de forma statica e antes de cada chamadas faça um lock carregue a configuração do cliente e emita o boleto, lembrando que hoje em dia os boletos tem que serem registrado para poder se possivel pagar os mesmo.

amigo sem querer abusar, uso muito consumo de API, então confesso estar em uma ambiente um pouco desconhecido, você teria, algum exemplo de como fazer esta separação de criação e de consumo do arquivo, ou existiria uma forma de consumir estes arquivos dinamicamente por exemplo direto do meu banco de dados!!!

Link para o comentário
Compartilhar em outros sites

Então vamos por partes.

  1. Instancie a classe da ACBrLib como Singlethorn, com isso ela cria uma config padrão na pasta informada.
  2. Altere este ini de acordo com o seu cliente, e use o metodo ConfigGravar ou copie para gravar ele com o nome/cnpj do seu cliente, aqui se quiser pode salvar no db.
  3. Na função que trata o boleto você precisa o usar o instrução lock para garantir que não seja executada de forma simultanea, dentro da função você carrega as config previamente salva usando o metodo ConfigLer, lembrando que este metodo so carregar o arquivo então se salvo no banco precisa extrair a config e salvar no disco antes de passar para o metodo.
  4. Faças as operações normalmente.
  • Curtir 1

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
18 horas atrás, Rafael Dias disse:

Então vamos por partes.

  1. Instancie a classe da ACBrLib como Singlethorn, com isso ela cria uma config padrão na pasta informada.
  2. Altere este ini de acordo com o seu cliente, e use o metodo ConfigGravar ou copie para gravar ele com o nome/cnpj do seu cliente, aqui se quiser pode salvar no db.
  3. Na função que trata o boleto você precisa o usar o instrução lock para garantir que não seja executada de forma simultanea, dentro da função você carrega as config previamente salva usando o metodo ConfigLer, lembrando que este metodo so carregar o arquivo então se salvo no banco precisa extrair a config e salvar no disco antes de passar para o metodo.
  4. Faças as operações normalmente.

então como uso o padrão Singleton na ACBrLib!!!

 public class ThreadSafeSingleton 
        {
            private static ThreadSafeSingleton _instance;
            private static readonly object _padlock = new object();

            private ThreadSafeSingleton()
            {

            }

            public static ThreadSafeSingleton Instance
            {
                get
                {
                    if (_instance == null)
                    {
                        lock (_padlock)
                        {
                            if (_instance == null)
                            {
                                _instance = new ThreadSafeSingleton();
                            }
                        }       
                    }
                    return _instance;
                }
            }
        }

 

Link para o comentário
Compartilhar em outros sites

Singlethorn é simples, mas depende de como você usa o seu software tu usa algum container IOC ? Se usa basta registrar como singlethorn.

public static class ACBr
{
   #region Fields
   
   private static readonly Lazy<ACBrBoleto> boleto = new Lazy<ACBrBoleto>(() => new ACBrBoleto());

   #endregion Fields

   #region Properties

   public static ACBrBoleto Boleto => boleto.Value;

   #endregion Properties
}

Agora na hora de usar seria algo assim

public class EmissaoBoleto
{
   private static readonly object padlock = new object();

   public void EmitirBoleto()
   {
     lock (padlock)
     {
       //Pega a instancia do boleto
       var boleto = ACBr.Boleto;

       //Carrega a configuração
       boleto.ConfigLer(Server.MapPath("/") + "cliente.ini");

       // Opcional
       // Configura dados do emitente, se os dados estão salvo nas config não precisa.
       // A vantagem deste metodo é que você pode passar a configuração como string, em vez de passar como arquivo fisico
       // https://acbr.sourceforge.io/ACBrLib/ModeloCedenteINI.html
       boleto.ConfigurarDados("");

       // Agora adicona os boletos e faças as operações
       boleto.IncluirTitulos("Ini do boleto");
       boleto.EnviarEmail("", "", "", "");
       boleto.GerarPDF();
     }
   }
}



 

 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 hora atrás, Rafael Dias disse:

Singlethorn é simples, mas depende de como você usa o seu software tu usa algum container IOC ? Se usa basta registrar como singlethorn.


public static class ACBr
{
   #region Fields
   
   private static readonly Lazy<ACBrBoleto> boleto = new Lazy<ACBrBoleto>(() => new ACBrBoleto());

   #endregion Fields

   #region Properties

   public static ACBrBoleto Boleto => boleto.Value;

   #endregion Properties
}

Agora na hora de usar seria algo assim


public class EmissaoBoleto
{
   private static readonly object padlock = new object();

   public void EmitirBoleto()
   {
     lock (padlock)
     {
       //Pega a instancia do boleto
       var boleto = ACBr.Boleto;

       //Carrega a configuração
       boleto.ConfigLer(Server.MapPath("/") + "cliente.ini");

       // Opcional
       // Configura dados do emitente, se os dados estão salvo nas config não precisa.
       // A vantagem deste metodo é que você pode passar a configuração como string, em vez de passar como arquivo fisico
       // https://acbr.sourceforge.io/ACBrLib/ModeloCedenteINI.html
       boleto.ConfigurarDados("");

       // Agora adicona os boletos e faças as operações
       boleto.IncluirTitulos("Ini do boleto");
       boleto.EnviarEmail("", "", "", "");
       boleto.GerarPDF();
     }
   }
}



 

 

então na parte do:

public static ACBrBoleto Boleto => boleto.Value;

caio naquele problema inicial:

System.ApplicationException: 'Unable to create file "C:\Program Files (x86)\IIS Express\ACBrLib.ini"'

 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

A principio pra entender o contexto e poder ajudar ao rafael lhe passar maiores orientações de como usar na linguagem o ACBrLib. Baseado no exemplo que tem no svn do mesmo. Mas creio que basta tu seguir certinho o que ele escreveu que vai funcionar.

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 minuto atrás, Juliomar Marchetti disse:

A principio pra entender o contexto e poder ajudar ao rafael lhe passar maiores orientações de como usar na linguagem o ACBrLib. Baseado no exemplo que tem no svn do mesmo. Mas creio que basta tu seguir certinho o que ele escreveu que vai funcionar.

obrigado amigo!!!, toda ajuda é bem vinda vai dar certo quero contratar o SAC anual de vocês, o atendimento de vocês aqui no fórum é muito bom parabéns!!!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
1 hora atrás, Rafael Dias disse:

Isso é um exemplo apenas, adeque ao seu ambiente. no caso do MVC você precisa passar o parâmetro relativo ao path de criação do arquivo ini, isso precisa ser feito de acordo com seu ambiente.

        private static string caminho = "";
        private static readonly object padlock = new object();

        public static class ACBr
        {
            private static readonly Lazy<ACBrBoleto> boleto = new Lazy<ACBrBoleto>(() => new ACBrBoleto(caminho));

            public static ACBrBoleto Boleto => boleto.Value;
        }

        [HttpGet]
        public JsonResult ProjetoAcbr(string libConfig)
        {
            lock (padlock)
            {
                //forma o caminho
                caminho = Server.MapPath("~/ACBrConfigBoleto/") + libConfig;

                //Pega a instancia do boleto
                var boleto = ACBr.Boleto;

                //Carrega a configuração
                boleto.ConfigLer(Server.MapPath("~/ACBrConfigBoleto/") + libConfig);

                string cedenteIni = PreparaIniCedenteBoleto();
                string titulosIni = PreparaIniTituloBoleto();

                var ResultCedente = boleto.ConfigurarDados(cedenteIni);
                var Resultitulo = boleto.IncluirTitulos(titulosIni);

                boleto.Imprimir();
            }

            return Json(new { msg = "OK!!!" }, JsonRequestBehavior.AllowGet);
        }

Obrigado amigo assim funcionou perfeitamente!!!

Link para o comentário
Compartilhar em outros sites

  • Administradores

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1373 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.