TechTip pour créer les index manquants sur les champs déclarés "Unique" mais non-indexés : http://kb.4d.com/assetid=77023 (en anglais), ou ci-dessous code en français :
C_LONGINT($maxTableNumber_l;$currentTable_l)
C_LONGINT($maxFieldCount_l;$currentField_l)
C_LONGINT($dontCare_l)
C_BOOLEAN($dontCare_f;$isIndexed_f;$isUnique_f)
C_TEXT($logHeader_t;$logRecord_t;$logfile_t)
C_TEXT($delim_t;$lf_t)
C_TEXT($tableName_t;$fieldName_t;$note_t)
$maxTableNumber_l:=Get last table number
For($currentTable_l;1;$maxTableNumber_l)
If(Is table number valid($currentTable_l))
$maxFieldCount_l:=Get last field number(Table($currentTable_l))
boucle($currentField_l;1;$maxFieldCount_l)
If(Is field number valid($currentTable_l;$currentField_l))
GET FIELD PROPERTIES($currentTable_l;$currentField_l;$dontCare_l;\
$dontCare_l;$isIndexed_f;$isUnique_f;$dontCare_f)
If($isUnique_f) & (Not($isIndexed_f))
$tablePtr:=Table($currentTable_l)
$fieldPtr:=Field($currentTable_l;$currentField_l)
$tableName_t:=Table name($tablePtr)
$fieldName_t:=Field name($fieldPtr)
$indexName_t:="["+$tableName_t+"]"+$fieldName_t+" indexé car unicité"
ARRAY POINTER($fieldsArray_p;1)
$fieldsArray_p{1}:=$fieldPtr
CREATE INDEX($tablePtr->;$fieldsArray_p;Standard BTree Index;$indexName_t;*)
End if
End if
End for
End if
End for
Techtip pour générer un fichier disque listant les champs uniques non-indexés : http://kb.4d.com/assetid=77024, (en anglais) ou ci-dessous code en français :
C_LONGINT($maxTableNumber_l;$currentTable_l)
C_LONGINT($maxFieldCount_l;$currentField_l)
C_LONGINT($dontCare_l)
C_BOOLEAN($dontCare_f;$isIndexed_f;$isUnique_f)
C_TEXT($logHeader_t;$logRecord_t;$logfile_t)
C_TEXT($delim_t;$lf_t)
C_TIME($logfile_h)
C_TEXT($tableName_t;$fieldName_t;$note_t)
$delim_t:=Char(Tab)
$lf_t:=Char(Carriage return)+Char(Line feed)
$logHeader_t:="Champs uniques sans index :"+$lf_t
$logfile_t:=Get 4D folder(Logs folder)+"UniqueNonIndex.txt"
$logfile_h:=Create document($logfile_t)
If(OK=1)
SEND PACKET($logfile_h;$logHeader_t)
$maxTableNumber_l:=Get last table number
For($currentTable_l;1;$maxTableNumber_l)
If(Is table number valid($currentTable_l))
$maxFieldCount_l:=Get last field number(Table($currentTable_l))
For($currentField_l;1;$maxFieldCount_l)
If(Is field number valid($currentTable_l;$currentField_l))
GET FIELD PROPERTIES($currentTable_l;$currentField_l;$dontCare_l;\
$dontCare_l;$isIndexed_f;$isUnique_f;$dontCare_f)
If(($isUnique_f) & (Not($isIndexed_f)))
$tableName_t:=Table name(Table($currentTable_l))
$fieldName_t:=Field name(Field($currentTable_l;$currentField_l))
$logRecord_t:="["+$tableName_t+"]"+$fieldName_t+$lf_t
SEND PACKET($logfile_h;$logRecord_t)
End if
End if
End for
End if
End for
End if
CLOSE DOCUMENT($logfile_h)
Voir L'éditeur de méthode est en "Anglais-US" par défaut. Dans le contexte du déploiement d'applications fusionnées, pour utiliser les paramètres régionaux vous pouvez éditer le contenu du fichier de préférences de 4D v15 sur chaque machine locale et fixer la clé "use_localized_language" à "true".