Produit : 4D v11 SQL v11.x · Plateforme : Windows & Mac OS X ♪
Voici un exemple de code 4D qui retourne le numéro de build de la version 4D v11 SQL utilisée pour votre application.
Le code fonctionne aussi bien sur Mac OS X que sur Windows.
Le numéro de build
Le numéro de build est le dernier numéro contenu dans le numéro complet de la version 4D.
Par exemple, le numéro de version complet de la version 4D v11.4 est 11.4.0.60146. Le numéro de build est alors 60146.
Vous pouvez trouver ce numéro complet de version en faisant un clic droit sur l'icône de l'application 4D et en sélectionnant "Propriétés", si vous êtes sous Windows.
Sous Mac OS X, dans le finder, en mode colonne, la preview de l'application 4D sélectionnée affichera la version et le numéro de build.
Retourner le numéro de build par programmation
Sur Mac, c'est le fichier info.plist qui est analysé.
C'est un fichier XML qui contient des informations sur l'application.
Le fichier est transformé avec XSLT. La commande Trouver regex est utilisée pour
analyser le contenu et trouver une chaîne correspondant au Regex.
Si la chaîne est trouvée, elle est extraite pour retourner le numéro de build de 4D.
Sur Windows, nous utilisons LANCER PROCESS EXTERNE pour exécuter un script VB.
Le script VB, créé par programmation, récupérer la version de l'application 4D.
La chaîne retournée est alors testée avec la commande Trouver regex pour être sure que le numéro de build y est inclus et l'en extraire.
C_TEXTE
(
$0
)
C_ENTIER LONG
(
$platform_l
)
PROPRIETES PLATE FORME(
$platform_l
)
Si
(
$platform_l
=
Mac OS
)
$xsl_source_t
:=
""
$xsl_source_t
:=
$xsl_source_t
+
"<?xml version=
\"
1.0
\"
encoding=
\"
utf-8
\"
?>
\n
"
$xsl_source_t
:=
$xsl_source_t
+
"<xsl:stylesheet version=
\"
1.0
\"
xmlns:xsl="
$xsl_source_t
:=
$xsl_source_t
+
"
\"
http://www.w3.org/1999/XSL/Transform
\"
>
\n
"
$xsl_source_t
:=
$xsl_source_t
+
"<xsl:output method=
\"
text
\"
/>
\n
"
$xsl_source_t
:=
$xsl_source_t
+
"<xsl:template match=
\"
/
\"
>
\n
"
$xsl_source_t
:=
$xsl_source_t
+
"<xsl:for-each select=
\"
/plist/dict/key[ string() = "
$xsl_source_t
:=
$xsl_source_t
+
"'CFBundleShortVersionString' ]
\"
>
\n
"
$xsl_source_t
:=
$xsl_source_t
+
"<xsl:value-of select=
\"
./following-sibling::*
\"
/>
\n
"
$xsl_source_t
:=
$xsl_source_t
+
"</xsl:for-each>
\n
"
$xsl_source_t
:=
$xsl_source_t
+
"</xsl:template>
\n
"
$xsl_source_t
:=
$xsl_source_t
+
"</xsl:stylesheet>
\n
"
C_BLOB
(
$xml_result_x
;
$xsl_source_x
)
CONVERTIR DEPUIS TEXTE
(
$xsl_source_t
;
"utf-8"
;
$xsl_source_x
)
DOCUMENT VERS BLOB
(
Fichier application
+
":Contents:Info.plist"
;
$xml_source_x
)
APPLIQUER TRANSFORMATION XSLT(
$xml_source_x
;
$xsl_source_x
;
$xml_result_x
)
$xml_result_t
:=
Convertir vers texte
(
$xml_result_x
;
"utf-8"
)
TABLEAU ENTIER LONG
(
$match_pos_al
;
0
)
TABLEAU ENTIER LONG
(
$match_length_al
;
0
)
Si
(
Trouver regex
(
"(.*)
\\
((.*)
\\
)"
;
$xml_result_t
;
1
;
$match_pos_al
;
$match_length_al
))
$0
:=
Sous chaine
(
$xml_result_t
;
$match_pos_al
{2
};
$match_length_al
{2
})
Fin de si
Sinon
$vbs_in_t
:=
""
$vbs_in_t
:=
$vbs_in_t
+
"Set fso = CreateObject(
\"
Scripting.FileSystemObject
\"
)
\r\n
"
$vbs_in_t
:=
$vbs_in_t
+
"WScript.StdOut.Write fso.GetFileVersion(
\"
"
$vbs_in_t
:=
$vbs_in_t
+
Fichier application
+
"
\"
)
\r\n
"
$script_path_t
:=
Dossier temporaire
+
"$"
+
Chaine
(
Nombre de millisecondes
)+
".vbs"
CONVERTIR DEPUIS TEXTE
(
$vbs_in_t
;
"UTF-16LE"
;
$script_x
)
BLOB VERS DOCUMENT
(
$script_path_t
;
$script_x
)
FIXER VARIABLE ENVIRONNEMENT
(
"_4D_OPTION_HIDE_CONSOLE"
;
"true"
)
C_BLOB
(
$stdin_x
;
$stdout_x
;
$stderr_x
)
$cscript_t
:=
"cscript //Nologo //U
\"
"
+
$script_path_t
+
"
\"
"
LANCER PROCESS EXTERNE
(
$cscript_t
;
$stdin_x
;
$stdout_x
;
$stderr_x
)
$vbs_out_t
:=
Convertir vers texte
(
$stdout_x
;
"UTF-16LE"
)
TABLEAU ENTIER LONG
(
$match_pos_al
;
0
)
TABLEAU ENTIER LONG
(
$match_length_al
;
0
)
Si
(
Trouver regex
(
"(.*)
\\
.(.*)"
;
$vbs_out_t
;
1
;
$match_pos_al
;
$match_length_al
))
$0
:=
Sous chaine
(
$vbs_out_t
;
$match_pos_al
{2
};
$match_length_al
{2
})
Fin de si
SUPPRIMER DOCUMENT
(
$script_path_t
)
Fin de si
Application pratique :
En environnement client/serveur, cette méthode pourrait être utilisée pour confirmer aux clients connectés qu'ils utilisent bien la version escomptée de 4D correspond à celle du serveur.
Documentation :
· commande Trouver Regex
· commande LANCER PROCESS EXTERNE