Calculating PI in ABAP

およそ 4 年振りの SAP ネタです。

つい先日、これまで書き散らしていた諸々のソース コードを整理して、GitHub やら TFS にアップロードしていたのですが、その中に 2009 年に書いた ABAP のコードを見つけました。2009 年と言えば社会人 2 年目。暇つぶしに ABAP で円周率を計算していたとは、舐めた社員ですな。当時、社内のポータル サイトで共有したような記憶がありますが、まあ別にここで公開してもいいでしょう、ということで GitHub にアップロードしました。

https://github.com/msmania/pi

意外にも、GitHub には多くの ABAP のコードがアップロードされていて驚きました。円周率なんて計算してもしょうがないですが、GItHub にはビジネス的に有用なプログラムもあるはずです。

なお、アルゴリズムとしてはマチンの公式を使っています。

もう ABAP については記憶の彼方にいってしまってほとんど覚えていないのですが、aRFC を使って複数ワークプロセスに処理を分散させるぐらいのことまでは実現していました。当時のメモを見ると、今後に向けた改善点として、以下の 3 つが書かれていました。なんかうける。

  • N 型より INT2 型を使う
  • 汎用モジュールからの戻り値を ABAP メモリか SAP メモリに展開してコピーしないようにする
  • 算術幾何平均を使う

といっても、コードを紹介するだけだと面白くないので、久々に NetWeaver の Trial 版をインストールしてみました。4 年前に書いたインストールの記事に関しては、幾つかのブログからリンクして頂けているようで、アクセス数がそれなりにあります。公開資料が少ないこともあって、需要はあるのでしょう。それに ITPro の某特集のように情報がいつまでも古いと申し訳ないですし。

1. まずはダウンロード

かつて SDN (SAP Developer Network) と呼ばれていたサイトは、SCN (SAP Community Network) という名前に変わっていました。開発者以外の人にも見てほしい、ということなんでしょうかね。

その SCN とやらでは、どこのリンクを辿れば ABAP がダウンロードできるのか分かりません。そこで、ダウンロード ページで "ABAP Trial" で検索して、以下のページを見つけました。このページの "Trial Version" というボタンをクリックしてユーザー情報を登録すると、真のダウンロード ページへのリンクを含むメールを受け取ることができます。なんか随分めんどくさくなってるなー。

SAP NetWeaver Application Server ABAP 7.03 64-bit Trial | SAP Store
https://store.sap.com/sap/cpa/ui/sid/0000000218

メールに書いてあったリンクから、↓ のようなページに辿り着きます。NetWeaver 7.03 のダウンロードページなのに、なぜか 7.02 のリンクもあります。とりあえず全部ダウンロードしておきましょう。

image

IE の場合だけかもしれませんが、ここで単純にリンクをクリックすると、rar ファイルをテキストとして開こうとしてブラウザーが大変なことになるので、「右クリック → ファイルを保存」で保存するようにして下さい。

ダウンロードしたファイルは ↓ の 5 つ。全部で 10GB ちょっとです。拡張子は rar、exe、zip とバラバラです。

image

NetWeaver 7.02 と GUI for Java は、成り行きでダウンロードしただけで今回は使いません。使うのは以下の 2 つのファイルです。詳しく調べていませんが、すでに NetWeaver 7.03 ってのも古いのでしょうかね。時代は HANA!クラウド!なのかな。

  • ABAP_7_03_SP04_64_bit_Trial_3_9_2_GB.rar
  • ABAP_SAP_GUI_for_Windows_7_30_PL4_HF1_121_MB.exe

Hyper-V の仮想マシンに入れるので、rar を解凍して、ISO に固めなおしておきます。元の rar と比べて大してサイズはほとんど変わらず・・・。初めから ISO でダウンロードできればいいのに。

2. サーバーの準備

そう言えば、前回の記事でインストールしていたのは 32bit の NetWeaver でした。ブログを見ると、64bit の無償版は提供されていなかったらしく、なんだか時代の変遷を感じます。今回は潤沢なリソースを使って、さくっとインストールを終わらせようと思います。用意したのはこちら ↓

  • OS: Windows Server 2012 R2 (Hyper-V 仮想マシン)
  • 仮想プロセッサー コア数: 4
  • メモリ: 8GB
  • ディスク: 100GB on SSD
  • ネットワーク構成: Windows Server 2012 R2 ドメイン

8GB あれば余裕じゃん、ってことでスワップ領域の設定は特に変えません。VHD は、OS をインストールしたディスクとは別に用意しました。インストール前のディスク構成はこんな感じ。

image

3. sapinst の実行

仮想マシンを起動し、作っておいた ISO をマウントし、以下のパスにある sapinst.exe を起動します。同じフォルダーに PowerShell スクリプトがあってちょっと気になる。名前からしてクラスター環境へのインストール用か。

SAP_NetWeaver_703_Installation_Master\DATA_UNITS\BS2011_IM_WINDOWS_X86_64\sapinst.exe

image

sapinst が起動します。なんか懐かしい!

image

そう言えば SAPinst って Java がないと駄目なんじゃなかったっけ、と思いましたが、今回は特に JRE も JDK も入れていません。プロセス ツリーを見ると、なぜか Java が動いています。どこから来たんだこいつは。

image

どうやら、sapinst.exe の初回実行時に、インストール メディアに入っている SAPJVM4 が自動的に解凍されていたようです。Java.exe は %temp% にコピーされていました。バージョンを見ると、Java1.6 互換になっています。

C:\MSWORK> %temp%\sapinst_exe.2080.1425356341\jre\bin\java -version
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 6.1.021)
SAP Java Server VM (build 6.1.021, Dec 23 2010 01:45:56 – 61_REL – optU – windows amd64 – 6 – bas2:146884 (mixed mode))

話を sapinst に戻します。sapinst の画面は、前回の記事とほぼ同じです。最初の画面で、インストールシステム ABAP+MaxDB+Central System を選択し、Next をクリックします。

ログオフを求められるので、OK をクリックしてログオフし、再度同じユーザーでログオンします。

image

ライセンス条項を確認し、問題なければ accept を選んで Next をクリックします。

image

マスター パスワードの入力です。今まで通り pswd_NSP を使おうとしたら、なぜか弾かれてしまったので Password1 を使いました。

image

パスワードの要件は以下の通りです。MaxDB と NetWeaver でそれぞれ別の要件があるので面倒です。実はこの 2 つに加えて第三の要件、Windows のパスワード要件もあり、それは sapinst ではチェックしてくれないので要注意です。sapinst が OK でも Active Directory で無効なパスワードだと、インストールの最初のフェーズでエラーになります。そうなっても sapinst をやり直せばいいのですが、確実に一発で通したい場合は、入力するパスワードで Windows のユーザーを作れるかどうかを予め確認しておくのが一つの手です。

image

パスワードが通ると、以下のポップアップが出ました。前提条件を満たしていないようですが、ここは強気の続行です。No をクリックします。

image

何を満たしていなかったかと言うと、OS バージョンとスワップ領域のサイズでした。結果的にはどちらも問題になりませんでした。OS は Server 2012 R2 なので Windows 6.3 のはずですが、なぜか 6.2 と表示されています。

image

次がサマリーのページです。縦に長くなりますが、全部貼り付けます。

image

image

image

image

念のため、全部の設定項目を確認しておいたほうがよいです。特に見るべきなのは、インストール先のドライブでしょうか。ウィザードでは何も聞かれませんでしたが、上記の例だと、基本的には全て S: ドライブにインストールされるように自動的に設定されています。もし全部 C: ドライブに入れたい場合は、該当項目にチェックをつけて、Revise をクリックしてください。

今回はこのまま Next をクリックしてインストールを開始します。

先ほど触れましたが、Active Directory のパスワードの要件を満たしていないと、エラーになります。実際に引っかかりましたので、エラーの画面を紹介します。

image

このエラーの続行は不可能なので、Stop をクリックします。すると、ログ ビューアー的な画面が出てきます。

image

エラーメッセージは以下の通り。IADsUser::SetInfo がエラーになっているので、これは Active Directory で既定で有効になっている、複雑なパスワード ポリシーを満たしていないことが原因と考えられます。

ERROR      2015-03-02 20:41:36.75 [synxcuser.cpp:1883]
           CSyUserImpl::addToOS(PSyUserDataInt data, ISyProgressObserver* )
           lib=syslib module=syslib
FSL-00009  System call failed. Error -2147022651 (The password does not meet the password policy requirements. Check the minimum password length, password complexity and password history requirements.

) in execution of system call ‘IADsUser::SetInfo‘ with parameter (), line (1882) in file (synxcuser.cpp), stack trace: iaxxejsctl.cpp: 146: EJS_ControllerImpl::executeScript()
d:\depot\bas\720_rel\bc_720-2_rel\gen\optu\ntamd64\ins\sapinst\impl\src\ejs\iaxxejsbas.hpp: 461: EJS_Base::dispatchFunctionCall()
iaxxejsexp.cpp: 178: EJS_Installer::invokeModuleCall()
iaxxbaccount.cpp: 66: CIaOsAccount::createUser_impl()
synxcaccmg.cpp: 168: PSyUserInt CSyAccountMgtImpl::createUser(PSyUserDataInt, ISyProgressObserver*) const
syxxccache.cpp: 284: CSyAccountCache::getUserImpl(name="CONTOSO\SAPServiceNSP", sid="", create=true)
syxxccache.cpp: 293: CSyAccountCache::getUserImpl(name="CONTOSO\SAPServiceNSP", sid="", create=true, ISyProgressObserver* )
synxcuser.cpp: 134: CSyUserImpl::CSyUserImpl(PSyUserDataInt, bool)
synxcuser.cpp: 1669: CSyUserImpl::addToOS(PSyUserDataInt data, ISyProgressObserver* )

新たに sapinst をウィザードからやり直すときは、sapinst の生成したログをすべて削除してから sapinst.exe を実行してください。ログが残っていると、入力済みの値を使ってインストールが勝手に始まってしまいます。

Import ABAP 時の様子はこんな感じです ↓

image image

Import ABAP は何の問題もなく通過しましたが、最後から 4 つ前のフェーズ Start instance でインスタンスの起動に失敗して sapinst がエラーになりました。

image

単純に起動に失敗しただけなので、これは続行できる可能性があるエラーです。sapinst の以下のポップアップはそのままにして、とりあえず SAP インスタンスの手動起動を試みます。

image

既にデスクトップに sapmmc ができているのでそれを開いて・・・

image

アイコンが黄色になっているので、まずは止めます。

image

image

止めた後は特に何もせず、そのまま起動を行なったところ、無事起動しました。原因は不明ですが、まあよくあることです。今回は違いましたが、ここでの原因として、メモリ不足で SAP が起動できなかった、ということもあり得ます。SAP インスタンスの起動中は、タスク マネージャーなどでリソースの状態を確認しておく癖をつけておくと何かと役に立つはずです。

image

このあと SAPinst の画面で Retry をクリックし、無事インストールが終了しました。エラー対応も含めて 1 時間くらい。速い!

image

おまじないとして、この後 OS を再起動してから SAP インスタンスを起動します。起動後でもメモリ消費量は 4GB 弱だったので、仮想マシンへのメモリの割り当てを 5GB に減らしておきました。

4. SAP GUI のインストール

ABAP を使うためには、SAP GUI もインストールしないといけません。クライアント用に別の Hyper-V 仮想マシンを用意します。

無償版のパッケージに入っているインストーラーでは、いきなり SAP GUI 7.30 をインストールできないので、最初に SAP GUI 7.20 をインストールし、その後に 7.30 へのアップグレードを行ないます。7.20 だけなら Java は要らないのですが、7.30 にアップグレードするには 32bit JRE 6 か 7 が必要になります。最新の JRE 8 ではインストールできませんでした。sapinst と違って、SAPJVM はフロントエンド コンポーネント向きではないのでしょうかね。

SAP GUI 7.20 のインストーラーは ↓ のパスにあります。

Frontend&tools\SAP_GUI_for_Windows_7.20_Patchlevel_7_SDN_version_20110701_1428.exe

7.20 のインストール後、別途ダウンロードした ABAP_SAP_GUI_for_Windows_7_30_PL4_HF1_121_MB.exe を実行してアップグレードを行います。

これで SAP GUI 7.30 がインストールできました。

image

先ほどインストールした NetWeaver への接続を作ります。SID は NSP、インスタンス番号は 00 です。

image

作業用には、ユーザー名 bcuser、パスワード minisap のアカウントを使います。クライアントは 001 で。

minisap 環境で使う機会はほとんどなさそうですが、sap* と ddic ユーザーのパスワードは、インストール時に入力したマスター パスワードになっています。

ログオンできました。SAP GUI 7.30 といえど、見た目に大きな変更はないようです。それにしても懐かしい。

image

5. ABAP プログラムを書く

さて、ここからの手順はかなり記憶があやふやです。何はともあれ、トランザクション SE80 を実行します。ドロップダウンでは Local Objects を選んでおきます。シングルシステムで、移送の予定がないからです。移送とか懐かしい・・・

image

まずはクラスから作るので、メニューからクラスライブラリ – クラスを選びます。

image

適当に名前や説明を入れて保存します。

image

ローカル オブジェクトには $TMP というパッケージが自動的に割り当てられる、ということをトレーニングで覚えた気がします。フロッピーのボタンをクリックして保存します。

image

こんな画面になりました。

image

画面上でいちいちインターフェースを作っていくのは面倒なので、Source Code-Based というボタンを押してコード モードに移ります。ここでは、GitHub のリポジトリから z_longint.abap をコピペします。コードを保存したら Ctrl+F2 で文法チェックし、問題なければ Ctrl+F3 で有効化します。

image

多倍長演算を行うクラスができたので、このクラスを使って円周率を計算するプログラムを作ります。幾つかのバージョンを用意していますが、ここでは一番シンプルな奴を使います。

コンテキスト メニューからプログラムの新規作成を選びます。

image

名前を入れてチェックのアイコンをクリックします。

image

タイトルを適当に入力して Save をクリックします。

image

$TMP パッケージが選ばれていることを確認し、フロッピー アイコンをクリックします。

image

コード入力の画面が表示されるので、今度は GitHub から zcalc_pi.abap をコピペして保存します。先ほどと同様に Ctrl+F2 で文法チェックし、問題なければ Ctrl+F3 で有効化します。

image

特に意味はないですが、プログラムの実行は別トランザクションでやってみます。トランザクション SE38 を実行し、プログラム名に先ほど入力した名前 zcalc_pi を入力して F8 キーを押します。

image

無事、結果が表示されました。計算時間は 1 秒ちょっとになっています。さすが ABAP。遅い。

image

というわけで、久々の SAP ネタでした。

広告

[SAP] HTTP を使って NetWeaver に接続する

多くの場合、NetWeaver ABAP には SAP GUI という SAP 独自のクライアント アプリケーションを使ってログオン、及び、各操作を行います。一方、NetWeaver Java の場合はもちろん、ブラウザーがクライアント アプリケーションとなります。逆に SAP GUI を使うことはできません。

以前にも触れたことがありますが、SAP GUI と NetWeaver との通信に使われるプロトコルは、DIAG と呼ばれる(おそらく)仕様が非公開のプロトコルが使われています。しかしながら NetWeaver ABAP も Java と同じように、ブラウザからアクセスすることもできます。Java でいう JSP のような技術は ABAP にも存在し、名前は BSP = Business Server Page といいます。ASP という名前にしなかったのは、マイクロソフトの Active Server Page に対する配慮でしょうか。

現在の NetWeaver 7.x では、HTTP を処理するコンポーネントは ICM (Internet Communication Manager) に統合されています。NetWeaver 7.1x 系では確か Java でも ICM が HTTP 要求を処理しているはずです。プロセスでいうと icman です。こいつが HTTP ポートを開けています。

話を ABAP に絞ります。HTTP 通信は ICM が担当しますが、中のロジックはもちろん ABAP 側で処理します。ブラウザから来た HTTP リクエストを ICM がうまいこと処理して、最終的にはABAP プログラムであるイベント ハンドラにリクエストが届き、ワークプロセスでそれを処理します。で、HTTP 応答を ICM 経由で返します。じゃあ、ICM と ワークプロセスの通信はどうなってるの、という疑問が出てきます。このへんはちゃんと確かめていませんが、おそらくメッセージ サーバーを使って HTTP で通信しています。メッセージサーバーにも HTTP ポート (39##) があります。SAP 公式手順はないですが、ICM を別サーバーで構築することもできる気がします。スタンドアロン ICM みたいな。

ちょっと知っている人は、じゃあ、ICF とか ITS ってのは何よ、と思いますね。ICF は Internet Communication Framework という名前で、ICM に統合されているかのような印象を受けます。が、こいつは ABAP です。フレームワークという名の通り、ABAP プログラムが HTTP を処理するためのフレームワークのことです。

http://help.sap.com/saphelp_nw70ehp1/helpdata/en/72/c730ddc06511d4ad310000e83539c3/frameset.htm

ICF というのはけっこう大きな実装で、全体を見るのはけっこう難しいです。というか見たことないですすみません。例えば、ABAP の HTTP リクエスト ハンドラーは ABAP クラスとして IF_HTTP_EXTENSION というインターフェースを実装しなければなりませんが、IF_HTTP_EXTENSION は ICF の一部と言えるでしょう。自分で実装したクラスは、ICF サービスとして、ICF の一部に登録することになります。細かいことは、自分で ABAP プログラムを見たり、上のヘルプ ポータルを参考にして下さい。(丸投げ)

で、次は ITS (Internet Transaction Server) ですね。結論から言うと、ITS というコンポーネントは既に存在しません。ICF サービスとして、標準の NetWeaver ABAP に含まれています。そのためか統合 ITS と呼ばれたりもします。でもこれは ICF サービスに過ぎません。その昔、SAP のアプリケーション サーバー (NetWeaver と呼ばれる前) に HTTP の機能がなかった時代に、HTTP を処理するコンポーネントが新たに作られました。これが ITS です。HTTP 要求を受け取る W-Gate と ABAP と通信する A-Gate に分かれていて、W-Gate のほうは確か IIS や Apache でも代用できたような記憶があります。このときは、まだ普通のウェブ サーバーの体をなしていて、HTML などはファイル システム上にデプロイする仕組みになっていました。現在の ICF では、ファイル システムは使わず、データベース内に独自のリポジトリを作って、それを ABAP が処理しています。そもそもスタティックな HTML はほとんど使いません。ITS 時代には、BSP の前身である HTMLBusiness という素敵な技術があって、これがまたけっこう面白いです。

現在 ITS を覚える意味はあまりないかもしれませんが、ヘルプはこれです。
http://help.sap.com/saphelp_470/helpdata/en/0d/654d356560054ce10000009b38f889/frameset.htm

統合 ITS についてはこれです。
http://help.sap.com/saphelp_nw70ehp1/helpdata/en/6c/d30ea76d444ee3b1ea48026fe0fbb6/frameset.htm

実際に動かしてみましょうか。環境はいつものこれです。

ホスト名: win2008-nw702 (ワークグループ構成)
IP: 192.168.1.3
OS: Windows Server 2008 x86 (VMware ゲスト)
RAM: 2GB (VMware による割り当て)
NetWeaver: SAP NetWeaver 7.0 EhP2 SP6
SID: NSP
インスタンス番号: 00
インストール ドライブ: C:

まずはインスタンス プロファイルに以下のパラメーターを設定し、NetWeaver を再起動します。この環境では、インスタンス プロファイルは C:\usr\sap\NSP\SYS\profile\NSP_DVEBMGS00_win2008-nw702 です、念のため。

SAPLOCALHOSTFULL = win2008-nw702.sap.local
icm/host_name_full = $(SAPLOCALHOSTFULL)
icm/server_port_0 = PROT=HTTP,PORT=80$$
icm/min_threads = 5
icm/max_threads = 10
icm/max_conn = 20
icm/keep_alive_timeout = 3600
icm/conn_timeout = 100000

ちなみにファイル全体はこんな感じ。

#
# NSP_DVEBMGS00_win2008-nw702
#

#
# basic parameters
#
SAPSYSTEMNAME = NSP
SAPSYSTEM = 00
INSTANCE_NAME = DVEBMGS00
SAPGLOBALHOST = win2008-nw702
SAPLOCALHOSTFULL = win2008-nw702.sap.local
DIR_CT_RUN = $(DIR_EXE_ROOT)\$(OS_UNICODE)\NTI386
DIR_EXECUTABLE = $(DIR_INSTANCE)\exe
dbs/ada/schema = SAPNSP

ms/server_port_0 = PROT=HTTP,PORT=81$$
rdisp/wp_no_dia = 5
rdisp/wp_no_btc = 2
rdisp/wp_no_enq = 1
rdisp/wp_no_vb = 1
rdisp/wp_no_vb2 = 1
rdisp/wp_no_spo = 1

#
# memory management
#
PHYS_MEMSIZE = 1536
em/max_size_MB = 20000
alert/MONI_SEGM_SIZE = 0
enque/table_size = 2000

rspo/local_print/method = 2
rsdb/ntab/entrycount = 5000
rsdb/ntab/ftabsize = 3000
rsdb/ntab/sntabsize = 1000
rsdb/ntab/irbdsize = 1000

abap/buffersize = 100000
rsdb/cua/buffersize = 2000
zcsa/presentation_buffer_area = 1000000
sap/bufdir_entries = 500

zcsa/table_buffer_area = 9000000
zcsa/db_max_buftab = 500
rtbb/buffer_length = 500
rtbb/max_tables = 50

#
# ICM parameters
#
icm/host_name_full = $(SAPLOCALHOSTFULL)
icm/server_port_0 = PROT=HTTP,PORT=80$$
icm/server_port_1 = PROT=SMTP,PORT=2500,TIMEOUT=120,PROCTIMEOUT=120
icm/min_threads = 5
icm/max_threads = 10
icm/max_conn = 20
icm/keep_alive_timeout = 3600
icm/conn_timeout = 100000

#
# additional parameters
#

mpi/total_size_MB = 10

注意点が 1 点あります。SAPLOCALHOSTFULL = win2008-nw702.sap.local のところで指定するホスト名です。奇妙なルールですが、後の手順を実行するためにはこの値は必ずピリオドを 2 つ以上含んだ文字列にしなければなりません。最終的にブラウザーでアクセスするときに使うホスト名になるのですが、クッキーを生成する関係でこのようなルールが生まれてしまいました。

ドメインに参加していれば FQDN がありますが、ドメインに参加していなくても、要はクライアント側でピリオドを付けたホスト名で名前解決できればいいので、hosts (%systemroot%\system32\drivers\etc\hosts) のエイリアスでアドホックに対応可能です。このサーバーはワークグループ設定なので正式な FQDN が存在せず、サーバーとクライアントの hosts ファイルに以下のようなエントリを追加する方法で対処しています。NetWeaver は、SAPLOCALHOSTFULL に指定されたホスト名が名前解決できなかった場合は起動に失敗するのでサーバー側にも必ず hosts を設定します。

192.168.2.10    win2008-nw702    win2008-nw702.sap.local

再起動が終わったら、SAP GUI でログオンし、トランザクション SMICM を実行して ICM の状況を確認します。トランザクション実行後、メニューから Goto > Services を選択して、こんな感じになってれば OK。 HTTP サービスが有効になっています。SMTP は今回は使いません。SAP からメールを送れるようになってけっこう面白いので、これもいつか紹介します。
image

次に利用する SICF サービスを有効します。通常であればトランザクション SICF から1 つずつやっていくところですが、まずは SICF_INST を実行します。
image

F4 押すと、選択肢が表示されます。 いわゆる 「F4 ヘルプ」 ですね。
image

ここでは以下の 5 つをそれぞれ選択して、有効化します。複数選択はできないので、5 回繰り返します。

  • BSPBASIS
  • WEB DYNPRO ABAP
  • WEB DYNPRO ABAP DESIGN TIME
  • WEB DYNPRO ABAP TEST APPS
  • WEB DYNPRO DBA COCKPIT

それぞれの Technical Name と ICF サービスは 1:N で結びついています。対応はテーブル ICFINSTACT の内容から見ることができます。
image

次に、SICF_INST には含まれない ICF を個別に有効化します。トランザクション SICF を実行し、最初の画面ではそのまま F8 キーを押してください。

こんな画面になります。
image

ツリー構造になっているのが SICF サービス群です。ツリーを開いて以下のサービスを見つけ、右クリックして [Activate Service] を選択してください。

  • default_host/sap/public/bc/its/mimes
  • default_host/sap/bc/gui/sap/its/webgui
  • default_host/sap/bc/webdynpro/sap/APPL_SOAP_MANAGEMENT

こんなダイアログが出てくるので、左から 2 番目の [Yes] をクリックしてください。左端の [Yes] との違いは、サブツリーのサービス全てを有効化してくれることです。分かりにくいですね。
image

次に、トランザクション SE38 を実行し、ABAP プログラム W3_PUBLISH_SERVICES を実行してください。
image

このまま F8 を押します。
image

F5 を押して全選択してから、F7 を押して Publish します。
image

このプログラム W3_PUBLISH_SERVICES では、ITS コンポーネントのパブリッシュ(デプロイ)を行ないます。GUI for HTML (webgui) を使うための準備です。webgui は、ITS の時代からある技術で、SAP GUI の画面を HTML の画面に 1:1 対応させるなかなか凄い技術です。webgui はまだ ITS サービスとしての一面が残っていて、一部の機能を使うためには、画像ファイルなどを統合 ITS 上にデプロイしなければいけません。先にも述べましたが、統合 ITS はデータベース上の特殊なリポジトリからファイルを読み込みます。それが MIME リポジトリというもので、上で有効化した default_host/sap/public/bc/its/mimes が MIME リポジトリにあたります。これを使うことで、HTTP 経由で MIME リポジトリから画像データなどを読み込めるようになります。

統合 ITS については、以下のページも参考になります。
http://help.sap.com/saphelp_nw70ehp1/helpdata/en/a6/cf3d4050d89523e10000000a1550b0/frameset.htm

これで準備は完了です。

まずは、WebDynpro for ABAP の標準的な画面として、SOA Manager の画面を見てみます。SAP GUI からトランザクション SOAMANAGER を実行してください。自動的にブラウザが起動してきます。ホスト名が SAPLOCALHOSTFULL で指定したホスト名になっていて、ポート番号は 8000 になっていることを確認して下さい。[Log On] をクリックします。
image

ログオン画面が出てきます。ここでは SAP ユーザー アカウントを入力します。ログオン対象のクライアントは、前のログオンの画面に表示されていた通り、001 です。
image

こんな画面が出れば OK です。
image

SOAMANAGER というトランザクションは、Web サービスのパブリッシュなどを行なう比較的新しいトランザクションで、SAP GUI からは操作することができず、ブラウザから操作するようになっています。全てというわけではありませんが、新しいトランザクションはウェブベースで、というのがトレンドです。

この画面は WebDynpro for ABAP という、SAP 独自のフレームワークで書かれています。画面に表示されるボタンなどのコントロールや、ABAP とのデータの連携などを簡単に作れる技術です。

試しに Google Chrome で開いたら、プロパティシートの他のタブにはコントロールが描画されませんでした。ちなみにさっきのブラウザは IE8 です。時代と逆の対応を見せる SAP は素敵です。

image

話題の IE9 で開いてみました。こちらは問題なし。

image

エンタープライズ ユーザーは、やはり IE なんですかね。

WebDynpro for ABAP の標準的な画面の次に、GUI for HTML を見てみます。次の URL に直接アクセスして下さい。
http://<SAPLOCALHOSTFULL で指定したホスト名>:8000/sap/bc/gui/sap/its/webgui

image

どうでもいい話ですが、このログオン画面に出てくる人が、ジョージ・クルーニーか、髪が生えているときのスタンリー・トゥッチに似ているとしか考えられません。絶対似てる。

それはさておき、さきほどと同様に [Log On] をクリックしてログオンします。

これが GUI for HTML です。

image

NetWeaver 7.02 になって、さらに見た目が綺麗になりました。昔は全然使えない代物でしたが、これならけっこうありです。しかしよくもまあ GUI の画面をここまで再現したものです。

比較的複雑なトランザクション SE80 を実行して、適当なプログラムを開いてみました。この程度なら普通に動く。

image

SE80 は Chrome でも動きます。プロパティ シート コントロールがダメなのでしょう。

image

もちろん IE9 でも余裕。

image

[SAP] ABAP 開発環境をインストールする Part3

前回ので SAP NetWeaver ABAP のインストールは完了しました。ちなみに、試用版のインストールにおける傾向と対策は、下記のような感じでしょうか。

  • そもそも SAPinst が起動しない
    → OS など、環境が対応していない
    → JRE が入っていない
    → アンチウイルス
    → 偶然(サーバー再起動で直ったりします)
  • Windows ユーザー作成
    → パスワードポリシー
  • NetWeaver 起動
    → メモリ不足
    → TCP ポートの競合
    → ネットワーク関連
    → 偶然

エラーの原因は様々なので、結局はイベントログや、NetWeaver の起動ログなどを見て調べることになります。検索エンジンで検索すると、SDN のフォーラムなどがヒットすることもよくあります。必ず英単語で検索しましょう。

次に MaxDB の GUI クライアントツールと SAP GUI をインストールします。前者はゲスト OS、後者はホスト OS にインストールします。

MaxDB の GUI クライアントツールは 2 種類あり、今回ダウンロードした試用版には、Database Manager と、MaxDB Database Studio の両方のインストーラが含まれています。用途は同じなので、どちらか一つをインストールすれば十分です。後者の Database Studio の方が新しく、機能も多いです。しかしDatabase Studio は、Eclipse のプラグインとして開発されており、Database Manager より高負荷です。試用版ではどちらも 32bit ですが、Database Studio は 64bit 版があったりと、それなりに有利な点もあるのですが、起動/停止や、各種パラメータ設定などの基本的な機能は Database Manager でも当然行えます。32bit しかリリースされていませんが、64bit OS でも問題なく動きます。そんなわけで、Database Manager をインストールします。

以下のインストーラを実行して、ウィザードに従って進めるだけです。
MAXDBTOOLS\DBM76.exe

参考までに、Database Studio のインストーラは下記のファイルです。
MAXDBTOOLS\maxdb-studio-desktop-win-32bit-i386-7_8_01_16\SDBSETUP.exe

次に、SAP GUI をインストールします。今回はホスト OS に入れますが、もちろんゲスト OS に入れても動きます。NetWeaver 7.02 の試用版に同梱されているのは最新版の SAP GUI 7.2 のようです。7.2 は Windows 7 にも対応しており、もちろん NetWeaver 7.00 や R/3 などの過去の SAP 製品にログオンすることも可能です。インストーラは下記jのファイルです。

GUI\SAP_GUI_FOR_WINDOWS_720_PL3_CORE\SAP_GUI_for_Windows_7.20_PL3_CORE_Components.exe

なお、これは正式には SAP GUI for Windows というアプリケーションで、SAP GUI for Java と SAP GUI for HTML というアプリケーションも存在しています。for Java は 今回の NetWeaver 7.02 Trial にも入っています。名前の通り Java アプリケーションなので、Windows 以外にも Linux や Macintosh でも動くと思います。試したことはないですが。SAP GUI for HTML は、Web アプリケーションで、これは NetWeaver ABAP の機能の一つなので、特にインストールすることなく、誰でも使えます。微妙に設定が必要ですが、規定の URL にアクセスするだけです。

SAP GUI のインストールもウィザードに従って進めていくだけで、特筆すべきところはなしです。

以上でインストール作業は完了です。

細かい操作手順については、そのうち書いていく予定ですが、とりあえず起動/停止の手順と、SAP GUI 操作の初歩の初歩を紹介します。

まずは NetWeaver の起動/停止。方法はいろいろありますが、GUI を使った基本的な操作から。

NetWeaver をインストールし終わると、デスクトップに SAP Management Console というショートカットができます。これが SAP の GUI 管理ツールです。MMC のスナップインとして自動的にインストールされています。SAPMMC と呼ばれることが多いです。[ファイル名を指定して実行] に sapmmc.msc と入れて実行しても起動できます。

image

MMC スナップインとして追加されている、ということは、そうです、COM です。%SystemRoot%\System32\sapmmc.dll という DLL が存在し、こいつが COM サーバーとして動いています。こいつの仕様が公開されているかどうかはちょっと不明ですが、見たことないです。プログラム的に NetWeaver の起動停止を行ないたい場合は、WSDL が公開されている Web サービスを使うことができます。そもそもコマンドラインツールがあるので、それを使うことが多いです。

こんな画面です。直感的に分かると思いますが、三角が起動で、四角が停止です。なお、このツール自体は、Windows サービスである sapstartsrv.exe と SOAP で通信しており、sapstartsrv サービス経由で起動/停止、及び、コンソールに表示されるプロセスのステータス情報の取得などを行なっています。アイコンが緑色だと起動で、黄色は起動/停止中、灰色が停止です。ライセンス期限が切れると赤くなったりと、カラフルなやつです。
image

NetWeaver は SAPMMC で停止できますが、MaxDB インスタンスは止まっていません。そこで、インストールした Database Manager を使います。スタートメニューとデスクトップにショートカットができているので、そこから起動します。このツールも、見たとおりに操作すれば OK です。ただし、こちらは最初にインスタンスを登録しなければなりません。今回の NetWeaver 試用版では、以下の情報でインスタンスを登録してください。

  • データベース名: NSP
  • ユーザ名: superdba または control
  • パスワード: NetWeaver インストール時に入力したパスワード

インスタンスが登録されると、下図のようにインスタンスの情報が出てきます。シンプルで分かりやすいです。ツールバーの赤いボタンで停止、緑のボタンで起動です。
image

当然のことですが、停止の時は、NetWeaver が先で、その後にデータベースを止めます。起動はその逆で データベース、NetWeaver の順で起動します。実は NetWeaver も データベースも起動中のまま、OS をシャットダウンしても意外と平気だったりしますが。

起動/停止を覚えたところで、次は SAP GUI の操作です。こんな外見です。SAP GUI 7.1 とちょっと見た目が変わりました。
image

こちらも MaxDB と同様、インスタンスを自分で追加しなければなりません。Ctrl+N を押すと、新規エントリ画面が表示されるので、ウィザードに従って進めていきます。

[ユーザ指定システム] のまま、[次画面] をクリックします。
image

必要な情報を入力します。今回インストールしたシステムは以下ですので、それを入力します。

  • システムID: NSP
  • インスタンス番号: 00

あとはデフォルト設定でよいので、ここで [終了] をクリックします。

image

システムが追加されました。ダブルクリックすれば起動します。
image

ですが、その前に、サーバー側でファイアウォールの設定が必要です。SAP GUI と NetWeaver は DIAG というプロトコルで通信していることは触れましたが、DIAG も TCP の上位プロトコルなので普通にポートを開ければいいです。今回はインスタンス番号が 00 なので、3200 ポートを許可する受信ルールを作れば接続できます。使い方次第では他のポートも開ける必要がありますが、とりあえずここでは 3200 だけ開けます。例えば Web サーバーとしては、HTTP ポート 8000 を使っています。

image

接続するには、SAP GUI に追加したエントリをダブルクリックします。ログオン画面が出てくるので、既定のユーザーアカウントを入力します。以下はその一覧です。
(クライアント/ユーザー名/パスワード)

  • 000/SAP*/インストール時に入力したパスワード
  • 000/DDIC/インストール時に入力したパスワード
  • 001/SAP*/インストール時に入力したパスワード
  • 001/DDIC/インストール時に入力したパスワード
  • 001/BCUSER/abcd1234

クライアントって何、という質問に答えるのはけっこう厄介。独立したデータを持てる、NetWeaver 独自の単位です。データの一部を完全に独立して持つことができ、一方 ABAP プログラムは全てクライアント間で共通です。特に決まった使い方はなく、例えば、1つの検証サーバーを立てておいて、検証用クライアントをたくさん作っておくと、複数のデータでの検証が一つのサーバーで実施できてエコ!みたいな感じです。

000 というのは特別なクライアントなので、むやみやたらと変更してはいけません。そんなわけでここでは 001 に ユーザー BCUSER でログオンします。

image

ログオンすると以下の画面が表示されます。
image

左上のテキストボックスに、数百と存在する「魔法のおまじない」を入力してエンターキーを押すと、そのおまじないに沿ったプログラムが実行され、NetWeaver のあらゆる機能を使うことができます。ERP であれば、受注や入庫、入金といった基幹システムの画面が出てくるのです。この「魔法のおまじない」のことを、トランザクションコードと呼びます。

[SAP] ABAP 開発環境をインストールする Part2

インストーラのダウンロード、インストール環境の準備は終わったので、満を持してインストーラを起動します。が、その前に、SAP の構成について簡単にまとめます。

まず、SAP って何よって話。基幹システム、ERP、R/3、SD/MMとかでしょ?などといろいろ答えが返ってきそうです。専門分野によっても異なるんでしょうね。厳密にいうと、SAP という製品は存在せず、SAP とは単なる会社名です。多岐にわたる製品を販売していますが、その中でもメジャーな製品は SAP ERP と、SAP NetWeaver でしょうか。で、SAP ERPって何、と聞く人はあまりいないでしょう。文字通り、SAP 社が開発/販売している ERP システムです。

混同されやすいのが SAP NetWeaver です。端的に言えば SAP NetWeaver とは、SAP 社が開発/販売している アプリケーション サーバーの製品名です。ジャンル的には Apache や IIS、J2EE と同じですね。IIS の場合は C# や VB.NET で開発して、Web アプリケーションとしてブラウザで閲覧するのが主要な使い方ですが、これが NetWeaver の場合は、ABAP や Java で開発して、ブラウザ、もしくは SAP GUI という専用クライアントから操作する、という話になります。

開発言語は ABAP と Java の 2種類あります。NetWeaver の上に ERP のロジックを ABAP プログラムで書いてデプロイしたものが SAP ERP です。(正確にいうと、ERP の Java コンポーネントもありますが・・・) 基本的には NetWeaver ABAP と NetWeaver Java は別々に構築する必要があります。1つのNetWeaver で両言語をサポートさせる構成については、NetWeaver 7.01 になってから不可能になりました。なお、NetWeaver Java は一応 J2EE 準拠だったと思います。

ABAP は ERP などの基幹系のロジックを記述するバックエンドのプログラムに使い、Java は フロントエンドの UI 開発に使う、というのが基本的な使い方です。NetWeaver ABAP 自体は HTTP, SOAP, RPC (RFC) などのプロトコルに対応していますが、SAP GUI という専用クライアントは DIAG とかいう未知のプロトコルを使って通信しています。DIAG の試用は確か非公開です。したがって、SAP GUI のようなクライアントソフトを他社が開発することはできないようになっています。

最後に、NetWeaver は RDBMS がないと動きません。

以上を踏まえて、今回インストールするのは NetWeaver ABAP です。ダウンロードした 4GB 弱のファイルの中に以下のものは全部含まれています。JRE は別途ダウンロードが必要でしたけどね。

  • SAP NetWeaver ABAP 本体
  • MaxDB サーバー
  • MaxDB 管理ツール (CUI)
  • MaxDB 管理ツール (GUI)
  • SAP GUI

最初の 3つ、NetWeaver と MaxDB は一度のインストールで勝手に入ります。MaxDB の GUI 管理ツールと、SAP 専用クライアントである SAP GUI は別途インストールする必要があります。今回は VMware 仮想マシンを使うのですが、SAP GUI だけは ホスト OS にインストールすることにします。

今回も前置きがずいぶん長くなりましたが、まずは NetWeaver 本体のインストールです。ゲスト OS でインストーラを実行します。ダウンロードしたファイルを全部ゲスト OS 上にコピーするのは面倒なので、解凍したインストーラを ISO で固めて、ゲスト OS にマウントさせると楽です。ISO 化は Windows AIK に付属している oscdimg を使いました。もちろん WinRAR でもなんでもいけます。

次のプログラムを実行します。管理者特権が必要なので、Administrator でインストールします。

SAP_NetWeaver_702e_Installation_Master\IM_WINDOWS_I386\sapinst.exe
image

図のように選択し、[Next] をクリックします。
image

インストールのための環境変数などが自動的に設定されるので、一度ログオフする必要があります。[OK] をクリックすると、ログオフします。
image

使用許諾を読み、[I accept] を選択してから [Next] をクリックします。
image

パスワードを設定します。このパスワードは、SAP用に作成される Windows ユーザー、MaxDB ユーザー、SAP ユーザーに適用されます。Windows のパスワードポリシーに合致していないと、インストール中にユーザー作成が失敗して面倒なことになるので、それなりに複雑なものを設定しましょう。私は pswd_NSP を使っています。
image

マシンのスペックが足りない、と怒られます。インストール画面にも出ていますが、無視可能です。[Cancel] をクリックします。
image

サマリ画面が表示されます。[Next] をクリックするとインストールが開始されます。なお、選択画面が表示されずにデフォルト設定になっているものが数多くあるので、必ず設定項目を確認しましょう。特に、インストールドライブは要注意です。今回はすべて C ドライブにインストールするのでデフォルト設定で構わないのですが、もしドライブを分けたければ、ここで必要な項目にチェックをつけて [Revise] をクリックして下さい。すると、ドライブ選択の画面が表示されます。インストールドライブのほかに、データベースファイルの個数や、サイズなども変更可能です。なお、SID については NSP で固定です。確かこれを変えてインストールを続行すると、インストールがエラーになってしまいます。なお、NSPというのは Mini SAP の略語です。 書き忘れましたが、インスタンス番号は 00 です。これは変えられるかもしれませんが、やったことないです。
image

インストール中の画面です。Import ABAP というフェーズで数時間かかります。エラーのときはポップアップが出るので、何も出ていない限りは問題なく動いています。気長に待ちましょう。
image

プロセッサもメモリも頑張っています。
image

無事にインストールが終わると、次のポップアップが表示されるので [OK] をクリックします。私の環境では特にエラーもなく、6時間ぐらいかかりました。ずっと張り付いているのは現実的ではないので、夜にインストールして睡眠を取りましょう。
image

[SAP] ABAP 開発環境をインストールする Part1

せっかくなので、SAP についても取り扱っていこうと思います。

転職サイトなどでは、希望職種でエンジニアを選ぼうとすると、汎用系、オープン系、Web 系に分かれている場合が多いですね。SAP 自体は Windows や Linux でも動かすことができるので、オープン系と言えなくもないのですが、SAP システムそのものは汎用系になるでしょう。ABAP を中心に触ってきた SAP 系エンジニアだと、C や Java を書けない人が多い気がします。SAP の知識はそれだけで飯の種になっていたという事実の表れでしょうか。というのも、SAP 関連の情報はほとんどネット上に出回っていませんし。SAP に限らず、いわゆる基幹系システム、メインフレーム系の OS/DB、なども同様ですね。高いお金を払って、トレーニングを受けなけれななりません。一応本も出ていますが、けっこう古い情報だったりします。

さて SAP は、ライセンスを購入しなくても、それなりに情報を公開していたりします。以下のサイトは基本中の基本です。

SDN – SAP Developer Network
http://www.sdn.sap.com/irj/sdn
開発者向けの情報が中心ではありますが、リリースされたばかりの製品情報や、製品概要、製品デモなどもあるので、一般ユーザーにも有益な情報があったりします。フォーラムはかなり使えます。
いつからか、SDN でネット検索すると SDN48 が先頭に出てくるようになってしまいました。日本おそるべし。

SAP Help Portal
http://help.sap.com/
オンラインヘルプです。丁寧に書かれていて読みやすいのですが、製品リリースからしばらく経たないとヘルプが出てきません。最近は日本語訳リリースのペースも早くなってきて助かります。内容については、全機能を網羅しているわけではないので注意が必要です。ユーザー向けの情報というよりは、管理者、エンジニア向けのアーキテクチャの説明が中心だったりします。検索機能がいまいちなので、検索には慣れが必要かもしれません。

日本人にとって、いつも問題となるのは言語の壁ですね。SAP に限らず、欧米企業の情報はやはり英語で知るのがベストです。逆に、英語に抵抗がなく、ちょっと読めるだけで大多数の日本人よりは優位に立てるんだ、と前向きに考えると幸せになれます。タイムリミットが迫ってきて、焦っているときに英語の情報しかないと泣きそうになりますが。

閑話休題。SAP を始めるにあたって、まずは環境を用意しなければなりません。意外と知られていない事実ですが、NetWeaver だったら無償ダウンロードが可能です。さすがに ERP は無理です。

大昔に ITPro で無償版 SAP が紹介されたことがありましたが、中途半端に終わってしまっています。執筆者が退職されたのでしょうか。

http://itpro.nikkeibp.co.jp/article/COLUMN/20080214/293837/

何しろ 2年前の記事なのでバージョンが変わっていますが、この記事と同じようなことをやってみます。ようやく本題です。

まずはインストーラをダウンロードしなければなりません。先に紹介した SDN にアクセスし、Downloads > SAP NetWeaver Main Releases とリンクを辿っていきます。

http://www.sdn.sap.com/irj/scn/nw-downloads

2010 年 12 月 26 日現在での最新版は SAP_NetWeaver Application_Server_ABAP_702_SP6_32bit_Trial_Version です。SAP NetWeaver 7.0 EhP2 の ABAP スタックです。メインリリースだと 32bit 版はもう存在しないはずですが、逆に無償版はまだ 64bit に対応していません。

#### 2015/3/4 追記

もうこの記事を書いてから 4 年以上も経っていますが、NetWeaver のインストールをやり直してみました。これからインストールを行なうという方は、こちらのページをご覧下さい。NetWeaver 7.03 64bit を Windows Server 2012 R2 にインストールする手順です。

Calculating PI in ABAP | すなのかたまり
https://msmania.wordpress.com/2015/03/04/calculating-pi-in-abap/

####

なお、無償バージョンのライセンスは Developer Edition とTrial Version があり、微妙に使い方が違っているので注意です。Developer Edition の方が使いやすそうですが、NetWeaver 7.02 はまだ Trial しかないので、ここでは 7.02 Trial のインストールを紹介します。

http://wiki.sdn.sap.com/wiki/pages/viewpage.action?pageId=156697029

インストール要件などが書いてあるページ上部の [Click here for download] をクリックすると使用許諾が表示され、同意するとダウンロードできます。ファイルは 2つに分割されていて、2GB と 1.8GB です。今となってはあまり驚きに値しないサイズですね。ダウンロード速度はけっこう速いです。

ブログに載せるということもあり、一応使用許諾を読んでみました。「運用環境で使わないでね」 「逆アセンブルしないでね」 というようなことが書いてあります。画面キャプチャも SAP の所有物ですよ、ということは書かれていますが、ウェブに公開するなとは書いていない、と。

さて、次に 2つのファイルをダウンロードしました。RAR 形式を解凍できるソフトが必要です。分割解凍しているものなので、必ず二つともダウンロードしてから解凍しましょう。

  • NWASABAPTRIAL70206.part1.rar
  • NWASABAPTRIAL70206.part2.rar

フォルダ構成が複雑で分かりにくいのですが、とりあえずは無視して次にインストール環境を用意します。今回は以下の環境を用意しました。

  • サーバー: VMware 仮想マシン
  • CPU: 1つ
  • RAM: 2GB
  • スワップメモリ: 4GB
  • OS: Windows Server 2008 SP2 32bit 英語版
  • HDD: 100GB
  • その他: DHCP、ワークグループ、インターネット接続なし

一応ダウンロードページのインストール要件に合わせてあります。試しに 64bit 環境へのインストールも試みましたが、エラーになってダメでした。ごり押しすれば入りそうな気もしますが、それは応用編ってことで。

物理メモリ 2GB に加え、スワップ領域を 4GB 確保しています。インストールの後半で SAP が起動されるのですが、そのときにスワップ領域も使い果たすと、当然インストーラーがクラッシュします。メモリ領域は余分に確保しておきましょう。

ハードディスクに関しては、インストール後の状態で、OS も含めて 50GB ちょうどぐらいです。使っていくうちに増えていくので、100GB ぐらい用意しておくと安心です。

SAP のインストーラである SAPinst は GUI が Java で書かれているので、Java が必要です。JRE 1.4.2 か JRE 1.5 が必要と書かれていますが、1.4.2 はたぶん入手不可能なので、手元にない人は 1.5 をダウンロードしましょう。ライフサイクル的にはもうサポート切れですが、まだダウンロードは以下の URL から可能です。Java6 でも動きそうな気はしますけどね。誰か試してみてください。

http://java.sun.com/j2se/1.5.0/ja/download.html

これでインストール環境が整いました。インストーラ起動は次回で。