【SAP知識】クエリの作成方法について解説(Tr:SQ01、SQ02、SQ03)

SAP 技術情報・その他

SAPにおけるクエリとは、複数のデータベーステーブルの結合を指定するだけで、簡易的にレポート(データ検索、リスト表示)処理を作ることができる標準機能のことだ。

複雑なデータ加工を必要としないリスト表示機能を作りたい」といった要件が出た場合、一からアドオンを作るより、クエリ作成機能を使って実現した方が、遥かに簡便に要件を満たすことができる

今回はクエリの作成方法について解説する。

はじめに:クエリを使うと何が実現できるのか

「標準トランザクションでしっくりくるものが無いが、テーブルを2,3個閲覧できればそれで事足りる程度のデータ検索」という、さほど複雑ではない一覧化機能の要件が出た時には、クエリを使うのが適している。

例えば「品目マスタを一覧検索する機能がほしい」という要件であれば、テーブルとしてはMARA、MARC、MBEWあたりを結合し、それらが持つ項目で検索可能にしてやれば良いので、仕組み自体は非常に簡単なものとなる。

クエリ作成機能においては、テーブル(MARA、MARC、MBEW)およびテーブル間の結合条件を指定し、検索項目と一覧上に表示する項目を指定するだけで、簡単にリスト検索・表示機能を作れてしまう。
あとは作成したクエリにトランザクションを被せてユーザ開放すれば良い。
わざわざアドオンを作るまでもないので、安上がりでもある。

ユーザにテーブルへの直接的な閲覧権限(Tr:SE16N)を開放するわけにはいかないが、はっきり言ってユーザがテーブル閲覧できた方が業務効率が上がるケースというのは多々ある。
よってクエリを使って必要なテーブルだけ閲覧可能にする、という考え方は非常に有効なので、このあたりがクエリの存在意義となるだろう。

クエリの作成方法を解説

クエリ作成手順① インフォセット(Tr:SQ02)

クエリ作成のためには、まずインフォセットをTr:SQ02から登録する。
インフォセットとはまさにクエリのコアになる部分の設定で、以下のような内容を指定する。

インフォセットの設定
・表示したいデータを保持するDBテーブルの指定
・テーブル同士の結合(INNER JOINまたはLEFT OUTER JOIN)指定
・テーブルから読み込む項目
・必要に応じ追加項目の設定、および追加ロジックの設定

以下はインフォセットの設定手順の説明となる

まず標準領域かグローバル領域を選択

Tr:SQ02に入ったらまず、インフォセットを登録する前に、メニューの【関連処理 >クエリ領域】を選択し、標準領域(クライアント依存)かグローバル領域(クライアント非依存)のどちらの領域を使用するかを指定する。

本番機が単一クライアントであるなら、どちらを選んでもあまり大差ないので、深く考えずグローバル領域を選んでおいて良い。
ただ、後続設定も全て、ここで選んだ領域上に登録すること。

InfoSetの基本設定

「InfoSet」の項目に、任意のIDを入力し、登録ボタンを押す。
すると名称及びデータソースを指定するポップが現れる。

名称は任意のものを指定する。例えば「品目マスタ一覧」など。
データソースは今回は「基本テーブル使用テーブル結合」を選び、主テーブルとなるDBテーブルIDを指定する。
例えば品目マスタ一覧を作りたいのであれば、テーブルはMARAが主となる。

指定したら、Enterで続行する。

InfoSetのデータベーステーブル指定

次画面では主テーブルに対して結合を追加する対象のテーブルを指定する。
テーブル同士の結合が可視的に描画される、分かりやすい画面となっている。

たとえば品目マスタ一覧を作りたいのであれば、MARAに対し、MARCやMBEWなど、品目マスタに関連のあるテーブルで、欲しい情報を保持しているテーブルを追加していく。
テーブルはメニューの【編集 >テーブル挿入】から追加する。

共通の項目に対して、システムは自動的に内部結合(INNER JOIN)を行ってくれるが、必要に応じて結合を外したり、左外部結合(LEFT OUTER JOIN)に変更することができる。
また、手動で項目同士の結合を操作することもでき、結合したい項目から結合したい項目へクリック&ドラッグすることで、自動で結合されなかった項目同士でも結合することができる。

・INNER JOIN
結合先に対応するデータがあれば結合して表示する。
たとえばMARAとMARCを結合する際、プラント拡張していなければMARCにデータが無いので、その品目は結果一覧に表示されない。
・LEFT OUTER JOIN
左側のテーブルを主として、結合先のテーブルに対応するデータがあってもなくともデータを表示する。
一例として、MARAとMARCを結合する際、外部結合ならプラント拡張していない品目でも結果一覧に表示される。

項目グループの更新

テーブルと結合条件の設定が終わったら、「インフォセット更新」のボタンを押す。
すると項目グループの選択肢が表示される。
これはクエリ内で採用されるDB項目を指定するもので、「全テーブル項目を含める」を選ぶと全項目が、「キー項目を含める」を選ぶとキー項目のみが読み込まれる。

クエリ内で必要な項目なのであれば、ここで項目グループに登録しておく必要がある。

追加項目の更新

クエリには任意の追加項目を設定することができる。
指定したテーブルに存在しない項目でも追加することができる。

「補足」ボタンを押し、補足タブの「新規ボタン」を押す。
ポップアップで名称を指定し「追加項目」を選択、続行する。
すると次の画面で項目の書式を選択する画面が現れる。
項目のテキスト名称や、既存項目を参照して項目型を定義することができる(LIKE参照)。
この手順と同様に、構造なども追加定義することができる。

また、この追加した項目に対する追加コーディング(レコードごとに何らかの値取得を行ったり、計算処理を行ったりなど)を行うことも可能で、「補足」タブ内の「追加コーディング」ボタンから実施できるが、項目ごとにロジックが実行されてしまうので、処理時間が増大するケースの考慮が必要だ。

追加コーディング

「コード」タブでは、任意のコードを記述できる。
Coding Sectionでコードの挿入箇所を選んでから記述する。
例えば各々のレコード処理中に追加コードを入れたいのであれば「5 レコード処理」を選んでから記述する。

ここでは複雑なロジックによりレコード除外したい場合などや、一覧結果を追加操作したい場合に、ロジック追加によりそれら要件を実現する。
ある程度柔軟に記述はできるが、記述しすぎると「やっぱりアドオンにした方が良かったのでは」となるので、要件の複雑さに応じてバランスを考える。

保存と生成

インフォセットの設定が完了したら、保存ボタンでインフォセットを保存する。
保存後、「生成」ボタンを押すことでインフォセットを有効化しておく。

クエリ作成手順② ユーザグループ(Tr:SQ03)

インフォセットを作成したら、次にユーザグループを登録する。
Tr:SQ03より登録を行い、インフォセットの割当を行う。

クエリ領域はインフォセットを登録した領域(今回はグローバル領域)と同じ場所に登録すること。
ユーザグループを登録し、「ユーザとインフォセットの割当」ボタンをクリックすることで、インフォセットとユーザグループの紐づけを行うことができる。

クエリ作成手順③ クエリ画面制御(Tr:SQ01)

次にTr:SQ01から、クエリのIDを定義し、画面制御(第一画面の検索項目や表示結果、バリアントなど)を定義する。

ユーザグループ読み込み

Tr:SQ01の画面では、まず正しいユーザグループが読み込まれているかを確認する必要がある。
上述したユーザグループと違うものが表示されている場合、【関連処理 >ユーザグループ】から、読み込みたいユーザグループをいったん入力し、「戻る」ボタンで戻ってくることで、ユーザグループが切り替わる。

また、クエリ領域もユーザグループと同じ領域になっているかを確認する。(今回はグローバル領域)
領域が誤っているとユーザグループが切り替わらない。

クエリIDを登録

次に、クエリIDを指定し、登録ボタンを押す。
すると、クエリに割り当てたいインフォセットの一覧が表示されるので、いずれかを選ぶ。
クエリの表題や書式、出力形式を指定する画面に遷移するので、任意の値を入力・選択していく。

画面項目の制御

次画面ボタンを押すと、項目グループおよび項目の選択を行う。
ここでは、一覧の表示対象となる項目、および選択画面にて検索に使用可能な項目をセットする。

InfoSetクエリ

「InfoSetクエリ」ボタンから、実際に選択画面の項目及び出力項目として使う項目にチェックを入れる。これで保存すればクエリの設定自体は完了となり、実行可能なクエリとして登録され、検索及び結果出力が可能となる。

クエリをユーザが使用可能にする

一般ユーザにもクエリを使用可能とするにはいくつかの方法がある。
Tr:SQ01から実行可能なので、開放してしまうのも一つの手段ではあるが、ここはトランザクションを割り当てた上で開放したい。

プログラムIDはクエリの実行画面で上部メニューの【システム >ステータス】を選べば「プログラム」の項目に生成されたPGM IDが表示されている。

このIDを拾い、トランザクション登録(Tr:SE91)にてトランザクションIDを割り当てれば良い。
ユーザロールへのトランザクション権限やメニューロールへの追加も忘れずに実施する。

ブログランキング・にほんブログ村へにほんブログ村

タイトルとURLをコピーしました