2017-10-20 4 views
1

J'essaie actuellement de créer une procédure dans Genexus 15 et d'appeler depuis Java Environment, mais lorsque j'importe le fichier jar vers Java, la fonction ne peut pas être appelée.Appel de la procédure Genexus stub dans l'environnement Java

Je crée une procédure simple avec un talon comme suit:

stub salvadados(in:&StringTeste, out:&StringRetorno) 
    &StringRetorno = "ola " + &StringTeste 
endstub 

Genexus génère le fichier .jar lors du déploiement de l'application, puis je l'importer sur NetBeans. L'importation est réussie et elle reconnaît la procédure que j'ai créée, mais quand j'accède à ses méthodes, il n'y a pas d'appel pour mon talon.

Ma classe Java est la suivante. Je veux appeler ma souche dans la fonction EnviaDados.

import com.genexus.GXProcedure; 
import com.genexus.GXutil; 
import com.genexus.ModelContext; 
import com.genexus.reports.GXcfg; 
import com.kbtesteintegracao.projeto.ptesteintegracao; 

public class IntegracaoGenexus extends GXProcedure { 

    ptesteintegracao ptesteintegracao; 


    public void executeCmdLine(String args[]) { 
     execute(); 
    } 

    public IntegracaoGenexus(int remoteHandle) { 
     super(remoteHandle, new ModelContext(IntegracaoGenexus.class), ""); 
    } 

    public IntegracaoGenexus(int remoteHandle, ModelContext context) { 
     super(remoteHandle, context, ""); 
    } 

    public void iniciar() { 
     ptesteintegracao = new ptesteintegracao(remoteHandle, context); 

    } 

    public void EnviaDados(String strDados) { 
     //ptesteintegracao.gxep_salvadados(strDados); 
    } 

    public void execute() { 
     execute_int(); 
    } 

    private void execute_int() { 
     initialize(); 
     privateExecute(); 
    } 

    private void privateExecute() { 
     new ptesteintegracao(remoteHandle, context).gxep_salvadados("teste"); 
     cleanup(); 
    } 

    public static Object refClasses() { 
     GXutil.refClasses(IntegracaoGenexus.class); 
     return new GXcfg(); 
    } 

    protected void cleanup() { 
     CloseOpenCursors(); 
     exitApplication(); 
    } 

    protected void CloseOpenCursors() { 
    } 

    /* Aggregate/select formulas */ 
    public void initialize() { 
     /* GeneXus formulas. */ 
     Gx_err = (short)(0) ; 
    } 

    private short Gx_err ; 

} 

Qu'est-ce qui me manque? J'apprécie toute aide.

+0

Pourquoi classe 'vous accordons GXProcedure'? – ncardeli

+0

Je l'ai juste utilisé parce que je l'ai trouvé sur un exemple de code. Aussi essayé sans l'extension mais je ne pouvais pas le faire fonctionner non plus. –

Répondre

1

J'ai trouvé une solution. Ce que j'ai fait était de créer un panneau de test sur mon projet Genexus et j'ai appelé la procédure que j'ai créée. Dans ce WPanel je mets juste un composant Button qui déclenche l'événement suivant:

Event 'Teste' 
    ptesteintegracao.salvadados("oi", &retorno) 
Endevent 

Je ne sais pas pourquoi, mais en faisant cet appel à ma procédure, d'une certaine façon, il a forcé Genexus de recréer le fichier .java de ma procédure, ce qu'il ne faisait pas avec la construction, reconstruire ou construire avec ces seules options. Une fois recréée, ma classe Java était avec la fonction correspondant à mon stub de procédure.

Après cela, je viens déployé l'application, la génération d'un nouveau fichier .jar et importé sur mon projet NetBeans et ma fonction était disponible:

ptesteintegracao.gxep_salvadados("teste", stringReturn); 
0

Ici, c'est la correction pour la question ci-dessus.

La méthode d'exécution privée nécessite le paramètre de sortie. ... nouveau ptesteintegracao (remoteHandle, contexte).

... Devrait être comme ceci: new String retorno = new ptesteintegracao (remoteHandle, contexte) .gxep_salvadados ("teste");

+0

Merci pour la réponse, mais ce n'est pas le problème. Mon problème est que je ne trouve pas la fonction gxep_salvadados, mais je ne sais pas où est le problème, si c'est dans mon code Java ou dans mon application sur Genexus. –