CTG

Description

Appelle un service selon le protocole CTG.

Important

Le fichier CTG.rap doit être défini pour que l’appel puisse être fait. Il doit notamment inclure les définitions des certificats requis pour la connexion. Nous donnons plus bas un exemple de fichier CTG.rap

La section <Properties> n'est chargée qu'une seule fois et est valable globalement pour le moteur. Cela signifie que si un appel CTG a été effectué et que cette section est modifiée, un reset ne suffit pas à recharger les modifications. Il faut impérativement relancer RAPv4. Cela signifie également que la section <Properties> du premier fichier ctg.rap chargé est valable pour l'ensemble des applications tournant sur le même moteur RAPv4. Il faut donc prendre soin d'avoir la même section <Properties> dans chaque fichier ctg.rap de chaque application déployée sur le même moteur RAPv4.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE RAPv4Srv>
<wizard>
  <MonApplication>
    <Connection>
      <host>localhost</host>
      <user>UserName</user>
      <pass>PassWord</pass>
      <object>/CTGRequestGenerator/CTGRequestGeneratorServlet</object>
      <useSSL>false</useSSL>
      <port>8080</port>
      <saveQuery>true</saveQuery>
    </Connection>
    <Properties>
      <Propertie>java.protocol.handler.pkg=com.sun.net.ssl.internal.www.protocol</Propertie>
      <Propertie>javax.net.ssl.keyStore=C:\cert\keystore.jks</Propertie>
      <Propertie>javax.net.ssl.trustStore=C:\cert\cacerts</Propertie>
      <Propertie>javax.net.ssl.keyStorePassword=changeit</Propertie>
      <Propertie>javax.net.ssl.keyStoreType=jks</Propertie>
      <Propertie>javax.net.ssl.trustStorePassword=changeit</Propertie>
    </Properties>
  </MonApplication>
</wizard>

Il existe un contexte spécifique pour CTG, utilisable avec la fonction SETCONTEXTVAR. Ce contexte permet de renseigner les variables suivantes:

Connection.host

cf. fichier ctg.rap

Connection.user

cf. fichier ctg.rap

Pour utiliser les cookies, mettre la valeur à LptaToken ou vides les valeurs <user> et <pass> dans le fichier ctg.rap.

Connection.pass

cf. fichier ctg.rap

Connection.object

cf. fichier ctg.rap

Connection.useSSL

cf. fichier ctg.rap

Connection.port

cf. fichier ctg.rap

Connection.saveQuery

cf. fichier ctg.rap

Connection.DebugFileName

cf. fichier ctg.rap

Connection.XSL

Cette variable indique une feuille de style à utiliser pour transformer la réponse CTG lors d'un appel. Ceci peut être utile pour alléger la réponse par exemple. La feuille de style doit se trouver dans le répertoire de l'application. La variable doit être renseignée avec le nom de la feuille de style, mais sans l'extension.

De plus, il est possible de renseigner n'importe quel paramètre d'appel avec le contexte CTG. Ceci peut est utile pour les appels CTG nécessitant des paramètres sous forme de liste. L'exemple 3 montre comment générer 5 paramètres "tmtCId" de la liste enrgResultatPricingGImpMargeSi00ApiDemTechPricing.

Syntaxe

CTG ( ejbName , methodName , param1 , param2 , ... )
ejbName

Nom de l'EJB complet (fait référence au chemin du fichier XML)

methodName

Nom de la fonction

param1 , param2 , ...

Paramètres spéciaux. Ces paramètres doivent être déclarés comme suit:

<Param fct="Const" name="NomParametre.NomPropriete" value="Valeur"/>

En REX, cette syntaxe est reproduite au moyen de la notation

const[NomParametre.NomPropriete = Valeur]

Les paramètres avec une valeur nulle (NULL) ne doivent pas être passés à la fonction CTG. S'ils sont absents, le moteur se charge automatiquement de leur affecter une valeur nulle. Consultez l'exemple 2 ci-dessous à titre d'exemple.

Note

La fonction CTG dispose également d'une option de debug: lorsque la variable de contexte connection.DebugFileName est renseignée, un répertoire ctg_log est créé dans le répertoire de l'application et les fichiers d'appels et de réponse intermédiaires y sont sauvés, ce qui permet d'observer les variables utilisées par le host.

Voici un exemple d'activation du mode debug:

<!-- Exemple en RET -->
<!-- Activation du mode DEBUG -->
<Expression fct="SetContextVar">
  <Param fct="Const" value="CTG"/>
  <Param fct="Const" value="Connection.DebugFileName"/>
  <Param fct="Const" value="{$today.and.now$}"/>
</Expression>

<!-- Appel CTG -->
<Expression fct="CTG">
  ...
</Expression>

<!-- Désactivation du mode DEBUG -->
<Expression fct="ClearContexteVar">
  <Param fct="Const" value="CTG"/>
</Expression>

Exemple en rex:

// Activation du mode DEBUG
SETCONTEXTVAR("CTG", "Connection.DebugFileName", today.and.now);
CTG(...);
CLEARCONTEXTVAR("CTG");

Exemple

Nous donnons ci-dessous différents exemples d'appels CTG en RET et en REX.

Exemple 1

<!-- Exemple en RET -->
<Expression fct="CTG">
  <Param fct="Const" value="ch.unicible.tiers.Tiers"/>
  <Param fct="Const" value="b51j002LireTiersGlobal"/>
  <Param fct="Const" name="LireTiersGlobalImpSb00ApiTiers.tiersCNumero" value="100114"/>
</Expression>
// Exemple en REX
CTG("ch.unicible.tiers.Tiers", "b51j002LireTiersGlobal", const[LireTiersGlobalImpSb00ApiTiers.tiersCNumero = "100114"]);

Le résultat est une série de propriétés. Les propriétés peuvent être imbriquées. On veut obtenir le nom court du tiers de l'exemple ci-dessus. Le nom court se trouve dans la propriété tiersTNomCourt qui se trouve elle-même dans la propriété lireTiersGlobalExpSb00ApiTiers. Le résultat se trouve dans une variable dont le nom est composé avec les propriétés de la valeur cherchée. On obtient le nom court comme suit:

<Param fct="Const" value="{$lireTiersGlobalExpSb00ApiTiers.tiersTNomCourt$}"/>

Pour une requête qui retourne plusieurs lignes, on obtient des variables avec un indice de ligne à la fin du nom (de 0 à nbrLigne-1)

On peut donc utiliser un FORLESSTHAN pour parcourir les lignes. Notez que le nombre de ligne est représenté par NomPropriete.size:

<!-- Exemple en RET -->
<Expression fct="FORLESSTHAN">
  <Param fct="Const" value="compteur"/>
  <Param fct="Const" value="0"/>
  <Param fct="Const" value="{$NomPropriete.size$}"/>
  <Expression fct="MULTI">
    <Param fct="Const" value="{$NomPropriete.NomProp+data.currentloop$}"/>
  </Expression>
</Expression>
// Exemple en REX
for (compteur = 0 to NomPropriete.size excl) {
  "{$NomPropriete.NomProp+data.currentloop$}";
}

Exemple 2

On considère le service RECH_UG_PRINC_OPERANT. Ce service prend en paramètre une date et un n° d'opérant. On veut appeler ce service pour récupérer l'UG actuelle de l'opérant U123456. Pour obtenir la date actuelle, on doit laisser la date nulle. L'appel de la fonction est donc le suivant:

<!-- Exemple en RET -->
<Expression fct="CTG">
  <Param fct="Const" value="ch.unicible.operant.Operant"/>
  <Param fct="Const" value="a03j041RechUgPrincOperant"/>
  <Param fct="Const" name="RechUgPrincOperantImpDateRechercheWStandard.cOperant" value="{$NoOperant$}"/>
</Expression>
// Exemple en REX
CTG("ch.unicible.operant.Operant", "a03j041RechUgPrincOperant", const[RechUgPrincOperantImpDateRechercheWStandard.cOperant = NoOperant]);

Suite à cet appel, le moteur va effectuer l'appel CTG suivant:

<?xml version="1.0" encoding="UTF-8"?>
<ejb name="ch.unicible.operant.Operant">
  <method name="a03j041RechUgPrincOperant">
    <parameters>
      <parameter type="ch.unicible.operant.a03j041.to.RechUgPrincOperantImpDateRechercheWStandard">
        <properties>
          <property name="dDate" type="java.util.Date" isNull="true"/>
        </properties>
      </parameter>
      <parameter type="ch.unicible.operant.a03j041.to.RechUgPrincOperantImpS1AOperant">
        <properties>
          <property name="cOperant" type="int" value="123456"/>
        </properties>
      </parameter>
    </parameters>
  </method>
</ejb>

On notera le premier paramètre de l'appel CTG ci-dessus qui contient une date nulle (isNull="true"), alors que celui-ci n'est pas explicitement défini dans l'appel de la fonction CTG.

Exemple 3

L'exemple montre comment générer 5 paramètres "tmtCId" de la liste enrgResultatPricingGImpMargeSi00ApiDemTechPricing.

<!-- Exemple en RET -->
<Expression fct="FOR">
  <Param fct="Const" value="count"/>
  <Param fct="Const" value="1"/>
  <Param fct="Const" value="5"/>
  <Expression fct="SETCONTEXTVAR">
    <Param fct="Const" value="CTG"/>
    <Param fct="Const" value="enrgResultatPricingGImpMargeSi00ApiDemTechPricing.tmtCId{$count$}"/>
    <Param fct="Const" value="123"/>
  </Expression>
</Expression>
// Exemple en REX
for (count = 1 to 5 incl) {
  SETCONTEXTVAR("CTG", "enrgResultatPricingGImpMargeSi00ApiDemTechPricing.tmtCId{$count$}", 123);
}

Voir aussi

Chapitre 15, Services, CLEARCONTEXTVAR, SETCONTEXTVAR, SOAP