【ABAP CDS】BASIC VIEW その1
- 項目名の定義
- JOIN
- キー項目設定
気づいた点/教えていただいた点
Annotation(アノテーション)について 「AbapCatalog」はABAPで使用する際の設定を記述できる。 よく使うアノテーションは生成時に自動設定される。 CTRL+SPACEを押下すれば、アノテーションの名称の途中で入力補足したり、アノテーションで使用する値を表示させ選ぶことができる。 アノテーションを記述する際は「@」を先頭において記述する。
アノテーション | 内容 |
---|---|
AbapCatalog. buffering.status |
CDSビューでのテーブルバッファの有効化 |
AbapCatalog. buffering.type |
CDSビューでのテーブルバッファタイプ |
AbapCatalog. buffering.numberOfKeyFields |
ジェネリックエリアのテーブルバッファにおけるキー要素数 |
AbapCatalog. compiler.compareFilter |
Filterの評価方法(?) |
AbapCatalog. preserveKey |
項目の前にkeyとつけることでキー項目を指定 |
AbapCatalog. sqlViewName |
ABAPディクショナリに登録される名称|名称を指定 |
AbapCatalog. viewEnhancementCategory[ ] |
CDS VIEW拡張を使ってどのように拡張するか。 []内に複数の値をカンマ区切りで指定可能 |
AccessControl. authorizationCheck |
ABAPから呼ばれた場合の権限チェック |
VDM.viewType | CDS VIEWの種類 |
@AbapCatalog.sqlViewName: 'Z0203_V_0017' @AbapCatalog.compiler.compareFilter: false @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'ORIGINAL BASIC VIEW for 0017' @VDM.viewType: #BASIC define view Z0203_C_0017( // 項目名定義 test_matnr, test_werks, test_lgort, test_matkl, test_mtart, test_labst ) // 抽出処理 as select from mara join marc on mara.matnr = marc.matnr join mard on marc.matnr = mard.matnr and marc.werks = mard.werks { key mara.matnr, key marc.werks, key mard.lgort, mara.matkl, mara.mtart, mard.labst }
【ABAP】7.4で拡張された内部テーブルの条件指定やインデックス指定をSELECTのWHEREで使用する USING INTERNAL TABLE SELECTION ENHANCED FROM ABAP 7.4 IN SELECT WHERE CONDITIONS
SELECT文で、7.4で拡張された内部テーブルの値の取り方や インデックス指定を使って検索条件を作ってみました。 条件を満たすデータが複数件あった場合はどうなる・・・?
TYPES: BEGIN OF typ_str, field1 TYPE char10, field2 TYPE auart, field3 TYPE char10, END OF typ_str, ttyp_str TYPE TABLE OF typ_str WITH KEY field1. DATA: str TYPE ttyp_str. DATA: var1 TYPE char10 VALUE 'VARIABLES'. str = VALUE #( ( field1 = 10 field2 = 'OR' field3 = 30 ) ( field1 = 20 field2 = 'OR1' field3 = 60 ) ( field1 = 30 field2 = 'ZOR' field3 = 90 ) ). DATA(read_line) = lines( str ). "データ件数を取得 SELECT FROM vbak AS t1 FIELDS 'LITERAL' AS lit, @var1 AS var1, auart, vbeln, erdat, @( VALUE vbak-erdat( ) ) AS erdat2, "初期値 erzet, @( VALUE vbak-erzet( ) ) AS erzet2 "初期値 * where auart = @( value vbak-auart( str[ field1 = 10 ]-field2 ) ) "field1=10の条件を満たすfield2値 WHERE auart = @( VALUE vbak-auart( str[ read_line ]-field2 ) ) "3件目のfield2の値 INTO TABLE @DATA(results). cl_demo_output=>display( results ).
【設計・開発】基本設計書の処理想定時間、記載は必要でしょうか?
こんにちは。 基本設計書に、「処理想定時間」という項目がありますが、あれって必要なのでしょうか? 処理時間を机上で計測するなんて困難ですよね。
ある現場で経験したことなのですが、 「ちょっと遅そう」とわかっていた処理だったので、オンライン処理の「処理想定時間」に 「1件あたり最大10秒程度」と盛って記述して顧客にレビューで見せたら、 「こんなの時間かかりすぎるよ、申し訳ないけど業務まるでわかってないよ」と呆れられたことがあります。 まあ確かにちょっと盛りすぎたなと(笑)
そこで、次回以降同様の指摘を受けないように、現場のリーダーに確認を取りました。
私「先の一件があったので対策を考えたいのですが、実際の処理時間なんてわかりませんよね。 だから1件1秒とでも書いておけばよいでしょうか?」。
リーダー「極端に早い数字も入れないでほしいんですよ」
私「どうしてですか?」
リーダー「実際に作成されたプログラムでその処理時間を超過した場合、 パフォーマンスチューニング対象になってしまいますから」
・・・
上記のような場合だと、「ではどうすればいいのか」となってしまいますよね。 別の案件では、「オンライン時は1件あたりの処理時間を3秒以内とすることを前提とする」 という決めごとがあったのでので常に「3秒以内」と記載していたのですが、 これでは、何のために設計書に記述するのか・・・
処理速度の取り決めはプロジェクト内の規約等で決めておいて、 各設計書に処理時間を記載しない方が良いのかなと思います。
【ABAP】特定項目が変更されていたら変更履歴情報を表示 DISPLAY CHANGE HISTORY INFO WHEN SPECIFIC FIELDS ARE CHANGED
こんにちは。
販売伝票明細の拒否理由(VBAP-ABGRU)が変更されている場合に 変更履歴内容をLEFT OUTER JOINで取得するロジックです。 テーブルキー(TABKEY)のON条件として、 CONCATでクライアント・伝票番号・明細番号を文字列結合しているところに 注目してください。
SELECT FROM VBAK AS T1 INNER join vbap as t2 on t1~vbeln = t2~vbeln left outer join cdpos as t3 on t3~objectclas = 'VERKBELEG' and concat( @sy-mandt, concat( t1~vbeln, t2~posnr ) ) = t3~TABKEY and t3~FNAME = 'ABGRU' left outer join cdhdr as t4 on t3~OBJECTCLAS = t4~OBJECTCLAS and t1~vbeln = t4~OBJECTID and t3~CHANGENR = t4~CHANGENR fields t1~vbeln, t2~posnr, t2~abgru, t3~objectclas, t3~fname, t4~USERNAME, concat_with_space( t4~UDATE, t4~UTIME, 1 ) as udatetime into table @data(results). cl_demo_output=>display( results ).