デバッグのヒント

演算とスクリプトをデバッグするときは、次のヒントを参考にしてください。

サンプルデータ

フォームのプロパティダイアログボックスでプレビューデータファイルを指定します。プレビューデータファイルを指定すると、最終的な PDF にデータが保存されません。

マスターページ

マスターページをデバッグするには、マスターページごとに異なるオブジェクトを設定して、どのマスターページが指定されているのかを判断します。

フォーム内の先頭ページ

Designer では、ルートサブフォームを調べてフォームの先頭ページを特定します。ルートサブフォームで先頭ページが特定されない場合、デフォルトでは最初のマスターページが使用されます。

差分デバッグ

フォームデザインをデバッグする場合は、最初に、問題が再現されなくなるまでフォームの各部分を削除していきます。すべてのスクリプトおよびオブジェクトのプロパティを確認した後で、問題の原因を隔離してください。サブフォームをデバッグする場合は、サブフォームを囲む色付きの太い境界線を指定するか、塗りつぶしを使用できます。色や塗りつぶしは、使用されるサブフォームとその範囲の指定に役立ちます。通常、この方法はオブジェクトの範囲を特定する場合に適しています。また、この方法では、特定の位置にオブジェクトが配置されている理由を示すことができます。

階層ビュー

フォームデザインは、階層ビューを使用して表示するとわかりやすくなります。階層内でのオブジェクトの順序は、ページ上にオブジェクトが配置されている順序を示します。オブジェクトが他のオブジェクトの下に配置されている場合は、そのオブジェクトをクリックできません。

スクリプトエラーメッセージ

Designer では、フォームをプレビューすると、レポートパレットの「ログ」タブにスクリプトエラーメッセージが表示されます。フォームデザインに FormCalc のスクリプトが含まれていて、サーバーでエラーが発生した場合は、「ログ」タブに警告が表示されます。クライアントで FormCalc のスクリプトエラーが発生した場合は、Adobe Reader または Acrobat にメッセージが表示されます。

FormCalc のスクリプトエラーは、スクリプト全体が実行されるのを防ぎます。

JavaScript のエラーは、スクリプトがエラーに到達するまで実行されます。

FormCalc の構文エラー

FormCalc の構文エラーは解決が困難な場合があります。「%2 行、%3 列のトークン '%1' 近くの構文エラーです。」が表示された場合、通常 %1 にはエラーに最も近いトークン(単語)が挿入されます。したがって、そのトークンは適切である可能性が高く、エラーに近いというだけでエラーには関係ありません。例えば、次のスクリプトでは、7008 エラー「x 行、y 列のトークン 'then' 近くの構文エラーです。」が生成されます。

var b = abc(1) 
if (b ne 1) then 
//comment 

問題は endif トークンがスクリプトに見つからない点です。最後の適切なトークンは then です(コメントはトークンと見なしません)。スクリプトの末尾に endif ステートメントを追加すると、問題が修正されます。

スクリプトオブジェクトで定義される関数

JavaScript スクリプトでスクリプトオブジェクトに定義される関数のみ呼び出すことができます。スクリプトエディターで、スクリプト言語を JavaScript に変更してください。スクリプト言語を変更しないと、Designer でスクリプトオブジェクトを解決できないことを示すメッセージが表示される場合があります。スクリプトオブジェクトで構文の問題が発生した場合にも、同じエラーが発生する可能性があります。

Web サービスの呼び出し

Web サービスの呼び出しを作成する場合は、postExecute イベントを使用して、返された内容および Web サービスからエラーメッセージが発行されたかどうかを確認します。

長い SOM 式

長いマルチレイヤーの SOM 式を入力するときは、Ctrl キーを押してキャンバス上のオブジェクトをクリックします。このコマンドにより、オブジェクトの SOM 式がスクリプトに挿入されます。SOM 式はスクリプトをホストするオブジェクトに対して相対的になります。絶対的な SOM を挿入するには、Ctrl + Shift キーを押してオブジェクトをクリックします。これらのコマンドは、階層ビューではなくデザインビューでオブジェクトをクリックするときに有効です。

SOM 式のテスト

長い SOM 式が失敗した場合は、式のルートに戻って、問題に到達するまで各ドットおよび className をテストします。例えば、ルートから始めて a.b.c.d をテストします。

  • console.println(a.className)

  • console.println(a.b.className)

  • console.println(a.b.c.className)

  • console.println(a.b.c.d.className)

スクリプトオブジェクトを使用したフォームデザインのデバッグ

フラグメントなどのスクリプトオブジェクトを使用すると、フォームデザインのデバッグに役立ちます。

  • ノードの下のノード階層をダンプアウトします。

  • ノードのプロパティまたは属性の値を出力します。

  • ノードにプロパティまたは属性が指定されているかどうかを出力します。

  • ノードの SOM 式を出力します。

  • 特定のノードの xml src をダンプアウトします。

いくつかのデバッグ関数を含むスクリプトオブジェクトの例を次に示します。

<script contentType="application/x-javascript" name="XFADEBUG"> 
//This script object provides several tracing functions to help debug a form design  
//Dump out node hierarchy to console.println() 
function printNode(node) {... } 
//Dump out SOM expression to console.println() function printSOM(node) {... } 
//Dump out property or attribute value function printValue(node, attrOrPropertyName) {...} 
function printXMLSource(node) { ....} 
function printHasPropertySpecified(node, prop) {...}\\ 
</script>

フォームの構築時に回避すべき点

  • xfa.layout.relayout().docReady イベントで呼び出すと、レイアウトの準備が完了するたびに docReady イベントがトリガーされるので問題が発生します。

  • 固定コンテナ内にフローコンテナを配置すると、改ページ、重なり合うオブジェクトおよび繰り返されるサブフォームに問題が発生します。ルートサブフォームはフローコンテナです。これを利用して、レイアウトの完了後にページのサブフォームに含めるを解除し、ルートサブフォーム内にフローコンテナを配置します。別の方法として、ページのサブフォームのフローを「フロー」に設定します。

  • 空白ページの問題(Acrobat 7.1 以前)。デザイン時に、サブフォームがコンテンツ領域の境界内に収まらない場合は、空白のページが表示されます。空白のページの問題を修正するには、サブフォームのサイズを変更するか、改ページを許可します。ユーザーが Acrobat 7.1 以前を使用している場合は、2 番目のレベルのサブフォームが別のページに表示されます。