Passer au contenu principal
Cet exemple montre une vérification des données d’un tableau. La règle vérifie si les données du tableau correspondent à la valeur du champ de résultat. Le tableau comporte des colonnes contenant les prix et les quantités de certains articles. La règle a été écrite au niveau d’une section contenant le tableau et le champ de résultat.
[VBScript]
dim autoRule
set autoRule = CreateObject( "AutomationRule.CheckDoc" )
autoRule.CheckResult me.FIELD("cost"), me.FIELD("number"), me.FIELD("Result"), me
[JScript]
 var autoRule = new ActiveXObject( "AutomationRule.CheckDoc" );
autoRule.CheckResult( Field("cost"), Field("number"),
    Field("Result"), this );

Code d’un composant ActiveX

Le code fourni ici est celui de la classe CheckDoc du projet AutomationRule, utilisée dans les scripts mentionnés ci-dessus.
Option Explicit
' Vérifie si les données du tableau correspondent au résultat
' column1 - colonne des prix
' column2 - colonne des quantités
' resultField - champ de résultat (<Total> ou équivalent)
' docObj - nœud de document en cours de vérification
Public Sub CheckResult(ByRef column1 As Object, ByRef column2 As Object, _
ByRef resultField As Object, ByRef docObj As Object)
On Error GoTo err_h
Dim costItems AsObject, numItems AsObject
Dim curCost AsDouble, curNum AsLong, sum AsDouble
Dim result AsDouble
Dim i AsLong
Set costItems = column1.Items
Set numItems = column2.Items
' calcul de la somme des données du tableau
    sum = 0
For i = 0 To costItems.Count - 1
        curCost = costItems.Item(i).Value
        curNum = numItems.Item(i).Value
        sum = sum + curNum * curCost
Next
   ' comparaison avec arrondi au 2e chiffre après la virgule
    result = resultField.Value
If (Round(result, 2) = Round(sum, 2)) Then
        docObj.CheckSucceeded = True
Else
        docObj.CheckSucceeded = False
docObj.ErrorMessage = "Les données du tableau ne correspondent pas à la valeur du résultat"
        resultField.Suggest sum
   End If
Exit Sub
err_h:
docObj.ErrorMessage = Err.Description
    docObj.CheckSucceeded = False
End Sub
Le code de règle ci-dessous vérifie si la valeur du champ correspond à l’une des valeurs de la liste. Dans le cas contraire, un indicateur d’erreur de règle apparaît et le champ reçoit une liste de valeurs suggérées. Selon le résultat de la vérification, le champ est marqué comme reconnu avec certitude ou avec incertitude.
[VBScript]
'mémoriser la valeur du champ
Dim fieldValue
fieldValue = me.Field("Field6").Value
'créer la liste des valeurs à vérifier
Dim list(5)
dim i
for i = 0 to 4
    list(i) = "2" & i
next
dim success
success = false
'vérifier si la valeur du champ correspond à l'une des valeurs de la liste
for i = 0 to 4
if list(i) = fieldValue Then
        success = true
        exit for
end if
next
'en fonction du résultat de la vérification, définir le statut de certitude du champ
me.Field("Field6").IsVerified = success
'remplir la liste des suggestions du champ ; une suggestion peut être l'une des
'valeurs appropriées
if success = false then
    for i = 0 to 4
me.Field("Field6").Suggest( list(i) )
    next
end if
'placer un indicateur d'erreur
me.CheckSucceeded = success
[JScript]
// mémoriser la valeur du champ
var fieldValue = Field("Field6").Value;
// créer la liste des valeurs à vérifier
var list = new Array(5);
for( i = 0; i < 5; i++ ) {
    list[i] = "2" + i
}
var success = false;
// vérifier si la valeur du champ correspond à l'une des valeurs de la liste
for( i = 0; i < 5; i++ ) {
if( list[i] == fieldValue ) {
        success = true;
        break;
}
}
// en fonction du résultat de la vérification, définir le statut de certitude du champ
Field("Field6").IsVerified = success;
// remplir la liste des suggestions du champ ; une suggestion peut être l'une des
// valeurs appropriées
if( !success ) {
for( i = 0; i < 5; i++ ) {
        Field("Field6").Suggest( list[i] );
    }
}
// placer un indicateur d'erreur
CheckSucceeded = success;
Le code de règle ci-dessous vérifie si le champ contrôlé a été trouvé.
[VBScript]
if me.Field("InvoiceNumber").IsMatched then
 me.CheckSucceeded = true
else
 me.CheckSucceeded = false
 me.ErrorMessage = "Le champ InvoiceNumber n'a pas été trouvé"
end if
[JScript]
if( Field("InvoiceNumber ").IsMatched ) {
 CheckSucceeded = true;
} else {
CheckSucceeded = false;
 ErrorMessage = "Le champ InvoiceNumber n'a pas été trouvé";
}
Le code de règle ci-dessous vérifie si la coche est sélectionnée ou non.
[VBScript]
if me.Field("Page status").Value then
    me.CheckSucceeded = true
else
    me.CheckSucceeded = false
    me.ErrorMessage = "Page status n'est pas cochée"
  me.FocusedField = me.Field(Page status)  ""
end if
[JScript]
if( Field("Page status").Value ) {
    CheckSucceeded = true;
} else {
CheckSucceeded = false;
    ErrorMessage = "Page status n'est pas cochée";
    FocusedField = Field("Page status");
}
Le code de règle ci-dessous parcourt toutes les coches du groupe et, si aucune n’est sélectionnée, sélectionne la première. La règle est écrite au niveau du groupe de coches. Toutes les coches du groupe ont été ajoutées à la liste des champs inclus dans la règle. Le groupe lui-même a été exclu de la liste. Pour la coche par défaut (la première), l’indicateur ReadOnly a été désactivé. S’il n’y a aucune coche dans le groupe, un indicateur d’erreur de règle est activé.Cet exemple de code parcourt tous les champs inclus dans la règle. Comme les noms des champs ne sont pas spécifiés dans le code, ce code peut être utilisé pour n’importe quel groupe de coches.
[VBScript]
if me.Fields.Count = 0 then
    me.CheckSucceeded = false
    me.ErrorMessage = "There are no checkmarks in the group"
else
    dim isChosen, i
    isChosen = false
for i = 0 to me.Fields.Count - 1
       if me.Fields.Item( i ).Value then
            isChosen = true
            exit for
end if
next
if Not isChosen then
        me.Fields.Item(0).Value = true
    end if
me.CheckSucceeded = true
end if
[JScript]
if( Fields.Count == 0 ) {
    CheckSucceeded = false;
    ErrorMessage = "There are no checkmarks in the group";
} else {
    var isChosen = false;
    var i;
for( i = 0; i < Fields.Count; i++ ) {
        if( Fields.Item( i ).Value ) {
            isChosen = true;
            break;
}
}
if( !isChosen ) {
        Fields.Item(0).Value = true;
    }
CheckSucceeded = true;
}
Le code de règle ci-dessous vérifie le nombre de caractères incertains dans le champ et efface le champ si ce nombre est supérieur ou égal à trois. Il s’agit d’un script d’autocorrection.
[VBScript]
Dim totQty, suspQty
Dim i
totQty = me.Symbols.Count
suspQty = 0
for i = 0 to totQty - 1
  if me.Symbols.Item(i).IsSuspicious = true then
    suspQty = suspQty + 1
  end if
next
if suspQty >= 3 then
  me.Text = ""
end if
[JScript]
var susp, qty, strpos, i, SC, strposPrev
strposPrev = 1
qty = 0
SC = "1"
susp = SuspiciousSymbols
for ( i = 0; i < susp.length; i++) {
    strpos = susp.indexOf (SC,i)
if ((strpos != strposPrev) && (strpos != -1)) {
      qty = qty + 1
      strposPrev = strpos
    }
}
if (qty >= 3) {
  text = ""
}
Le script remplace ”+” par ”&” sans perdre les informations sur les régions ni les indicateurs de vérification. Il s’agit d’un script d’autocorrection.
[VBScript]
Dim totQty
Dim i
totQty = me.Symbols.Count
for i = 0 to totQty - 1
if me.Symbols(i).Symbol = "+" then
    me.Symbols(i).Symbol = "&"
end if
next
Vérifie que le nombre de documents indiqué sur la page de contrôle correspond à l’inventaire du lot ainsi qu’au nombre de documents réellement traités. Si ces nombres ne correspondent pas, une erreur est renvoyée.
[VBScript]
dim DQty
dim i
for i = 0 to me.Batch.Documents.Count - 1
  if me.Batch.Documents.Item(i).DefinitionName = "Inv" then
    DQty = me.Batch.Documents.Item(i).IndexedItemValue("DocQty")
    exit for
end if
next
dim AcQty
AcQty = me.Batch.Documents.Count
if acqty <> DQty then
  me.CheckSucceeded = false
  me.ErrorMessage = "Incorrect number of documents in the batch:" & " " & AcQty& ". " & "Expected number:" & " " & DQty & "!"
end if
[JScript]
for ( i = 0; i < [Batch.Documents.Count - 1]; i++ ) {
var TemplName = Batch.Documents.Item(0).DefinitionName;
  if (TemplName = "Inv") {
    var DQty = Batch.Documents.Item(i).IndexedItemValue("DocQty");
    break ;
}
}
var AcQty = Batch.Documents.Count -1
if (AcQty != DQty) {
    CheckSucceeded = false;
    ErrorMessage = "Incorrect number of documents in the batch:" + " " + AcQty + "." + "Expected number:" + " " + DQty +"!" ;
}
Ce script compte le nombre de pages dans une section d’un jeu de documents et renvoie une erreur si le jeu contient un élément d’un type inconnu.
int subDocumentsCount = 0;
int pagesCount = 0;
IBatchItem asBatchItem = Context.Document.AsBatchItem;
IBatchItems items = asBatchItem.ChildItems;
foreach (IBatchItem item in items)
{
if ( item.Type == TBatchItemType.BIT_Page )
{   pagesCount ++;  }
else if( item.Type == TBatchItemType.BIT_Document )
{   subDocumentsCount ++; }
else
{
Context.CheckSucceeded = false;
Context.ErrorMessage = "Unknown type of element in set";
}
}
Context.Field("Field").Text = subDocumentsCount.ToString() + " " + pagesCount.ToString();
Le script décompose l’adresse en composants suivants : code postal, pays, ville et rue. Le script est appelé sur une partie du champ source.
[C# .Net]
//-----------------------------------------
var collectionName = "";
IFieldExtractor extractor = Context.GetFieldExtractor();
extractor.ParseAddress();
var city = extractor.ExtractedObjects( collectionName, "NerCity" );
var country = extractor.ExtractedObjects( collectionName, "NerCountry" );
var zip = extractor.ExtractedObjects( collectionName, "NerZipCode" );
var street = extractor.ExtractedObjects( collectionName, "NerStreet" );
for( var i = 0; i < city.Count; i++ ) {
extractor.PutSpanToField( city.Item(i).Span, Context.Field("City") );
}
for( var i = 0; i < country.Count; i++ ) {
extractor.PutSpanToField( country.Item(i).Span, Context.Field("Country") );
}
for( var i = 0; i < zip.Count; i++ ) {
extractor.PutSpanToField( zip.Item(i).Span, Context.Field("ZIP") );
}
for( var i = 0; i < street.Count; i++ ) {
extractor.PutSpanToField( street.Item(i).Span, Context.Field("Street") );
}
//-------------------------------------