Appel de méthode 4D dans des requêtes SQL

Stéphanie Tirtiat

- Titre : Appel de méthode 4D dans des requêtes SQL

- Auteur : Stéphanie Tirtiat

- Parution : 9 octobre 2008

- Licence : Copyright ® 2008 4D s.a.. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

Produit : 4D v11 SQL  ·  Plateforme : Mac & Windows ♪

Il est possible d'exécuter une méthode projet 4D dans une requête SQL.

Il y a quelques règles à respecter :

* La méthode doit être une méthode projet.

* Cette méthode projet doit être accessible par les requêtes SQL. Cette option se configure dans les propriétés de la méthode :

* Vous ne pouvez pas appeler une commande ou fonction du langage 4D.

* La fonction qui appelle la méthode doit impérativement retourner une valeur.

* La méthode peut ne pas avoir de paramètre.

* Règles de syntaxe :
Si vous avez des variables interprocess ou des noms de variables comportant des espaces (et tout caractère non SQL), vous devez utiliser les crochets pour encapsuler le nom de la variable pour que l'interpréteur SQL puisse l'analyser.
Par exemple : <>MaVarInterprocess ou Ma Variable donneront respectivement [:<>MaVarInterprocess] et [:Ma Variable].
Voir la documentation Nom_Sql.

Test simple :

code 4D - exemple avec paramètre

`-------------------------------------------------
` fonction SQL appelant une méthode 4D, en passant 1 paramètre
` la requête SQL retourne 1 ligne, PeopleID étant unique
` si la requête retourne n lignes, l'email sera envoyé n fois
`-------------------------------------------------
TABLEAU ENTIER LONG(Result1;0)
C_TEXTE($zeText)
$zeText:="Test 1"

Debut SQL
SELECT {fn m_SendMail (:$zeText) AS NUMERIC}
FROM PEOPLE
WHERE PeopleID = 1
INTO :Result1
Fin SQL
`-------------------------------------------------

code 4D - exemple sans paramètre

`-------------------------------------------------
` fonction SQL appelant une méthode 4D, sans passer de paramètre
` la requête SQL retourne 1 ligne, PeopleID étant unique
` si la requête retourne n lignes, l'email sera envoyé n fois
`-------------------------------------------------
TABLEAU ENTIER LONG(Result1;0)

Debut SQL
SELECT {fn m_SendMail() AS NUMERIC}
FROM PEOPLE
WHERE PeopleID = 1
INTO :Result1
Fin SQL
`-------------------------------------------------

code 4D - méthode appelée : m_SendMail

`-------------------------------------------------
` méthode m_SendMail
`-------------------------------------------------
C_ENTIER LONG($0)

C_TEXTE($MailServer;$From;$Dest;$Objet;$texte)
$MailServer:="mon.serverdemail.com"
$From:="nom@domaine.fr"
$Dest:="nom@domaine.fr"
$texte:="Ceci est un test"

` commandes du plugin 4D Internet Commands?
` (gestion d'erreur à installer)
C_ENTIER LONG($SMTP_ID)
$Err:=IT_SetTimeOut (60)
$Err:=IT_MacTCPInit

$Err:=SMTP_New ($SMTP_ID)
$Err:=SMTP_Host ($SMTP_ID;$MailServer;0)
$Err:=SMTP_From ($SMTP_ID;$From;0)
$Err:=SMTP_To ($SMTP_ID;$Dest;1)

Au cas ou
: (Nombre de parametres=0)
$Objet:="Test 0"
: (Nombre de parametres=1)
C_TEXTE($1)
$Objet:=$1
Fin de cas

$Err:=SMTP_Subject ($SMTP_ID;$Objet;1)
$Err:=SMTP_Body ($SMTP_ID;$texte;1)
$Err:=SMTP_Send ($SMTP_ID)

$Err:=SMTP_Clear ($SMTP_ID)

$Err:=IT_SetTimeOut (0)

` (gestion d'erreur à installer)
$0:=0  `pas d'erreur
`-------------------------------------------------

Voir aussi la documentation Appeler des méthodes 4D depuis le code SQL.