Saltar al contenido principal
Este ejemplo muestra una comprobación de datos en una tabla. La regla comprueba si los datos de la tabla coinciden con el valor del campo resultante. La tabla tiene columnas con precios y cantidades de determinados artículos. La regla se ha escrito en una sección que contiene la tabla y el campo resultante.
[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 );

Código de un componente ActiveX

El código que se proporciona aquí corresponde a la clase CheckDoc del proyecto AutomationRule, que se utiliza en los scripts mencionados anteriormente.
Option Explicit
' Comprueba si los datos de la tabla coinciden con el resultado
' column1 - columna de precio
' column2 - columna de cantidad
' resultField - campo resultante (<Total> o equivalente)
' docObj - nodo del documento que se está comprobando
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
' suma de los datos de la tabla
    sum = 0
For i = 0 To costItems.Count - 1
        curCost = costItems.Item(i).Value
        curNum = numItems.Item(i).Value
        sum = sum + curNum * curCost
Next
   ' precisión de la comparación: resultado redondeado al segundo decimal
    result = resultField.Value
If (Round(result, 2) = Round(sum, 2)) Then
        docObj.CheckSucceeded = True
Else
        docObj.CheckSucceeded = False
docObj.ErrorMessage = "Los datos de la tabla no coinciden con el valor resultante"
        resultField.Suggest sum
   End If
Exit Sub
err_h:
docObj.ErrorMessage = Err.Description
    docObj.CheckSucceeded = False
End Sub
El código de regla que se muestra a continuación comprueba si el valor del campo coincide con alguno de los valores de la lista. Si no es así, aparece un indicador de error de regla y el campo recibe una lista de valores sugeridos. Según el resultado de la comprobación, el campo se marca como reconocido con certeza o con incertidumbre.
[VBScript]
'recordar el valor del campo
Dim fieldValue
fieldValue = me.Field("Field6").Value
'crear una lista de valores para la comprobación
Dim list(5)
dim i
for i = 0 to 4
    list(i) = "2" & i
next
dim success
success = false
'comprobar si el valor del campo coincide con los valores de la lista
for i = 0 to 4
if list(i) = fieldValue Then
        success = true
        exit for
end if
next
'según el resultado de la comprobación, establecer el estado de certeza correspondiente para el campo
me.Field("Field6").IsVerified = success
'rellenar la lista de sugerencias para el campo; una sugerencia puede ser cualquiera de los
'valores adecuados
if success = false then
    for i = 0 to 4
me.Field("Field6").Suggest( list(i) )
    next
end if
'mostrar un indicador de error
me.CheckSucceeded = success
[JScript]
// recordar el valor del campo
var fieldValue = Field("Field6").Value;
// crear una lista de valores para la comprobación
var list = new Array(5);
for( i = 0; i < 5; i++ ) {
    list[i] = "2" + i
}
var success = false;
// comprobar si el valor del campo coincide con los valores de la lista
for( i = 0; i < 5; i++ ) {
if( list[i] == fieldValue ) {
        success = true;
        break;
}
}
// según el resultado de la comprobación, establecer el estado de certeza correspondiente para el campo
Field("Field6").IsVerified = success;
// rellenar la lista de sugerencias para el campo; una sugerencia puede ser cualquiera de los
// valores adecuados
if( !success ) {
for( i = 0; i < 5; i++ ) {
        Field("Field6").Suggest( list[i] );
    }
}
// mostrar un indicador de error
CheckSucceeded = success;
El código de regla que se muestra a continuación comprueba si el campo comprobado ha sido emparejado.
[VBScript]
if me.Field("InvoiceNumber").IsMatched then
 me.CheckSucceeded = true
else
 me.CheckSucceeded = false
 me.ErrorMessage = "Field InvoiceNumber is not matched"
end if
[JScript]
if( Field("InvoiceNumber ").IsMatched ) {
 CheckSucceeded = true;
} else {
CheckSucceeded = false;
 ErrorMessage = "Field InvoiceNumber is not matched";
}
El código de regla que se muestra a continuación comprueba si la marca de verificación está seleccionada o no.
[VBScript]
if me.Field("Page status").Value then
    me.CheckSucceeded = true
else
    me.CheckSucceeded = false
    me.ErrorMessage = "Page status is not checked"
  me.FocusedField = me.Field(Page status)  ""
end if
[JScript]
if( Field("Page status").Value ) {
    CheckSucceeded = true;
} else {
CheckSucceeded = false;
    ErrorMessage = "Page status is not checked";
    FocusedField = Field("Page status");
}
El código de regla que se proporciona a continuación recorre todas las marcas de verificación del grupo y, si no hay ninguna seleccionada, selecciona la primera. La regla está escrita para el nivel del grupo de marcas de verificación. Todas las marcas de verificación del grupo se han agregado a la lista de campos incluidos en la regla. El propio grupo se ha excluido de la lista. Para la marca de verificación predeterminada (la primera), se ha deshabilitado la flag ReadOnly. Si no hay marcas de verificación en el grupo, se habilita un indicador de error de regla.Este código de ejemplo recorre todos los campos incluidos en la regla. Como en el código no se especifican nombres de campos, puede utilizarse para cualquier grupo de marcas de verificación.
[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;
}
El código de regla que se proporciona a continuación comprueba el número de caracteres dudosos en el campo y lo borra si ese número es mayor o igual que tres. Este es un script de autocorrección.
[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 = ""
}
El script reemplaza ”+” por ”&” sin perder información sobre las regiones ni los indicadores de verificación. Este es un script de autocorrección.
[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
Comprueba si el número de documentos especificado en la página de control coincide con el inventario del lote y con el número de documentos realmente procesados. Si los valores no coinciden, se devuelve un error.
[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 +"!" ;
}
Este script cuenta el número de páginas en una sección de conjunto de documentos y genera un error si el conjunto contiene un elemento de tipo desconocido.
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();
El script analiza la dirección en los siguientes componentes: código postal, país, ciudad y calle. El script se ejecuta para una parte del campo de origen.
[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") );
}
//-------------------------------------