Appelle un service selon le protocole CTG.
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.hostcf. fichier ctg.rap
Connection.usercf. fichier ctg.rap
Pour utiliser les cookies, mettre la valeur à LptaToken
ou vides les valeurs <user> et
<pass> dans le fichier
ctg.rap.
Connection.passcf. fichier ctg.rap
Connection.objectcf. fichier ctg.rap
Connection.useSSLcf. fichier ctg.rap
Connection.portcf. fichier ctg.rap
Connection.saveQuerycf. fichier ctg.rap
Connection.DebugFileNamecf. fichier ctg.rap
Connection.XSLCette 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.
CTG ( ejbName , methodName , param1 , param2 , ... )
ejbNameNom de l'EJB complet (fait référence au chemin du fichier XML)
methodNameNom 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.
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");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);
}