matsukawar's blog

個人的な技術ブログ。テクニカルアーキテクトを目指しています。Twitter : https://twitter.com/matsukawar

Azure DevOps TFVC(Team Foundation Version Control) 保留中の変更をワークスペースごと消したい場合の手順

Azure DevOps (旧Team Foundation Server)のTFVC(Team Foundation Version Control)にて、保留中のチェックアウトを根こそぎ消したい場合の手順を記します。

  1. スタートメニューの「開発者コマンドプロンプト」を管理者権限で実行する。
  2. 該当者のワークスペースを検索する。(WORKSPACESコマンド)
    C:\Windows\System32>tf vc workspaces /owner:DOMAIN\USER /collection:ttp://SERVER_ENDPOINT/COLLECTION_NAME
    コレクション: ttp://SERVER_ENDPOINT/COLLECTION_NAME
    ワークスペース        所有者          コンピューター       コメント ---
    WORKSPACE_NAME USER_NAME COMPUTER_NAME
  3. 内容を確認して、「Yes」を入力して、該当者のワークスペースを消す。(WORKSPACEコマンド※WORKSPACE"S" ではないです。)

    C:\Windows\System32>tf vc workspace /delete /collection:ttp://SERVER_ENDPOINT/COLLECTION_NAME WORKSPACE_NAME;DOMAIN\USER /login:ADMIN_ID,ADMIN_PW
    削除されたワークスペースは復元できません。
    サーバー 'ttp://SERVER_ENDPOINT/COLLECTION_NAME' のワークスペース 'WORKSPACE_NAME;DOMAIN\USER' は、105 の保留中の変更を含んでいます。
    ワークスペースを削除しますか? (Yes/No) Yes 

 

【Practical New ABAP : 01】2つの構造が異なる内部テーブルをマージして重複を削除する

はじめに

ABAP 7.4 にて、2つの内部テーブルをマージする必要があったのでNew ABAPで書いてみました。実践でも使えるNew ABAPの文法だと思います。(Merge two internal tables with different structures to remove duplicates)

Program

  1. Initialize variables and types

TYPES:
  BEGIN OF LINE,
    X1 TYPE I,
    X2 TYPE I,
    X3 TYPE I,
  END OF LINE,
  TYP_ITAB1 TYPE STANDARD TABLE OF LINE WITH DEFAULT KEY,


  BEGIN OF LINE2,
    X1 TYPE I,
    X2 TYPE I,
    X3 TYPE I,
    X4 TYPE C,
  END OF LINE2,
  TYP_ITAB2 TYPE STANDARD TABLE OF LINE2 WITH DEFAULT KEY,


  BEGIN OF LINE3,
    X3 TYPE I,
    X1 TYPE I,
  END OF LINE3.


DATA(ITAB1) = VALUE TYP_ITAB1(
                        ( X1 = 1 X2 = 1 X3 = 1 )
                        ( X1 = 2 X2 = 1 X3 = 2 )
                        ( X1 = 1 X2 = 2 X3 = 3 ) ).


DATA(ITAB2) = VALUE TYP_ITAB2(
                        ( X1 = 2 X2 = 6 X3 = 2 X4 = 'A' )
                        ( X1 = 3 X2 = 1 X3 = 3 X4 = 'B' )
                        ( X1 = 3 X2 = 2 X3 = 4 X4 = 'C' ) ).

  1. Old (Current) ABAP Program

TYPES TYP_ITAB3_LEG TYPE STANDARD TABLE OF LINE3.

DATA ITAB3_LEG TYPE TYP_ITAB3_LEG.

 

MOVE-CORRESPONDING ITAB1 TO ITAB3_LEG.
MOVE-CORRESPONDING ITAB2 TO ITAB3_LEG KEEPING TARGET LINES.

SORT ITAB3_LEG BY X1 X3.
DELETE ADJACENT DUPLICATES FROM ITAB3_LEG COMPARING X1 X3.

  1. New (7.4) ABAP Program

TYPES TYP_ITAB3_NEW TYPE SORTED TABLE OF LINE3

                WITH UNIQUE KEY PRIMARY_KEY COMPONENTS X1 X3.


DATA(ITAB3_NEW) = CORRESPONDING TYP_ITAB3_NEW(
                       BASE ( CORRESPONDING TYP_ITAB3_NEW( ITAB1 ) ) ITAB2

                                  DISCARDING DUPLICATES ).

 

github.com

 

なお、ABAP 7.42からは、内部テーブルに対してOpen SQLを使用できるようになりましたので、こちらのバージョンを使っている場合は、Open SQLで内部テーブルを処理する方法も検討できます。(In addition, since ABAP 7.42, Open SQL can be used for internal tables, so if you are using this version, you can also consider how to handle internal tables with Open SQL.)

 

Thank you, and Enjoy.

matsukawar

SAP GUI for Windows へのVBSログインスクリプト

はじめに

SAPの導入企業は、システム構成として、スリー・ランドスケープの構成をとります。開発機・検証機・本番機の3システム構成です。また、各システムの中に、異なるデータ層を持つ、クライアントを有し、開発者は、クライアントを頻繁に切り替えて開発を行うことになります。

 

そこで、ワンクリックでログインができないものか?ということで、SAPのGUI Scriptingという機能を使って、ログインを行うVBSスクリプトを作りました。

スクリプト

github.com

試行錯誤したところ

  • 異なるログイン画面が複数開いていてもログイン処理を実行したい。
  • そのために、各ログイン画面の横のクライアント一覧にログインしようとしているクライアントの番号があるか?探して、あればログイン処理を行うように作成。

 

ABAPでC#で言う #regionの記述方法

ABAP Workbench - ABAP editor (SE38) をいじっていると、どうしても、

Visual Studioとの機能比較をしてしまいがちにな私。

S4/HANAからの新文法で、C#でいう#region#endregion 相当の文法があったので

書いておこうと思います。記法がちょっと特殊です。

"$. Region コメント

~処理~
"$. Endregion

 こうしておくと、「$. Region」から「$. Endregion」まで囲った部分がブロック単位で開閉できるようになり、コードの整理ができます。また、以下の様に、開閉のブロックを入れ子にすることもできます。

"$. Region カレーの作り方

 

"$. Region 1.具材を炒める

~処理1~

"$. Endregion

 

"$. Region 2.カレールーと水を入れて煮込む

~ 処理2~

"$. Endregion

 

"$. Endregion

これからのABAPプログラム開発においては、オブジェクト指向設計と、インメモリDBに最適化されたデータベース処理(CDS-View / AMDP)、そして、新文法の活用がポイントになってくると思います。

 

文法に関して言えば、

ABAPでも、C#でいうLINQ式みたいなのができればいいなぁと思います。

LINQ to Entity on ABAPが出来たらとても最高ですね。

PHPでいうGINQのようなLINQ式のプラグインが有ったらぜひ導入していきたいと思います。

 

内部値を通貨換算して表示する方法の検討 #ABAP

概要

今日は、ABAPで通貨の内部値を外部値に変換して表示する方法について検討してみました。いままでは、BAPI_CURRENCY_CONV_TO_EXTERNALというBAPIを使っていましたが、ABAPString Format(文字列フォーマット)、及び、Embedded expression(組込式)を使うこともできる様です。

 ソースコード

https://github.com/matsukawar/curr_conv2external

「BAPI_CURRENCY_CONV_TO_EXTERNAL」を使用する基本パターン

DATA :
  LW_CUKY_NEW TYPE WAERS VALUE 'JPY', " 通貨コード
  LW_INPUT LIKE BAPICURR-BAPICURR, " 内部値
  LW_OUTPUT LIKE BAPICURR-BAPICURR. " 外部値


SET COUNTRY 'JP'.


LW_INPUT = '12.34'.


CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
  EXPORTING
    CURRENCY = LW_CUKY_NEW
    AMOUNT_INTERNAL = LW_INPUT
  IMPORTING
    AMOUNT_EXTERNAL = LW_OUTPUT.

 

" 表示結果 = 1,234円
WRITE / |{ LW_OUTPUT NUMBER = ENVIRONMENT DECIMALS = 0 }円|.

 BAPIを使用し、内部値を外部値に変換した後、文字列フォーマットで出力します。この際に、出力オプションとして、NUMBERDECIMALSを指定しています。

  •  NUMBER
    千の位に付けるカンマ「,」のフォーマットなどの指定方法。ドイツなどは、日本と違い、ドット「.」を千の位の区切り記号として使用するため、頭のほうで「SET COUNTRY 'JP'.」で切り替えをしています。通常は、「NUMBER = USER」を使うことで、ログイン時の言語フォーマットに依存になります。
  • DECIMALS
    小数点以下桁数の指定。BAPICURR-BAPICURRは小数点以下桁数4なので、そのまま出力した場合、「1234.0000」といったように、ゼロが邪魔となるため、出力時に0を指定します。

組込式のみで処理するパターン

DATA :
  LW_CUKY_NEW TYPE WAERS VALUE 'JPY', " 通貨コード
  LW_INPUT LIKE BAPICURR-BAPICURR, " 内部値
  LW_DEC TYPE P DECIMALS 2. " 出力変換用

 

SET COUNTRY 'JP'.

 

LW_INPUT = '12.34'.
LW_DEC = LW_INPUT.

 

" 出力結果 = 1,234円
WRITE / |{ LW_DEC CURRENCY = LW_CUKY_NEW NUMBER = ENVIRONMENT }円|.

組込式のCURRENCYを使います。BAPICURR型の内部値をそのまま渡すことができない様なので、いったん、仕様通りのP型(小数点以下2桁)に入れなおしてから、組込式で変換をかけています。ちなみに、

DATA(ZDISP_VAL) = |{ ... }|

のような使用方法もできるので、Buid-in functionのsubstringなどと組み合わせて使うことも可能かと思います。

 

小数点以下桁数を出さなければならない場合(1,234.56円の様な表示をする場合)はどうするのか?という事が気になったので、少し調べてみましたが、この場合は、BAPIを使うしかなさそうです。組込式でやろうと思いましたが、CURRENCYに「12.3456」を与えると、出力結果が、「123,456円」となってしまいました。使い方を調べましたが、入力値は小数点以下2桁まででないとダメみたいです。

NGコード

DATA :
  LW_CUKY_NEW TYPE WAERS VALUE 'JPY', " 通貨コード
  LW_INPUT LIKE BAPICURR-BAPICURR, " 内部値
  LW_DEC TYPE P DECIMALS 4. " 出力変換用

SET COUNTRY 'JP'.

LW_INPUT = '12.3456'.
LW_DEC = LW_INPUT.

" RESULT = 123,456円 (×不正解)
WRITE / |{ LW_DEC CURRENCY = LW_CUKY_NEW NUMBER = ENVIRONMENT }円|.

 

BAPI_CURRENCY_CONV_TO_EXTERNALを使う場合は、内部値に、BAPICURR-BAPICURR型を使いますが、こちらは、小数点以下4桁なので、内部値「12.3456」を与えてあげると「1234.56」に変換してくれました。

SAP AS ABAP Developer Edition でABAPの学習環境・開発環境を構築する

はじめに

最近、SAP NetWever AS ABAP 7.51というERP製品の導入プロジェクトに参加する機会があり、このERPシステム上に作られたアドオンの修正や、機能追加などの案件が多くなってきています。

 

このERPパッケージで使われている言語がABAPという言語です。C言語JAVAC#VBAなど、様々な言語の要素が一色単に混じったようなそんな面白い言語となっています。いろんな文法があるため習得するのが大変です。

SAP社は、おそらくJAVAへの移行を目指しているようですが、日本の大手企業で、SAP導入プロジェクトとなれば、このABAPという言語で、アドオンの開発などを行っているようです。

 

AS ABAP Developer Edition を始める

自宅でもABAPの勉強がしたいということで、AS ABAP Developer Editionという開発者向けの無償のお試し環境があると知り、さっそく、公式ブログで推奨されているスペックを満たすPCを部品をかき集めて準備し、インストールの作業に着手できましたので、紹介がてら。

 

ハードウェアスペック概要

 

ソフトウェアスペック概要
  • SAP NetWeaver 7.51 SPS2 Developer Edition (※個人無償トライアル版。SAP PortalGmailなどを使ってユーザー登録後、2~3日たつと、ダウンロードできるようになりました。よって、SAP社から何かを買う必要はありません。)
  • Windows 10 Home Edition (ホスト用。これは、買うしかないです。)
  • Vmware Workstation Player 15 (注:個人利用は無料。会社でやるときは、vSpereや有償版の仮想化製品を買う必要があります)
  • Open Suse Linux Leap (AS ABAPインストール用,  無料)
  • Eclipse IDE for Java Developers 2019-3 (無料。DLはこちらから。Eclipseは主にCDS-Viewの開発環境になります。)
  • SAP GUI for Java 7.40 rev 12 (※個人無償トライアル版。AS ABAP Developer Editionのパッケージの中に内包されています。)
  • Java Runtime Environment (個人利用は無料Eclipseのインストールで必要となります。DLはこちら)

ご覧の通り、SAP社の推奨インストール手順によれば、Open Suse Linuxの仮想環境を構築した後に、AS ABAPのインストールをするように推奨されています。従って、Open Suse Linuxのインストールと各種設定をはじめに行わないといけないので、ハードルが少し高いです。

 

インストール手順

基本的には公式ブログのガイドを参考にやっていくだけです。

このブログでは、ポイント毎に注意点を書きたいと思います。※もし構築をする中で、困った点など質問などがありましたら、ご連絡頂ければ、お答えいたします。

 

OSインストール時の注意点

言語は英語とすることと、パーティション設定に注意する必要があります。パーティション設定の方法については、こちらに、詳しく手順が紹介されていますので、ぜひ、参考にしてください。

 

追加パッケージのインストール

OSのインストールが終わったら、追加プログラムのインストールを行います。

# sudo yast

Open SuSEはこのYASTという管理ツールで設定ができるので便利です。Software - Software Managerから、追加でインストールしたいパッケージを検索して、インストールを行います。uuiddlibaio-develSUSEFirewall2(※ファイアーウォールを有効化する場合)いうパッケージを追加でインストールします。

 

YAST でのネットワーク設定時の注意点

AS ABAPをインストールする際に、静的IPアドレスの設定が必要となります。そこで、私は、VmWareの仮想ネットワークアダプタを2個用意し、片方は、DHCPでインターネットへ行けるように設定をし、もう一方は静的IPアドレス(例:192.168.1.2)でネットワーク構築を行いました。

 

具体的には、eth0をDHCPでインターネットにつなげれるような設定を行い、eth1を閉域として組んで、仮想環境とホスト環境間で通信ができるように組みました。

f:id:matsukawar:20190504184441p:plain

 

ホスト名の変更

同じく、Network Settings で、[Hostname/DNS]のメニューから、ホスト名をvhcalnplciに設定をしておきます。この名前でないとだめらしいです。

f:id:matsukawar:20190506132121p:plain

 

ホストPCからのみの利用のため、FirewallはOFFにする場合

YASTのSoftware Manager でインストール可能な、SUSEFirewall2を利用することで、Firewallの設定変更が細かく行えます。ただし、Web APIEclipseがどのポートが使っているのか定かではないため、Firewallの機能自体をOFFにしても問題がない場合は、OFFにしたほうがいいと思います。

# sudo systemctl disable firewalld

# sudo systemctl stop firewalld

 

AS ABAPのインストール

AS ABAPのインストールについては、公式のガイドの通り実行すれば、OKだと思います。インストールの最後に、Installation of NPL successfulが表示されれば成功です。

# chmod +x install.sh

# ./install.sh -s

...

Installation of NPL successful

 

AS ABAPのサービス開始

AS ABAPのインストールが終わると、npladmというユーザーが作成されていますので、このユーザーのコンソールに入り、SAPのサービスを起動します。

# su npladm

vhcalnplci:npladm 1> startsap ALL

 

ヘルプによると、stopsapなどのコマンドもあるようです。

このコマンドは、SAPのサービスやデータベースを起動します。サービスが正常に起動すると、ポート3200のリッスンが有効になる(ログインなどで利用される)ので、以下のコマンドを入力して、動作確認を行います。

# netcat -zv 192.168.1.2 3200

Connection to 192.168.1.2 3200 port [tcp/tick-port] succeeded!

 

このsapstartコマンドは、仮想OS起動毎に実施することが必要なので、あらかじめ起動時スクリプトを書いておくと良いかもしれません。

 

Eclipseのインストール

Java Runtime Environment(JRE)のインストールが完了したら、ABAP Development Tools、通称ADTをインストールします。何のことはありません。EclipseをインストールしてADTのプラグインを追加インストールします。SAP GUI(or SAP GUI for JAVA)というClientツールも有るのですが、こちらは、有料課金ユーザーしかダウンロードできないみたいだったので、無課金ユーザーは、Eclipseを使って開発を行います。

 

ADTはEclipseのメニューの [Help] - [Install New Software] からダウンロードURL(https://tools.hana.ondemand.com/2019-03)を指定する事で、インストール可能です。とりあえず、現時点では、チェックボックスが2個出ますから、全選択してインストールをします。

f:id:matsukawar:20190506132429p:plain

 

S/4 HANAを使っている方は、パフォーマンスの分析ツールがこのEclipseプラグインで提供されているので、インストールしておく必要があります。

 

SAP GUI for JAVAのインストール

SAP GUIは、有料課金ユーザーにしか配布されていないのですが、SAP GUI for JAVAというツールが無償提供プログラムに内包されていることがわかりましたので、これも併せてインストールしておきます。

f:id:matsukawar:20190506135858p:plainf:id:matsukawar:20190506141211p:plainf:id:matsukawar:20190506141316p:plain

 

SAPGUI4Windowsというフォルダもあるのですが、実際は、更新パッチしか入っていないようで、実際にインストール出来たのは、PlatinGUI740_12-20012038.JARのみでした。こちらは、SAP GUI for JAVAの本体となります。SAPGUI4Windowsのフォルダに本体が入っていないのは、入れ忘れか何らかのミスではないかと想像します。

 

初期設定

ここまでインストールは終わりとなります。次に初期設定を行います。

 

SAP GUI for JAVAでログイン

インストールが終わったら、さっそく起動をして、メニューの[ファイル]-[新規接続]から接続プロパティの設定画面を開き、内容説明を記入して、[詳細]タブの[エキスパートモード]にチェックを入れて、接続情報を入力して、[保存]ボタンをクリックします。

f:id:matsukawar:20190506142049p:plain

conn=/H/192.168.1.2/S/3200

 

作成した接続情報をダブルクリックすると、ログイン画面に到達します。

f:id:matsukawar:20190506142412p:plain

 

クライアント001、ログオン言語ENを入力します。資格情報としては、クライアント001に以下の4アカウントが用意されています。いずれもパスワードはAppl1anceです。

  • DDIC
    Data Dictionary用
  • SAP*
    管理者用。開発用途ではなく、ライセンス適用などで利用する。
  • DEVELOPER
    開発者用アカウント。
  • BWDEVELOPER
    開発者用アカウント。

 

ハードウェアキーの取得

とりあえず、ライセンス適用でハードウェアキーが必要になるので、SAP*でログインし、トランザクションコード(T-Code) SLICENSEを実行します。そうすると、SAP License Administrationの画面が開くので、Active Hardware Keyをコピーます。

f:id:matsukawar:20190506144146p:plain

 

ライセンスファイルの取得

こちらにアクセスして、ライセンスの申請を行います。3か月有効なライセンスを取得することができ、延長の場合は、新たに申請を行うことができます。一覧からNPL - SAP NetWeaver 7.x (Sybase ASE)を選択して、ハードウェアキーと、必要項目を記入の上[Generate]ボタンをクリックします。これで、ライセンスファイルが取得できます。

f:id:matsukawar:20190506151702p:plain

 

ライセンスファイルの適用

T-Code:SLICENSEの画面に戻り、すでに適用済となっているライセンス行を右クリック-[Delete License]から削除します。

f:id:matsukawar:20190506152522p:plain

 

そして、[Install License]ボタンをクリックし、先ほど取得した、ライセンスファイルをインストールします。

f:id:matsukawar:20190506152810p:plain

 

さっそくプログラムを作る!

ABAPの開発が行える状態になりましたので、簡単なプログラム作成ということで、Hello Worldを行うだけの、レポートプログラムと、ユーザー一覧を取得するCDS-Viewを用いた、レポートプログラムを作ります。

 

Hello World レポートプログラムの作成

簡単なプログラムを作って動かしてみます。

T-Code:SE38を実行して、サンプルプログラムを作ります。ここでは、プログラム名ZHELLOWORLDを入力して、[CREATE]ボタンをクリックします。ちなみに、作成するプログラム類は、すべて、ZまたはY始まりの名前である必要があります。

f:id:matsukawar:20190506155715p:plain

 

次に、内容説明にHello worldなどと好きなコメントを入れて、プログラムの種別として、Executable program - Test Programを選択して、[Save]ボタンをクリックします。
f:id:matsukawar:20190506155544p:plain

 

[Local Object]ボタンをクリックします。ローカルオブジェクトが嫌な場合は、既存のパッケージしか使えないみたいです。T-Code:SE21でパッケージを作ることができませんでした。TESTという既存のパッケージが使えそうです。

f:id:matsukawar:20190506160012p:plain

 

とりあえず、簡単なプログラムを書いてみます。

*&---------------------------------------------------------------------*
*& Report ZHELLOWORLD
*&---------------------------------------------------------------------*
*& Sample Program
*&---------------------------------------------------------------------*
REPORT ZHELLOWORLD.

DATA NAME TYPE STRING VALUE 'WORLD'.
WRITE / |Hello { NAME } !|.

 

その後、

  1. [Check]ボタンをクリックして、構文チェックを行います。
  2. [Save]ボタンをクリックして、保存を行います。
  3. [Activation]ボタンをクリックして、有効化します。
  4. [Direct Processing]ボタンをクリックして、プログラムを実行します。

f:id:matsukawar:20190506160627p:plain

 

実行結果です。

f:id:matsukawar:20190506160938p:plain

 

EclipseのSAPへの接続

次に、CDS-Viewを作ろうと思います。CDS-ViewはABAPレイヤー上のビューなので、ASEデータベースを使用しているこのDeveloper Editionでも作成することができます。ただし、AMDPと呼ばれるHANAデータベース上のプロシージャーについては、作成はできません。(※作れるけど、実行時エラーになります。)

 

まず、EclipseProject ExplorerCreate an ABAP projectをクリックします。System IDにNPL、Application ServerにサーバーのIPアドレス、Instance Number に00(ゼロを2個)を入力して、[Next]ボタンをクリックします。

f:id:matsukawar:20190506161743p:plain

 

クライアントに001、UserにDEVELOPER、言語にENを指定して、[Finish]ボタンをクリックします。ログインに成功すると、SAP内部のオブジェクトのツリーがProject Expolorerに表示されます。

f:id:matsukawar:20190506161935p:plain

 

CDS-Viewを作成する

Project Explorer から、[Favorite Package]-[$TMP]を右クリックし、[New]-[Other ABAP Repository Object]をクリックします。

f:id:matsukawar:20190506162230p:plain

 

CDS-Viewを作りたいので、[Core Data Services]-[Data Definition]を選択して[Next]ボタンをクリックします。

f:id:matsukawar:20190506162435p:plain

 

今回は、ユーザー一覧のビューを作ってみようと思います。CDS-View作成時、別名での登録をする必要があるようなので、Nameの欄を入力するときは、ZUSERS_V (_Vの部分は本来要らない)と命名します。

f:id:matsukawar:20190506163341p:plain

 

エディターが開くので、ビューを作っていきます。ここで、sqlViewNameに別名ではなく実際の名前(ZUSERS)を指定する必要があります。CDS-Viewは、ローカルオブジェクト以外の場合、削除リリースするまで論理削除状態となり消えないので、要注意です。

f:id:matsukawar:20190506165123p:plain

@AbapCatalog.sqlViewName: 'ZUSERS'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Get User List.'
define view ZUSERS_V as
select
r.mandt,
r.bname,
a.name_first,
a.name_last,
a.date_from,
a.date_to
from usr21 as r

inner join adrp as a on
a.persnumber = r.persnumber

 

SE38でプログラムを作成したときと同じ要領で、[Save]ボタンをクリックした後に、[Activate]ボタンをクリックします。画面下にActivation for ZUSERS_V successfulが表示されていればOKです。

f:id:matsukawar:20190506164207p:plain

 

その後、[Execute]ボタンをクリック or F5キーを押すと、実行結果が表示されます。Client001 にはビルトインユーザー以外に、開発者2名しか登録されていないので、合ってそうです。

f:id:matsukawar:20190506165254p:plain

 

Eclipseで作成したCDS-Viewをさっそく、レポートプログラムに組み込んでみます。

T-Code:SE38ZUSERSというプログラムを作成しました。

f:id:matsukawar:20190506170205p:plain

*&---------------------------------------------------------------------*
*& Report ZUSERS
*&---------------------------------------------------------------------*
*& get users.
*&---------------------------------------------------------------------*
REPORT ZUSERS.

SELECT * FROM ZUSERS WHERE MANDT = '001' INTO TABLE @DATA(ALL_USERS).
CL_DEMO_OUTPUT=>DISPLAY_DATA( ALL_USERS ).

 

実行結果はこんな感じです。ここで、クライアントIDの指定を外すと、Client000の値も取得されてしまいます。よって、先ほどのCDS-ViewにはMANDTの項目が必要となります。

f:id:matsukawar:20190506170333p:plain

 さいごに

今回、自宅に、ABAPの学習をする環境を構築することができました。S/4になってからの、新しい文法や、ABAPという言語の動作検証などをして、GitHubなどにアップしていければいいなと思っています。