Fórum
Ver pergunta

Como utilizar e distribuir uma assembly com dependência em projetos de extensibilidade.   

130 visualizações
1
0

Estamos a trabalhar na migração de uma BD com código VBA

Entre outros existe um módulo com um conjunto de funções que são partilhadas pelo restante código.

Estas funções partilhadas usam elas próprias métodos e propriedades disponibilizadas pela extensibilidade Primavera.

Para efeitos de teste foi criada uma DLL de teste (TesteDLL.DLL) com uma classe e um método simples.

Public Class ClassTesteDll

    Public Function AddNumbers(num1 As Int16, num2 As Int16) As Int16

        AddNumbers = num1 + num2

    End Function

End Class

Numa aplicação de teste construída funciona corretamente desde que o “Copy Local” esteja a “true”.

Num projeto de extensibilidade Primavera importa-se essa mesma DLL e tenta-se usar o método.

Imports TesteDll

Public Class UiEditorVendas
    Inherits EditorVendas
    Public Overrides Sub AntesDeGravar(ByRef Cancel As Boolean, e As ExtensibilityEventArgs)
        MyBase.AntesDeGravar(Cancel, e)

        Dim Y As New TesteDll.ClassTesteDll

        Try
            Select Case Me.DocumentoVenda.Tipodoc
                Case "FA", "NCT", "FP"
                    If Me.DocumentoVenda.TotalIva = 0 Then Throw New Exception("O IVA não pode ser 0") ' Err.Raise 5555, , "O IVA não pode ser 0"
            End Select

        Catch ex As Exception
            Cancel = True
            MsgBox(Y.AddNumbers(10, 25))
            PSO.Dialogos.MostraMensagem(StdBSTipos.TipoMsg.PRI_Detalhe, ex.Message, StdBSTipos.IconId.PRI_Exclama)

        End Try
	
    End Sub

End Class

O resultado é um erro indicando que “Não é possível carregar o ficheiro ou assemblagem. Ficheiro não existe”

Foram feitas tentativas com Copia Local em true/false e registando / não registando a TesteDLL no ERP.

Tentou-se também que a TesteDLL fosse ela própria um projeto de extensibilidade Primavera.

Nenhuma tentativa funcionou.

Como implementar esta solução: Ter uma DLL com funções/métodos que possam ser partilhadas por outros componentes de um projeto de extensibilidade Primavera? Sendo que esta DLL tem também que ter acesso a componentes da extensibilidade Primavera?

Faça login para poder traduzir
V10
Marcado como spam
Criado há 5 anos e 9 meses jorgeoliveira
jorgeoliveira Responsiveness Member
1 respostas
1
Resposta privada

Esta já é uma duvida colocada aqui no forum diversas vezes,e a resposta é simples. A DLL não é carregada porque não está registada em lado nenhum, ao contrario de que acontecia com as DLL com usadas na V9.

Assim a solução passa por:

  1. Registar a sua DLL na GAC.
  2. Criar um assembly resolver para indicar onde está.
  3. Colocar tudo na mesma pasta.

Existe aqui um artigo no developer network que indica como fazer ou este video: Deployment de Extensões com Dependencias

Faça login para poder traduzir
Marcado como spam
Criado há 5 anos e 9 meses sergiosereno
sergiosereno Most Valuable Professional
    Comentários
    Obrigado, @sereno ! É dificil ser original hoje em dia, mesmo com os problemas :) Vou tentar resolver a questão com as indicações que me deixa.
    5 anos e 9 meses
    jorgeoliveira