トレースオプションが有効な場合に、深くネストしたIFステートメントで発生するジェネレーションエラー

Document created by Miharu_Toyama Employee on Jul 15, 2015
Version 1Show Document
  • View in full screen mode

文書番号: JTEC001783

製品名: CA Gen

バージョン:CA Gen Diagram Trace: r7.6, r8.0

OS: 


◆ 概要

トレースが有効となっている場合、Action Diagram に深くネストした IF ステートメントがあると、分散プラットフォームに対するコード生成が、ある状況下で失敗する場合があります。ステートメントのネスト設計は最大25レベルまでに制限することを推奨します。

◆ 解決策

分散プラットフォーム向けの CA Gen コード ジェネレータは変更されており、トレース オプションが有効な状態でコードが生成された場合、コード ステートメントの長いプレフィックスは圧縮されなくなっています。これにより、ユーザは DTU 内の Action Diagram を Toolset と同様の完全に展開された状態で見ることができます。

しかし、Action Diagram コード ジェネレータの最大行長は 128 バイトです。この制限は Toolset の Action Diagram エディタには適用されないため、Action Diagram 内の深くネストした IF ステートメントは 制限の 128 を超えるコード長となり、ジェネレーション エラーを引き起こす可能性があります。

行長が128 を超えた場合、ジェネレータ コードはネストした IF ステートメントを複数ステートメントに分解します。(128 バイトのところで分解されるのではなく、最大値になる前に分解します)。しかし、ジェネレータは主に IF ステートメントのインデントで構成される行のプレフィックスは分解しません。

行全体の長さは、
プレフィックスの総計(ステートメント番号長+サブステートメント番号長+インデント長)+実際のステートメント長
となります。

例:
“[IF loc workset a="A"]” ステートメントで36レベル ネストを繰り返した場合、36 番目のステートメントの長さは、
6 (ステートメント番号長)
+ 6 (サブステートメント番号長)
+ 105 (一回のインデントに付き 3 バイトで 35 インデント)
= 117 (プレフィックス総計)
+ 22 (実際のステートメントの長さ)
= 139

総計は 139 で制限の 128 を超えていますが、プレフィックス単体の総計は 117 で 128 以下です。そのため、ジェネレータは実際のステートメントを二行に分けることができます。DTU でコード トレースを行っているときに改行されて表示されます。
ですが、ネストがこれ以上続くとプレフィックスの総計だけでも制限 128 を超えてしまうため、ジェネレータは実際のステートメントを分解できなくなり、許可された以上のメモリを割り当てようとして、ジェネレータ 失敗を引き起こします。

そのため、DTU Action Diagram ビューでの改行やジェネレータ失敗を防ぐために、IF ステートメントのネスト設計は最大 25 レベルまでに制限することを推奨します。

 

ご質問等がございましたら、恐れ入りますが弊社サポートまでご連絡ください。

この情報は米国 CA, Inc. より提供されている Technical Documentsをもとに作成したものです。原文の詳細につきましては下記内容をご覧ください。

https://support.ca.com/irj/portal/kbtech?docid=542072&searchID=TEC542072
Document ID: TEC542072

Title: Generation Error with deeply nested IF-statements when trace option is enabled

Attachments

    Outcomes