ORA_FFI: Mais de 60 parâmetros

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Pessoal, boa tarde.

Gostaria de saber se alguém passou por esse problema, com ECF (Bematech) e o forms 6i:

Preciso chamar a ORA_FFI.register_parameter com mais de 60 parâmetros? A DLL da Bematech (Bemafi32.dll) tem uma função que recebe 63 parâmetros (VendeItemCompleto) e, caso eu passe mais de 60 no Forms (utilizando a register da ORA_FFI), ele acusa erro.


Muito obrigado,

Abraço,

Trevisolli
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Resolvido!!!

Solução: Utilizamos uma função (não documentada) chamada VendeItemCompletoJSON, no qual passamos um único parâmetro (denominado: param), o qual recebe uma string no formato JSON. Com essa função JSON, passamos apenas 01 parâmetro, não tendo mais problemas com o ORA_FFI.

Esse layout pode ser validado online em:

Exemplo:

Selecionar tudo

{"Código":"1","Descrição":"Colchão","Quantidade Estoque":"0010","Forma de Pagamento":"2 - Cheque","Cliente":"José Antonio Ferreira da Silva", "Tipo de Operação":"1"}


Detalhamento da String enviada (deve ser como abaixo)

Selecionar tudo

v_string := '{' || '"codigo":"1","Descrição":"Teste" ||'}' ;
Ou seja, a chave de início ({), o nome do parâmetro, com aspas duplas, dois pontos, o valor do parâmetro com aspas duplas, vírgula, o nome do próximo parâmetro com aspas duplas, dois pontos, o valor do próximo parâmetro com aspas duplas e a chave final (}).

Dessa forma, a função retornou o que precisávamos aqui.

A chamada foi feita com ORA_FFI, passando um parâmetro e recebendo um inteiro como retoraçorno.


Parse do JSON online: http://json.parser.online.fr/

Abraço,

Trevisolli
Responder
  • Informação