+6 votos
381 visitas

Tentei realizar o processo descrito na wiki (http://wiki.benner.com.br/wiki/index.php?title=Manipula%C3%A7%C3%A3o_de_entidades_em_VBA_e_em_Delphi#Exemplo_2), porém não deu certo ao executar o código abaixo, apresentando o seguinte erro:

Public Sub TABLE_AfterPost()
  Dim indicarProtocoloPta As CSEntityCall

  Set indicarProtocoloPta = BusinessEntity.CreateCall("Benner.Saude.ANS.Entidades.Tv_Monitoramento_Indicacaopta", "AlterarProtocoloPTA")

  indicarProtocoloPta.AddParameter(pdtString, SessionVar("HANDLE_ROTMONITORAMENTOTISS"))
  indicarProtocoloPta.AddParameter(pdtString, CurrentQuery.FieldByName("PROTOCOLOPTA").AsString)

  indicarProtocoloPta.Execute()

  Set indicarProtocoloPta = Nothing
End Sub

INP-116, INP-301: Erro durante a execução da macro de TV_MONITORAMENTO_INDICACAOPTA:
(&H80131522) Could not load type 'Benner.Saude.ANS.Entidades.Tv_Monitoramento_Indicacaopta' from assembly 'Benner.Tecnologia.ManagedInterop, Version=2008.0.0.0, Culture=neutral, PublicKeyToken=f2db26731026fd37'.

Se eu trocar para chamar pelo Entity.CreateCall ocorre o seguinte erro:

Public Sub TABLE_AfterPost()
  Dim indicarProtocoloPta As CSEntityCall

  Set indicarProtocoloPta = Entity.CreateCall("TV_MONITORAMENTO_INDICACAOPTA", "AlterarProtocoloPTA")

  indicarProtocoloPta.AddParameter(pdtString, SessionVar("HANDLE_ROTMONITORAMENTOTISS"))
  indicarProtocoloPta.AddParameter(pdtString, CurrentQuery.FieldByName("PROTOCOLOPTA").AsString)

  indicarProtocoloPta.Execute()

  Set indicarProtocoloPta = Nothing
End Sub

INP-116, INP-301: Erro durante a execução da macro de TV_MONITORAMENTO_INDICACAOPTA:
(&H80131509) Não foi encontrado no tipo EntityBase um método público de nome AlterarProtocoloPTA que aceite os parâmetros especificados.

 

Método na Entidade Especializada da tabela virtual:

namespace Benner.Saude.ANS.Entidades
{
    public partial class Tv_Monitoramento_Indicacaopta
    {
        public static void AlterarProtocoloPTA(string handleRotinaMonitoramento, string protocoloPta)
        {
             AlterarProtocoloPTANaRotina(RotinaMonitoramento, protocoloPta);
        }
    }
}

O método acima está no AfterPost da tabela virtual, pois na tabela virtual o usuário deverá preencher o protocolo que será salvo na rotina.

Tabela Virtual no builder, não foi marcado o parâmetro Executa Entidade Especialisada, pois eu preciso passar uma SessionVar com o Handle da rotina para a tabela virtual, porém isso não é possível no WES2006. 

 

por (196 pontos)
editado por | 381 visitas

2 Respostas

0 votos
Melhor resposta

O método AlterarProtocoloPTA recebe dois parâmetros String. Entretanto, a chamada VBA desse método passa o primeiro parâmetros como pdtInteger e o segundo como pdtString.

Ambos deveriam ser pdtString.

Ajuste esse problema (alterando a assinatura do método ou a passagem dos parâmetros) e utilize a forma apontada pela resposta do andre.gielow para a invocação do método.

por (230 pontos)
selecionada por
Eu já tinha feito essa alteração após publicar ela aqui..
Corrigi colocando o pdtString, porém continuou com os mesmos problemas.
Olá rodrigo. Podes ajustar os exemplos na pergunta para o código que você tem atualmente, para que seja possível avaliar mais precisamente o erro?
João Paulo, ajustei a pergunta com a situação atual,  tanto pelo runner, quanto pelo wes2006 acontece este problema.
Olá Rodrigo. O método é estático e a flag Entidade Especializada NÃO está marcada. Nesse caso, você deve realizar a invocação conforme o terceiro trecho de código do link http://wiki.benner.com.br/wiki/index.php?title=Manipula%C3%A7%C3%A3o_de_entidades_em_VBA_e_em_Delphi#Exemplo_2 e não como o segundo trecho (que é que está na pergunta)
+1 voto

Rodrigo,

Poderias tentar utilizar o código abaixo:

Public Sub AlterarProtocoloPTA
 
	Dim funcao As CSEntityCall
 
	Set funcao = Entity.CreateCall("TV_MONITORAMENTO_INDICACAOPTA", "AlterarProtocoloPTA")
 
	funcao.AddParameter(pdtString, "handleRotinaMonitoramento")
	funcao.AddParameter(pdtString, "protocoloPta")
 
	funcao.Execute()
End Sub

Posteriormente favor postar aqui o resultado.

por (367 pontos)
Como você já está na macro da própria tabela você também pode usar da seguinte maneira:

http://desenv.benner.com.br/accessviolation/?qa=252/como-chamar-uma-funcao-de-entidade-a-partir-da-macro
Bom dia André,

Tentei desta forma e deu o seguinte erro:

INP-116, INP-301: Erro durante a execução da macro de TV_MONITORAMENTO_INDICACAOPTA:
(&H80131509) Não foi encontrado no tipo EntityBase um método público de nome AlterarProtocoloPTA que aceite os parâmetros especificados.
Em caso de dúvida, entre em contato com o suporte do sistema.
Linha: 12
Rodrigo, por via das dúvidas, verifique se a flag da DLL esta marcada:

http://desenv.benner.com.br/accessviolation/?qa=blob&qa_blobid=12197462713862084865
Está marcado sim.
Bem, tenho o mesmo cenário que o seu aqui, porém o meu funciona.
Vamos esperar alguma outra pessoa responder aqui pra ver oque é.
Caso você descubra favor comentar aqui.

Obrigado.
Acredito que seja necessário você marcar a tabela como Entidade Especializada selecionando a tabela no Builder, e marcando o flag "Executar Entidade Especializada"

Perguntas relacionadas

+5 votos
1 resposta
+10 votos
3 respostas
perguntado 14 Jun, 2014 por janaina.ederli (153 pontos) | 301 visitas
+8 votos
1 resposta
perguntado 9 Mai, 2014 por paulo.silva (865 pontos) | 155 visitas
Melhores Aug 2025
    200 pontos
    Melhores 2025 Jul 28 - Aug 03
    1. Larson

      156 Pontos

    2. danilo.pereira

      96 Pontos

    3. danilo.pereira

      96 Pontos

    4. danilo.pereira

      96 Pontos

    5. luciano.fronza

      61 Pontos

    6. luciano.fronza

      61 Pontos

    7. luciano.fronza

      61 Pontos

    8. diuari.molinari

      52 Pontos

    9. diuari.molinari

      51 Pontos

    10. diuari.molinari

      51 Pontos

    517 perguntas
    566 respostas
    389 comentários
    704 usuários