Code Inspector: 2種類の検索の使い分け

Code Inspector の検索機能、便利ですね。
最近使いまくってます。

ところで、キーワード検索に使用するノードには

  1. トークンの検索
  2. 命令パターンの検索

の2種類があります。

たとえば、「TEST1」というリテラルが使用されているかを検索する場合は、
『トークンの検索』を使用します。

検索ダイアログでは、リテラルにチェックをして、文字列として ‘TEST1’
(シングルクォートを含める!)を指定して実行します。

l_name1 = 'TEST1' .

というソース行があった場合、トークンは

  1. l_name1
  2. =
  3. 'TEST1'

です。検索で使用するトークンにはピリオドは含まれません。
トークンとしては 'TEST1' なので、文字列に TEST1 と指定しても一致しません。

また、

CREATE OBJECT lr_main
    EXPORTING
        name1 = l_name1.

のようなソース行があった場合、『命令パターンの検索』で
文字列として「CREATE OBJECT + EXPORTING NAME1 = +」とすることにより
この行を見つけることができます。
『命令パターンの検索』では、文単位でパターンを指定できます。
また、パターン中の「+」は、1つのトークンに対応します。
複数のトークンをまとめてしまう場合は、「*」を指定します。
「+」や「*」は、それ以外の文字につけて使用すると、普通のワイルドカードに
なります。
「CREATE OBJECT + EXPORTING NAME1 = L_NAME+」でも、上記のソース行に
マッチします。

2種類の検索方法をうまく使い分けてください。特に『命令パターンの検索』を
使いこなすと、格段に検索効率がアップするはずです。
是非お試しください。

| | コメント (0) | トラックバック (0)

バックグラウンド起動のプログラムへのデータの渡し方

ABAPプログラム間でデータ共有のために使用するメモリには、下記の種類があります。

ABAPメモリ → 内部セッション間まで有効(同一ウィンドウで有効)
SAPメモリ → 外部セッション間まで有効(同一ログオンで有効)
共有メモリ → ユーザセッション間まで有効(同一アプリケーションサーバで有効)

https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/dbafe890-0201-0010-95a1-c9a7d2809b77
(ABAP Memory Chart for 4.6C: PFD 412KB)

※ ABAPHELPの「ABAP - 概要項目」のサブノード「ABAP - メモリ機構」も参照してください。

コマンドで「/O...」とやったときに新しいウィンドウが開きますが、
これは別の外部セッションが開始されています。
システムメニューの「セッション開始」とは「外部セッションの開始」ということですね。

汎用モジュールなどは、プログラムの内部セッション中で実行されます。

オンラインモードでSUBMITすると、別の内部セッションが作成されます。
ABAPメモリは内部セッション間まで有効なので、SUBMITされたプログラムで
IMPORTすることができます。

一方、バックグラウンドモードでSUBMITしたプログラムは、
別のユーザセッションで実行されます。
そのため、ABAPメモリではデータを渡すことができません。
また、SAPメモリでも、外部セッション間までなので、データを渡すことができません。

ちなみに、NetWeaverでは、SAPメモリを使用するためには、
TPARAというテーブルにIDを登録する必要があるようです。
ただ、拡張構文チェックでエラーになるようなので、
有効化はできるかもしれません。

もうひとつのメモリに共有メモリがあります。
添付したサンプルの004と005で使用しています。

この中で INDX というテーブルを使用していますが、これはテスト用なので、
このテーブルをコピーしたアドオンテーブルを使用する必要があります。
詳しくはEXPORT命令のヘルプのサブノード「EXPORT - テーブル構造」を見てください。

共有メモリは他のユーザセッション(他のログオン)からも見れるので、
複数プログラムで同じテーブル・AREA・IDを使用しないように注意しましょう。
たとえば、ユーザAがサンプルプログラム 004 を実行した場合、
サンプルのようにIDが固定されていると、ほぼ同時にユーザBが
同じプログラムを実行すると、一方の入力値で他方の入力値が上書きされます。
これは、アプリケーションサーバ内で有効なので、サンプルのように
クライアント指定した場合には、別クライアントの実行からも影響を受けます。
IDにユーザ名を含めるようにすると、ある程度回避ができるかもしれません。
しかし、同じユーザが続けて実行した場合には、やはり問題が発生します。
ロックをかけることもできますが、解除のタイミングが難しいです。

※ サンプル(008と009)を添付してあります。

また、データが不要になったら、
DELETE FROM SHARED MEMORY ... で領域を開放する必要があります。

このようなことから、メモリを使用するのではなく、
単純に選択画面を使用してSUBMITのパラメータとして渡すことが
一番良いように思います。

※ サンプル(010と011)を添付してあります。

こちら(共有メモリ:サンプルプログラム)からダウンロードできます。

ALVの表示に「zcl_salv_table_helper」を使用しています。
こちら(デザインパターンの適用(ALV OM)サンプル)で公開中です。

ABAP Unit のサンプルも使用します。

| | コメント (0) | トラックバック (0)

Code Inspector: SAPオブジェクトの検索

以前、「ソースからの文字列検索」という記事を書きましたが、
その後、SAP が作成したものではエラーになるとのご指摘をいただきました。
そこで、調査の結果、回避方法を見つけましたので、ご報告します。
手順は以下の通りです。

  1. オブジェクトセットを作成する。
  2. オブジェクト選択フレームのProgramタブで、プログラム名を範囲指定する。

たとえば、パッケージ S_CODE_INSPECTOR のクラス CL_CHK_CODE_INSPECTOR を検索す
る場合、
Program タブで
「CL_CHK_CODE_INSPECTOR」 TO 「CL_CHK_CODE_INSPECTORA」
とします。「CL_CHK_CODE_INSPECTORA」は存在しないクラスなので、
実際には「CL_CHK_CODE_INSPECTOR」のみが検索されます。

※ Programタブ以外は何も指定しなくてOKです。

ただ、これはあくまでもプログラムの穴を通しているだけなので、
BASISのバージョンによってはうまくいかないことがあるかもしれません。

なお、システムパラメータに下記を追加すれば、SAPオブジェクトも検索可能になります。

abap/slin_intcheck = ON

まだ、これによって、他にどのような影響があるかはわかっていません。
ご存知の方、ご教示ください。

[追記]

やはり、環境によって動きが違うようです。

確実なやり方は、次の通りかと思います。

  1. クラスビルダなどで、CL_CI_OBJECTSET を開く
  2. CLASS_CONSTRUCTOR を開き、上記パラメータの判定をしている部分にブレイクポイントを置く
  3. トランザクションSCIでインスペクションの新規作成などを行う
  4. デバッガが開いたら、L_SLIN_INTCHECK を「ON」に変更して F8 キー
  5. 後は通常通り

いかがでしょうか。

| | コメント (0) | トラックバック (0)

WebDynpro:FQDN の脅威

新しいお試し版をインストールして Web Dynpro アプリケーションを起動したのですが、
FQDN の制限でエラーになってしまいました。
しかし、このPCではドメインを割り当てていないので、このままではWeb Dynpro が動かせません。
困りました。

<追記>

DNSサーバをインストールして、適当なドメインを割り当ててみましたが、
インストーラが逆引きを行って、そこでエラーになります。

DIGではちゃんととれているんですが?

<追記2>

よくわからないので、とりあえず Profile パラメータを直接書き換えました。

参考: SDN Forum の Serdar さんの投稿

TIMEOUT も発生したので、そちらも Profile で対応しました。

| | コメント (0) | トラックバック (0)

NetWeaver 7.01 ABAP Trial SR1 SP3

お試し版の新しいものがリリースされていたので、
早速ダウンロードしてインストールしました。
かなり安定しているようで、一発で成功しました。
途中でセキュリティソフトがインターネットアクセスをブロックしたんですが、
以前のものだとこれでインストールが失敗していましたが、
今回は問題なくインストールを続行できました。

ここから取得可能です。

| | コメント (0) | トラックバック (0)

時代はBPM?

2008年度の国内BPM/BAM市場は前年比11.4%増,ITR調べ (IT Pro)

昨年度はかなりBPMが健闘したようですが、今年度はどうなるんでしょう。
SAP社は5位7.5%ということで、1位のIBM13.8%には大分差がつけられています。
SAPのBPMはNetWeaverの機能の一部として提供されているはずですが、
おそらく国内ではABAP環境でのインストレーションが多いため、
BPMの機能が活用されていないのではないでしょうか?

| | コメント (0) | トラックバック (0)

エコ!

以前からいろいろな取り組みをしてきたSAPですが、
ついにCO2の測定機能も取り込みそうです。

@ITの記事「SAP、CO2排出量管理技術ベンダの米Clear Standardsを買収」

SDNブログなどでも Sustainability という言葉が最近よく見られるようです。
欧州では環境規制が強力なようですから、SAPが積極的に取り組むのも当然でしょうか。
記事にもありますが、環境保護のソリューションを提供するということは、
SAPがCO2削減に貢献しているということになりますから、
SAP社にとっては、直接的なメリットもありそうです。

自分の勤務先でもEMSが導入されていますが、ソフト開発の会社としては、
こういったビジネスに結び付けられる対応ができると好いんでしょうね。

| | コメント (1) | トラックバック (0)

この人は!

http://www.chunichi.co.jp/article/car/news/CK2009051402000200.html

この記事のアガシさんってあの人ですよね。こんなところにいたんですね。

| | コメント (0) | トラックバック (0)

日本語版ヘルプ

ヘルプポータルでNetWeaver7.0の日本語版が公開されました。

ただ、英語版がSP18(2009年1月版)なのに対して、日本語版はSP12(2007年5月版)とかなり古いようですので、ご注意ください。

| | コメント (0) | トラックバック (0)

NetWeaver の資料を更新しました{その2}

先日アップした資料を更新しました。
「コンポーネント」シートの図をコンパクトに修正してあります。
ここからダウンロードしてください。「NetWeaverの概要」です。

| | コメント (0) | トラックバック (0)

«ABAP クイズ:PERFORM命令のパラメータ