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.

Image non disponible

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.

Image non disponible


Retourner le numéro de build par programmation

Image non disponibleSur 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 correspondand au Regex.
Si la chaîne est trouvée, elle est extraite pour retourner le numéro de build de 4D.

Image non disponibleSur 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
Sélectionnez

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 utilise 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