+5 votos
309 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 (190 pontos)
editado por | 309 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 (224 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 (353 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
+9 votos
3 respostas
perguntado 14 Jun, 2014 por janaina.ederli (148 pontos) | 241 visitas
+7 votos
1 resposta
perguntado 9 Mai, 2014 por paulo.silva (861 pontos) | 125 visitas
Melhores Nov 2020
  1. kevin.katzer

    13 Pontos

  2. Cesar.Albuquerque

    11 Pontos

  3. diuari.molinari

    1 Pontos

200 pontos
Melhores 2020 Nov 23 - 29
    445 perguntas
    492 respostas
    351 comentários
    497 usuários