カスタム レポートのデザイン

この記事には、以下のトピックが含まれています。
casm173
この記事には、以下のトピックが含まれています。
カスタム レポートをデザインするには、以下についての基本的知識が必要です。
  • SQLクエリの作成。
  • プログラミング(特にC言語)。
  • レポート テンプレート プログラムの実行前に実行する必要のある、特別なプログラムまたはスクリプト ファイルの作成。 たとえば、WHERE節の条件などの引数を入力するように、ユーザに要求するプログラムを作成する必要があります。
カスタム レポートを作成する前に、必要なレポートがすでに提供されていないかどうかを確認してください。 CA SDM は、豊富な種類の Crystal および Microsoft Access レポートに加えて、ユーザによるレポートの実行を可能にするこれらの製品のランタイム バージョンも備えています。
レポートに含める情報の選択
カスタマイズ レポートで使用する CA SDM データベース データの選択については、「CA Service Desk Manager 参照コマンド」を参照してください。 データベース テーブル、フィールド、説明、その他のデータベース情報が記載されています。
レポート テンプレートの作成方法
レポート テンプレートとは、CA SDM レポート プログラムで実行すると特定のデザインのレポートを生成するファイルです。 レポート テンプレートには、データのフェッチ方法、計算方法、および印刷方法を定義する変数式、関数、およびステートメントが含まれています。
レポート テンプレートを作成するには、以下のタイプのレポート ステートメントを記述したファイルを作成します。
  • ブロック ステートメント
    データがフェッチされる CA SDM データベース テーブル、およびフェッチされたデータに対して実行するアクションを定義します。
  • レイアウト ステートメント
    データ変数およびリテラル テキストの、レポート出力への表示方法を定義します。
すべての .rpt ファイルは、新しいディレクトリ(UNIX の場合は $NX_ROOT/site/mods/rpt、Windows の場合は
installation-directory
\site\mods\rpt)に保存してください。 このディレクトリにより、CA SDM の最新リリースへのアップグレード時にファイルが保持されます。
ブロック ステートメント
ブロック ステートメントは、レポート テンプレートにフレームワークを提供します。 操作対象のデータを定義し、レポートの実行を制御するステートメントです。 ブロック ステートメントの先頭に付ける名前は、レポート テンプレート内で固有であることが必要です。 このステートメントには、以下の2つのセクションがあります。
  • データ クエリ セクション
    データベースからフェッチされるデータを定義する、SQL の SELECT 節、WHERE 節、および SORT 節が含まれます。
  • 出力プログラム セクション
    フェッチされたデータに対して実行するアクションを定義します。 ここには、変数宣言、関数、および条件付きレポートの作成に使用できるその他のブロック ステートメント(ネストされたステートメントなど)が含まれます。 データをASCIIテキストとしてフォーマットして印刷するレイアウト ステートメントを含めることもできます。
ブロック ステートメントの簡単な構文例を以下に示します。これは、この2つのセクション間の関係を表しています。
BLOCK blockname ("SELECT clause", "WHERE clause") SORT clause {output program statements}
参照セクションのBLOCKに関する説明には、詳細な構文例と各節およびパラメータの説明が記載されています。
レポート テンプレートのレイアウト ステートメント
レイアウト ステートメントは、変数およびリテラル テキストのレポート出力での形式を定義します。
  • PAGE HEADERステートメントとPAGE FOOTERステートメントを使用すると、各レポート ページの上端と下端に情報を表示できます。
  • HEADER、HEADER2、FOOTER、およびPRINTの各ステートメントを、親BLOCKステートメントのかっこで囲んだセクションにネストすると、レポート出力に含まれるさまざまな
    レポート セクション
    のタイトルおよび集計を作成できます。
    ネストするときは、レイアウト ステートメントで使用するかっこと、親 BLOCK ステートメント内にネストするステートメントを囲むかっこを混同しないように注意してください。
  • リテラル テキストを組み込んでラベルや罫線文字を作成し、レポートのデザイン効果を高めることができます。
レイアウト ステートメントは以下のとおりです。
  • PAGE HEADER
    各レポート ページの上端に情報を表示します。 これはBLOCKステートメントの外側に置かれます。
  • PAGE FOOTER
    各レポート ページの下端に情報を表示します。 これはBLOCKステートメントの外側に置かれます。
  • HEADER
    各レポート セクションの上端に情報を表示します。 これはBLOCKステートメントの内側に置かれます。
  • HEADER2
    レポート セクションが複数ページにまたがる場合は、そのレポート セクションの後続の各ページの上端にもヘッダ情報を表示します。 これはBLOCKステートメントの内側に置かれます。
  • FOOTER
    各レポート セクションの下端に情報を表示します。 これはBLOCKステートメントの内側に置かれます。
  • PRINT
    レポート セクションにデータを表示します。 これはBLOCKステートメントの内側に置かれます。
以下の事前定義済み変数をレイアウト ステートメントで使用することもできます。
  • CTは現在の時刻を印刷します。
  • CDは現在の日付を印刷します。
  • PGはページ番号を印刷します。
  • データ フィールド
    レポートを生成したときにデータで置き換えられるような、レイアウト ステートメント内の変数です。 レポート テンプレートにフィールドを含める場合は、以下のガイドラインに従ってください。
    • データ フィールドは角かっこ([ ])で囲みます。
    • フィールドの角かっこは、各出力行でのフィールドの印刷スペースを定義します。 このスペースは、角かっこで区切られた文字数(角かっこ自体も含む)です。 変数の出力が印刷スペースよりも長い場合、その出力は切り捨てられます。 フィールドに充分な印刷スペースを確保するために、変数名と終了角かっこの間にスペースを追加できます。 たとえば、以下のように変数名の後にスペースを入れると、長い名前の連絡先を確実に表示できます。
      [contact ]
    • 出力が1行の場合は、終了山かっこ(>)を使用してフィールドを閉じることができます。 こうすると、印刷スペースが右余白まで拡大されます。 たとえば、終了山かっこ(>)をHEADERステートメントで使用すると、現在の日付が切り捨てられずに印刷できます。
      [CD >
      フィールドが 2 行以上で変数が MULTILINE として設定されている場合、終了山かっこ(>)は終了角かっこ(])とまったく同じ働きをします。 MULTILINE変数の印刷ステートメントが終了山かっこ(>)で閉じられている場合、開始角括弧([)と終了山かっこ(>)で定義されているフィールド内に収まるように、空白で文字が折り返されます。 また、変数が MULTILINE でない場合は、終了山かっこ(>)を指定すると、すべてのデータが長さとは無関係に現在の行に表示されます。
    • レイアウト ステートメント内のフィールドは、以前に定義された変数や列名を参照できます。
    • 別のブロック ステートメント内の変数や列名を参照するには、以下の構文を使用します。
    blockname::column | variable-name
  • リテラル テキスト
    リテラル テキストを使用すると、レポートに補足情報を表示できます。 リテラル テキストは、テンプレートで指定したとおりにレポート出力に表示されます。 リテラル テキストをレイアウト ステートメントに含めるには、開始大かっこ({)と終了大かっこ(})の間の任意の行にリテラル テキストを置きます。 引用符や角かっこの中に置かないでください。
    この例では、 レポート プログラムで、「ACME Company」および「Page:」がリテラル テキストとして解釈されます。
    PAGE HEADER { ACME Company Page: [PG] }
レポート テンプレートの変数式
レポート出力に表示する値を、各変数に割り当てることができます。 変数式を使用すると、以下のことが可能です。
  • CA SDM データを加工する
  • 関数を使用して、フェッチした値を計算する。
以下の例では、[変更要求]ウィンドウの[chg_desc]フィールドの内容を参照する
desc
という変数を作成します。 MULTILINEフラグを設定することで、この変数全体を複数行にわたって印刷できます。
desc = description MULTILINE;
以下の例では、説明を印刷します。 出力は、角かっこで定義された長さになります。 長い説明を表示するには、角かっこ内のスペースの数を増やしてください。
PRINT { [desc ] }
例: レポート テンプレート
以下のAffected Contact Reportテンプレートは、レポート テンプレートの作成方法を示します。 このテンプレートは、同一の影響を受ける連絡先を持つ、オープンな変更要求を列挙したレポートを生成します。
PAGE HEADER { As Of: [CD> [CT> } PAGE FOOTER { Page: [PG> } BLOCK chg ("SELECT \ chg_ref_num, description, priority, \ status, category, assignee \ FROM Change_Request", "WHERE #Change_Request.status = 'OP' \ AND #Change_Request.requestor = #ca_contact.id \ AND #ca_contact.last_name = ? \ AND #ca_contact.first_name = ? \ AND #ca_contact.middle_name = ? " , $1, $2, $3) { BLOCK st ("SELECT sym FROM Change_Status", "WHERE code = ? ", chg::status) {} BLOCK (strlen(category)) cat ("SELECT sym FROM Change_Category", "WHERE code = ? ", chg::category) {} HEADER { OPEN CHANGE ORDERS WITH SAME REQUESTOR/FROM CONTACT CHANGE ORDER Summary Pri Status Category Assignee } HEADER2 { CHANGE ORDER Summary Pri Status Category Assignee -------------------------------------------------------------------------- } num = chg_ref_num; desc = description MULTILINE; pr = deref (priority); stat = st::sym; catgry = cat::sym; asgn = deref (assignee); PRINT { [num ] [desc ][pr ] [stat ] [catgry ] [asgn ] } }
  • ページ ヘッダ
    レポートの各ページ上端に印刷する内容を示します。 CDおよびCTは、現在の日付と時刻を示す事前定義済みの変数で、 各ページ上端のヘッダに表示されます。 これらの各フィールドは、フィールドを右余白まで拡張できる山かっこで終わります。 「作成日:」はフィールドの外側にあり、開始大かっこの後の同じ行内にあるため、レポート出力にはリテラル テキストとして表示されます。
    PAGE HEADER { As Of: [CD> [CT> }
  • ページ フッタ
    ページ番号がリテラル テキスト「Page:」と共に表示されます。
    PAGE FOOTER { Page: [PG> }
    PAGE HEADER ステートメントと PAGE FOOTER ステートメントはグローバルなヘッダおよびフッタを生成するため、BLOCK ステートメントには含まれません。
  • レポート セクション
    メインの BLOCK ステートメントと、そこにネストされたステートメントのレポート セクションが作成されます。 通常は、レポート セクションはレポート内の唯一のデータ部分ですが、このレポートにはレポート セクションが1つしかありません。 このブロックの一意の名前はchgです。
    SELECT節は、WHERE節で指定した条件が満たされる場合に限り、レポートの3つのFROMテーブルについて、データに含める列を選択します。
    WHERE節の最後の3つのAND式には疑問符が含まれています。これらの疑問符は、それぞれ$1、$2、および$3の各引数の値を取る引数プレースホルダとしての役割を果たします。 つまり、$1 は ca_contact.last_name、$2 は ca_contact.first_name、および $3 は ca_contact.middle_name の値になります。 $1、$2、および $3 の各引数は、コマンド ライン引数から値を取得します。
    BLOCK chg ("SELECT \ ...", "WHERE \ ...\ AND #ca_contact.last_name = ? \ AND #ca_contact.first_name = ? \ AND #ca_contact.middle_name = ? ", $1, $2, $3)
  • レポート セクションのヘッダ
    BLOCK ステートメントの出力プログラム セクションが開始大かっこから始まるように指定します。このステートメントは、SELECT 節および WHERE 節でフェッチされたデータに対して行う処理を指示しています。 この例では、このレポート セクションにのみ適用されるHEADERステートメントとHEADER2ステートメントがネストされています。 HEADER2は、レポート出力が複数のページになる場合にのみ印刷されます。
    { ... HEADER { OPEN CHANGE ORDERS WITH SAME REQUESTOR/FROM CONTACT CHANGE ORDER Summary Pri Status Category Assignee } HEADER2 { CHANGE ORDER Summary Pri Status Category Assignee -------------------------------------------------------------------- }
  • 変数の割り当て
    SELECT 節で指定されたデータに影響する変数式であることを示します。 これらの変数式から、列の値や式の結果に変数が割り当てられます。 これらの変数は、後続のPRINTステートメント内のフィールドと一致します。
    desc
    変数にMULTILINEフラグが指定されているため、フィールドが切り捨てられることなく、複数の行に印刷または表示されます。 deref関数は、参照される列に含まれる文字列式を返すために使用します。
    num = chg_ref_num; desc = description MULTILINE; pr = deref (priority); stat = st::sym; catgry = cat::sym; asgn = deref (assignee);
  • 印刷
    印刷されるフィールドが含まれます。 このステートメントに行のリテラル テキストを含め、レポートを見やすくすることもできます。 最後の終了大かっこは、BLOCKステートメントの出力プログラム セクションの開始大かっこに対応します。
    PRINT { [num ] [desc ] [pr] [stat] [catgry] [asgn ] } }