Code généré par l'assistant d'interaction Web IBM i

Les classes Action et ActionForm générées par l'assistant d'interaction Web IBM® i dépendent du code contenu dans les modèles. Le système propose quatre modèles qui contiennent du contenu statique et dynamique. Le contenu statique peut être modifié et personnalisé. Le contenu dynamique permet à l'assistant d'interaction Web de générer du code selon les paramètres définis dans l'assistant. Les mots clés de cette section commencent par le caractère #. Les mots clés sont réservés à l'assistant d'interaction Web. Vous pouvez personnaliser la section dynamique, mais les mots clés réservés doivent rester dans l'ordre où ils apparaissent. Par ailleurs, vous pouvez ajouter des commentaires à la section en les faisant précéder des caractères ##. Les commentaires utilisateur ne sont pas générés dans le code final.

Les quatre modèles de code sont les suivants :
  • iseriesPgmCallAction.template : Permet de générer les classes Action des interactions d'appel de programme.
  • iseriesJBAction.template : Permet de générer les classes Action des interactions de bean Java™.
  • iseriesNoPgmCallAction.template : Permet de générer les classes Action lorsqu'aucun appel de programme ou bean Java n'est présent.
  • iseriesActionForm.template : Permet de générer les classes ActionForm de toutes les options sélectionnées dans l'assistant d'interaction Web.

Chaque modèle affecte le code généré à tous les projets Web de l'espace de travail. En fait, les modèles portent sur l'ensemble de l'espace de travail.

Les modèle originaux sont copiés dans le dossier de l'espace de travail. Ainsi, les utilisateurs ne risquent pas de les supprimer par inadvertance. Les modèles figurant dans l'espace de travail sont utilisés par l'assistant d'interaction Web pour générer le code. Vous devez seulement personnaliser les copies résidant dans l'espace de travail dans le répertoire suivant :
emplacement_espace_travail\.metadata\.plugins\com.ibm.etools.iseries.webtools\

Exemple de fichier modèle iseriesPgmCallAction

Les classes d'action générées par l'assistant d'interaction Web sont triées par nom de package comportant l'extension .action. Cet assistant peut générer cinq classes d'actions différentes :
  • Le nom de la classe d'action principale correspond au nom de l'interaction Web suivi de Action.java.
  • La classe d'action de l'auxiliaire IBM i est ISeriesAction.java.
  • ISeriesPgmAction.java est basée sur le modèle iseriesPgmCallAction.template.
  • ISeriesNoPgmAction.java est basée sur le modèle iseriesNoPgmCallAction.template.
  • ISeriesJBAction.java est basée sur le modèle iseriesJBAction.template.
Les classes ISeriesPgmAction.java, ISeriesNoPgmAction.java et ISeriesJBAction.java sont générées pour chaque projet.

Si vous avez personnalisé les fichiers modèle, supprimez les classes d'actions correspondantes avant de lancer l'assistant d'interaction Web, pour que les modifications apportées aux fichiers modèle soient prises en compte.

L'exemple suivant illustre une partie du fichier iseriesPgmCallAction.template. Les mots clés sont identifiés par le caractère # et les commentaires utilisateur par les caractères ##.
#PACKAGE ## e.g. package com.ibm.userwebapp.actions;

##============================================================
## Template file for the generation of user Action classes
## that invokes IBM i host program.
## #{keyword} are for the internal dynamic code-generation
## based on the Web Interaction Wizard
## Template Comment will be ignored by the code-generation.
##============================================================

/**
 * Description - Use PCML to call IBM i ILE program
 */
import java.util.*;
import java.io.*;
import java.math.*;
import java.text.*;
import javax.servlet.http.*;
import javax.servlet.ServletContext;
import org.apache.struts.action.*;
import com.ibm.as400.access.*;
import com.ibm.iseries.webint.*;
import com.ibm.connector2.iseries.pgmcall.*;

#IMPORT                           ## e.g. import com.ibm.userwebapp.beans.*;

public class ISeriesPgmAction extends ISeriesBaseAction
{

  #DEFINE_CONSTRUCTOR             ## e.g. public UserWebAppAction()
  {
    super(xmlPath);
  }

  public ActionForward
  #EXECUTE_METHOD_NAME            ## Struts 1.0 -> perform, Struts 1.1 -> execute
  ( ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response,
    ActionServlet actionServlet )
  {
    try
    {
      if(!request.isRequestedSessionIdValid())
      {
        return mapping.findForward("session_error");
      }
      else
      {
        setActionServlet(actionServlet);

        preprocessing(request, response, form);

        HttpSession session = request.getSession();

        Object databean = processInput(form, request, session);
        
        ArrayList inputPageNames = getInputPages();
        if(inputPageNames != null && inputPageNames.siz() > 0)
        {
          for(int k=0; k<inputPageNames.siz(); k++)
          {
            saveFormToPage(session,
            (ISeriesActionFormInterface) form,
            (String)inputPageNames.get(k));
          }
         }

        Object formBean = getOutputFormBean();

        _databean = (ProgramCallRecord) databean;

        invokeHostProgram(request, _dataBean, form, ISeriesActionFormInterface) formBean);

        processOutput(databean, formBean, session);

        if(msgCodeObj != null)
        {
          String msgPage = checkAndMapMessages(msgCodeObj,
          request, form, (ISeriesActionFormInterface)
          formBean);
          if(msgPage != null && msgPage.compareTo(getOutputPage())!= 0)
          {
            postprocessing(request, form,(ISeriesActionFormInterface) formBean);
            return mapping.findForward(msgPage);
          }
         }

        ArrayList outputPageNames = getOutputPages();
        if(outputPageNames != null && outputPageNames.size() > 0)
        {
          for(int k=0; k<outputPageNames.size(); k++)
          {
            saveFormToPage(session, (ISeriesActionFormInterface) formBean, (String)outputPageNames.get(k));
          }
         }
        
        postprocessing(request, form, (ISeriesActionFormInterface) formBean);

        if( _bInvalidateSession )
        {
          session.setAttribute( "wdt400.invalidateSession", "true");
          session.invalidate();
        }

        if(sFlowCtrl.equals(""))
        return getForward(mapping, session);
        else
        return getForward(sFlowCtrl, mapping, session);
      }
    }
    catch(Exception ex)
    {
      handleError(request, response, ex);
      return mapping.findForward("wdt_error");
    }
  }

  // Trigger methods Section
  // These methods represent key processing phases of
  // the generated Action execute().
  // User can potentially extend the classes and override the methods
  // to specialize their needs.
  // In general, it is recommended that the derived methods to invoke the
  // corresponding method in the super class, e.g. super.preprocessing() etc.
  //-----------------------------------------------------------------------------------------
  protected void preprocessing(HttpServletRequest request,
                               HttpServletResponse response,
                               ActionForm inputForm )
  throws Exception
  {
  }

  protected void invokeHostProgram( HttpServletRequest request,
                                    ProgramCallRecord dataBean,
                                    ActionForm inputForm,
                                    ISeriesActionFormInterface resultsForm )
  throws WebIntRuntimeException
  {
  }

  protected void postprocessing( HttpServletRequest request,
                                 ActionForm inputForm,
                                 ISeriesActionFormInterface resultsForm )
  {
  }

  // Helper methods Section
  //-----------------------------------------------------------------------------

Commentaires en retour