メインコンテンツへスキップ
この例では、テーブルデータのチェックを示します。このルールは、テーブルデータが集計結果のfieldの値と一致するかどうかを確認します。テーブルには、特定の商品について価格と数量のカラムがあります。このルールは、テーブルと集計結果のfieldを含むセクションレベルで記述されています。
[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 );

ActiveX コンポーネントのコード

ここで示すコードは、上記のスクリプトで使用される AutomationRule プロジェクトの CheckDoc クラスのコードです。
Option Explicit
' テーブルデータが集計結果と一致するかどうかを確認します
' column1 - 価格カラム
' column2 - 数量カラム
' resultField - 集計結果のfield(<Total> など)
' docObj - チェック対象のドキュメントノード
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
' テーブルデータを合計
    sum = 0
For i = 0 To costItems.Count - 1
        curCost = costItems.Item(i).Value
        curNum = numItems.Item(i).Value
        sum = sum + curNum * curCost
Next
   ' 小数点以下第2位で丸めた値同士を比較
    result = resultField.Value
If (Round(result, 2) = Round(sum, 2)) Then
        docObj.CheckSucceeded = True
Else
        docObj.CheckSucceeded = False
docObj.ErrorMessage = "テーブルデータが集計結果の値と一致しません"
        resultField.Suggest sum
   End If
Exit Sub
err_h:
docObj.ErrorMessage = Err.Description
    docObj.CheckSucceeded = False
End Sub
以下のルールコードは、field の値がリスト内のいずれかの値に一致するかどうかを確認します。一致しない場合は、rule error フラグが表示され、その field には推奨値のリストが設定されます。チェック結果に応じて、その field は確実または不確実に認識されたものとしてマークされます。
[VBScript]
'field の値を保持
Dim fieldValue
fieldValue = me.Field("Field6").Value
'チェック用の値のリストを作成
Dim list(5)
dim i
for i = 0 to 4
    list(i) = "2" & i
next
dim success
success = false
'field の値がリスト内の値に一致するかどうかを確認
for i = 0 to 4
if list(i) = fieldValue Then
        success = true
        exit for
end if
next
'チェック結果に応じて、field の確実性ステータスを設定
me.Field("Field6").IsVerified = success
'field の候補リストを設定。候補には
'適切な値を使用できます
if success = false then
    for i = 0 to 4
me.Field("Field6").Suggest( list(i) )
    next
end if
'エラーフラグを設定
me.CheckSucceeded = success
[JScript]
// field の値を保持
var fieldValue = Field("Field6").Value;
// チェック用の値のリストを作成
var list = new Array(5);
for( i = 0; i < 5; i++ ) {
    list[i] = "2" + i
}
var success = false;
// field の値がリスト内の値に一致するかどうかを確認
for( i = 0; i < 5; i++ ) {
if( list[i] == fieldValue ) {
        success = true;
        break;
}
}
// チェック結果に応じて、field の確実性ステータスを設定
Field("Field6").IsVerified = success;
// field の候補リストを設定。候補には
// 適切な値を使用できます
if( !success ) {
for( i = 0; i < 5; i++ ) {
        Field("Field6").Suggest( list[i] );
    }
}
// エラーフラグを設定
CheckSucceeded = success;
以下のルールコードは、チェック対象の field が一致しているかどうかを確認します。
[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";
}
以下のルールコードは、チェックマーク が選択されているかどうかを確認します
[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");
}
以下のルールコードは、グループ内のすべてのチェックマークを順に確認し、どれも選択されていない場合は最初のチェックマークを選択します。このルールはチェックマークグループレベルで記述されています。グループ内のすべてのチェックマークは、ルールに含まれるfieldのリストに追加されています。一方、グループ自体はリストから除外されています。既定のチェックマーク (最初のもの) では、ReadOnlyフラグが無効になっています。グループ内にチェックマークがない場合は、rule errorフラグが有効になります。このコード例は、ルールに含まれるすべてのfieldを順に処理します。コード内でfield名を指定していないため、このコードは任意のチェックマークグループで使用できます。
[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;
}
以下のルールコードは、field内の不確かな文字数を確認し、その数が3文字以上の場合はfieldをクリアします。これは自動補正スクリプトです。
[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 = ""
}
このスクリプトは、RegionおよびVerificationフラグの情報を失うことなく、「+」を「&」に置き換えます。これは自動補正スクリプトです。
[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
コントロールページで指定されたドキュメント数が、バッチ内のインベントリおよび実際に処理されたドキュメント数と一致しているかどうかを確認します。数が一致しない場合は、エラーが返されます。
[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 +"!" ;
}
このスクリプトは、ドキュメントセットのセクション内のページ数をカウントし、そのセットに不明な型の要素が含まれている場合はエラーを発生させます。
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();
このスクリプトは、住所を次の構成要素に分解します: 郵便番号、国、都市、住所。このスクリプトは、ソース field の一部に対して呼び出されます。
[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") );
}
//-------------------------------------