Fórum
Ver pergunta

C# – Erro ao abrir PRIEMPRE e EmpresaTrabalho   

182 visualizações
0
0

Viva!

Estou a desenvolver uma aplicação cujo objetivo é recolher informação do Primavera V10 e sincronizar com a base de dados de outra plataforma. No entanto, estou a ter erros nos métodos: “AbrePRIEMPRE” e “AbreEmpresaTrabalho”. Todas as referências estão devidamente importadas com copy local a True visto que é uma console application e não uma “simples DLL” a ser importada no Primavera.

 

Reforço que utilizo estes métodos recorrentemente em DLL’s que são importadas no programa e não tenho problemas.

 

Deixo abaixo 2 prints dos erros que estou a ter:

 

Exemplo de código:

AdmBS motorAdm = new AdmBS();

motorAdm.AbrePRIEMPRE(plataform, Properties.Settings.Default.UserPrimavera, Properties.Settings.Default.PwdPrimavera, null, Properties.Settings.Default.Instancia);

 

erpBS.AbreEmpresaTrabalho(plataform, nomeEmp, userPrimavera, pwdPrimavera, null, “DEFAULT”);

 

Alguém já teve um problema semelhante? Consegue-me ajudar? Obrigado desde já =D

Faça login para poder traduzir
Integração
V10
Geral
Administrador
Marcado como spam
Criado há 3 anos e 8 meses ivolopes
i
ivolopes Iniciante
1 respostas
4
Resposta privada

Para executar o método numa console app é necessário ter em consideração o seguinte:

- As referências ao ERP Primavera têm de estar com a propriedade "Copy Local" = false
- Criar método para resolução das assemblies
- Na primeira linha a executar na aplicação adicionar o método para resolução das assemblies
- Adicionar o pacote Newtonsoft.JSON na versão 12 através do NuGet Package (não percebo bem porquê, mas sem isso dá erro a abrir o PRIEMPRE)

Em baixo exemplo completo de uma console app funcional. Alterar as credenciais de acesso de acordo com os dados de login no ERP e a variável de ambiente "PERCURSOSGE100" ou PERCURSOSGP100 de acordo com o tipo de plataforma.

using AdmBS100;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp3
{
internal class Program
{
static void Main(string[] args)
{
try
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

Teste();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
throw;
}

}

private static void Teste()
{
try
{

AdmBS motorAdm = new AdmBS();

motorAdm.AbrePRIEMPRE(plataform, Properties.Settings.Default.UserPrimavera, Properties.Settings.Default.PwdPrimavera, null, Properties.Settings.Default.Instancia);

 

erpBS.AbreEmpresaTrabalho(plataform, nomeEmp, userPrimavera, pwdPrimavera, null, “DEFAULT”);
}
catch (Exception)
{
throw;
}
}

///
/// Método para resolução das assemblies.
///
static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string assemblyFullName;

System.Reflection.AssemblyName assemblyName;

assemblyName = new System.Reflection.AssemblyName(args.Name);
assemblyFullName = System.IO.Path.Combine(Environment.GetEnvironmentVariable("PERCURSOSGE100", EnvironmentVariableTarget.Machine), assemblyName.Name + ".dll");

if (System.IO.File.Exists(assemblyFullName) && !assemblyName.Name.Contains("Newtonsoft.Json"))
return System.Reflection.Assembly.LoadFile(assemblyFullName);
else
return null;
}

}
}

 

 

Faça login para poder traduzir
Marcado como spam
Criado há 3 anos e 8 meses vitorhugosilva
vitorhugosilva Responsiveness Member
    Comentários
    @vitorhugosilva , testei o código que deixou na sua resposta. Ao executar o programa há uma exceção com a descrição "It was not possible to load the application configuration data. Please check if the file 'runtime.config' exists and is correctly formated.'" Fiz uma pesquisa aqui no forum e aparentemente é preciso adicionar a referência à DLL "plataforma.runtimeconfig.dll". O problema é que não encontro essa DLL. Alguma ajuda que me possa dar?
    3 anos e 8 meses
    jorgeoliveira
      @jorgeoliveira verifique se tem as seguintes referências adicionadas ao projeto: AdmBS100 AdmDS100 StdBE100 StdPlatDS100
      3 anos e 8 meses
      vitorhugosilva
        @jorgeoliveira tem que ir buscar o runtime.config à pasta APL, copia-o para a pasta debug e já lhe passa o erro
        3 anos e 8 meses
        ivolopes
          @ivolopes , acredito que depois de adicionar a referências acima mencionadas não seja necessário o runtime.config à pasta da console app, pois testei sem esse ficheiro e funcionou. De qualquer forma essa seria a sugestão que iria fazer caso persistisse o erro. Ter em conta que sendo necessário o runtime.config, sempre que haja uma atualização do ERP é necessário sobrepor esse ficheiro pelo novo runtime.config da pasta .\Primavera\SG100\Apl
          3 anos e 8 meses
          vitorhugosilva
            @vitorhugosilva , @ivolopes , O erro que estava a ter relativamente ao runtime.config devia-se ao facto de ter algumas das referências erradamente com o ”Copy Local” = True. Depois de corrigir isso começou a dar um erro indicando que não conseguia carregar o ”Newtonsoft.Json”. Fiz algumas pesquisas aqui no forum e fui ter ao GitHub aqui: https://github.com/PrimaverabssDeveloper/ERP10Integration/issues/10 . Adicionei a entrada que é indicada ao ficheiro exe.config. O erro mantinha-se. Copiei o ficheiro Newtonsoft.Json.DLL para a pasta da aplicação e consegui correr o código sem erros. Obrigado
            3 anos e 8 meses
            jorgeoliveira