Retourner le numéro de build de la version courante de 4D v11 SQL

Support Technique 4D

- Titre : Retourner le numéro de build de la version courante de 4D v11 SQL

- Auteur : Support Technique 4D

- Parution : 4 septembre 2009

- Licence : Copyright ® 2005-2009 4D s.a.s.. 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 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.

code 4D

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