2013-04-05

[SAP] eCATTのこと

どもです。

まさかの連投。大丈夫か > 自分


えと、今
「今後の作業で使うから」
と言う理由で eCATT の勉強してます。

CATTと言うもの自体、話には聞いていたけど使った事が無かったのでいい機会だと思ってSAPのOnlie Helpを中心に調べてるんですが…イイなぁ…これ。

いや、何がいいってスクリプトとデータ用意すれば自動でやってくれるんですよ。

で、こう思うんです。
「なんでどこも使わないんだろう?」


答えは簡単。
「テスト結果にスクショが付かないから」

恐らくこれ。

いままで関わったプロジェクトでテスト(単体、結合問わず)と言えば ー> スクリーンショット。
これ必須。

つまり、テストの結果として
「検証可能な資料」を残す、と言う意味で「スクショ必須」なんですね。

でも、eCATTの場合、テスト結果はLogの形で保存される。
んだけど、これ「見方が分からない」と検証できないんですね。

で、実はeCATTなんて誰もマトモに使って居ないから、テスト結果としての「Logの見方が分からない」んですね。
今回のeCATTの使用はあくまでも大量データ投入であってテストの為じゃないんですね。


ううーーーん。
ハッキリ言って、イチイチスクショ取る単体テスト。
その後、Excelにまとめるんだけど、その時間と労力って、投入しただけのものは有るんだろうか?
なんて思ったりするんですね。
SAP(と言うかABAPというか)にはカバレッジツールなんかも有るんです。ですが、これも有効活用されているとは言い難い状況。

テスト工数を削減するんなら、こういうツールを積極的に使って見ればいいのにねぇ。


 と言う訳で、まあ、お勉強はまだ続きます。


では〜。

「人類の歴史を変えた発明1001」

どもです。

最近、図書館から借りてきて、「大当たり」だった本を紹介します。



人類の歴史を変えた発明1001

とにかく、一家に一冊あってもいい程の内容。

紀元前260万年頃の石器に始まって、最後は2008年の大型ハドロン衝突型加速器までが年代ごとにまとめられています。
ほぼ1ページ1項目なのでそれぞれの解説はそれほど詳しくは無いものの、ページをめくれば「ほ〜っ」「へぇ〜っ」ってなること請け合い。

で、最後が2008年…なので当然知っているものも出てきます、iPhoneとかブルーレイとか初代マッキントッシュとかね。
あと、意外なものが意外な年代に出てきたり(例えば、エスカレーターが1891年に出てきたり)
意外なものが意外なところに出てきたり(これは…ひみつ…読んだらいいよ)

考えてみれば、今の50代から40代後半頃(までかな?)は家庭に百科事典が有ったんじゃないかと思います。(少なくともウチにはあった)
自分なんかは、学校の教科書見る時間よりも百科辞典見てた時間のほうが長いんじゃないかと思います。でも、今はネットで調べ物は済むし、少なくとも紙の書籍であったものよりもずっと最新情報だしで、出版社ももうどこも出してないですよね。
でも、いつでもPCが使えるわけじゃないウチの子供らにしてみれば書籍の形で手元にあると暇つぶしに手にとって拾い読みしてますが、それで十分だと思うんです。
そうする中で自分ながらに発見とかがあれば、そういうモノって結構忘れないものですからね。
ま、話のタネにはなるんじゃないかと思うんです。


あと、大人が読んでもおもしろいし、ワンボードマイコンの頃からの事を知ってる人なら、この本の中の例えばハードディスク・ドライブのページで「おーっ、このデカイハードディスク使ったこと有るぞ」とかそういう話を”誇らしげに”出来ますよん。


個人的には、これ借りてきて子供たちがこっちの思惑通りに喰い付いてくれたことが一番嬉しかったりするんですけどね。  へへへぇ。



てなわけで。

では〜。

2013-04-02

ABAP: Loop AT 〜 [INTO | ASSIGN](改)

どもです。

前回、書いた「ABAP: Loop AT 〜 [INTO | ASSIGN]」なのですが……
ごめんなさい、間違ってましたぁ

と、言う訳で修正したやつをUpします。
間違った奴は、自戒を込めて残しときます。


久々のSAPネタ。
忘れないうちに書いときます。

Loop AT [内部テーブル] INTO [構造体].

  AT NEW [コンポーネント].

  ENDAT.

ENDLOOP.

とした場合、 [コンポーネント]に書けるのは、[構造体]内の項目になります。
しかも、この書き方の場合、 [構造体]がこんな
 ITEM001     TYPE    C LENGTH 10
 ITEM002     TYPE    C LENGTH 10
 ITEM003     TYPE    C LENGTH 10
内容だとして、[コンポーネント]ITEM001 だとすると、
AT NEW でブレイクすると AT NEW 〜 ENDAT 内で参照できるのは、ITEM001だけで
ITEM002以降については文字項目の場合 '*' が詰められて参照できません。

これが最初分からなくって、随分ハマりましたし、恐らくABAPでAT NEW とか「使いにくい」って感じてる人はこれが原因じゃないかと思います。

ところが。
LOOP AT 〜 にはもうひとつの記法が有るのはご存知だと思います。
そう!

LOOP AT [内部テーブル] ASSIGN <フィールドシンボル>.

この書き方の場合でも、先程のAT NEW の書き方がチョット違ってきます同様の書き方になります。

LOOP AT [内部テーブル] ASSIGN <フィールドシンボル>.

  AT NEW [コンポーネント].

  ENDAT.

ENDLOOP.
2013/4/1記
 先の”AT NEW [コンポーネント]”の記述で分かる通り、INTOでもASSIGNでも基本は同じ動作になります。従って、これ以降については、まるまる意味のない記述になります。

誤った原因は、”AT NEW” に続けて書くのが[コンポーネント]で有ることを失念したところ。
自分でテストPG書いた時に何を勘違いしたのか、
AT NEW <フィールドシンボル>-[コンポーネント].
 なんて書いちゃった。当然コンパイラからはエラーメッセージ出されます。
そもそも、書くべきは[コンポーネント]のみで、[構造体]等で修飾する必要も無いもの。

という訳で、これ以降については、「なんぞおかしなこと言っとる」って事で無視して下さい。

多くの方に見に来ていただいてるのに、ホントにすみません。
以後、気を付けます。


INTO では、AT NEW に書けるのは<構造体>内の1項目でしたが、
ASSIGN の場合は、<フィールドシンボル> そのものを書きます。

じゃあこれでどうなるかって言うと、<フィールドシンボル> の参照元の内部テーブルの構造全体がキーとして認識されます。

「…え?じゃあ…どうなるの?」

極端なことをいえば、<内部テーブル>内の全レコードがAT NEWの対象になります。
つまり、”必ずAT NEW”を通ります。
それじゃあ、NEWの意味が無いんですが、重要な点が2つ。
  1. INTOの場合、指定した項目(先の例で言えばITEM001)以降の項目の参照ができませんでしたが、ASSIGNの場合、全ての項目の参照が出来ます。
  2. 任意の複数項目を一つのキーとして使用することができる。
と言う事になります。

例えば、こんなの。

TYPES:
  BEGIN OF TYP001,                    " 内部テーブル構造体1
    ITEM001     TYPE C LENGTH 10,
    ITEM002     TYPE C LENGTH 10,
    ITEM003     TYPE C LENGTH 10,
    ITEM004     TYPE C LENGTH 10,
  END OF TYP001.

TYPES:
  BEGIN OF TYP00A,                    " ブレイクキー構造体
    ITEM001     TYPE C LENGTH 10,
    ITEM002     TYPE C LENGTH 10,
  END OF TYP00A.

TYPES:
  BEGIN OF TYP002,                    " 内部テーブル構造体2
    ITEM00A     TYPE TYP00A,          " ブレイクキー項目
    ITEM003     TYPE C LENGTH 10,
    ITEM004     TYPE C LENGTH 10,
  END OF TYP002.

DATA:
  TB001      TYPE STANDARD TABLE  TYP001,  " 内部テーブル1
  TB002      TYPE STANDARD TABLE  TYP002,  " 内部テーブル2(キー構造有り)
  KEY        TYPE TYP00A.             " キー退避項目
 
FIELD-SYMBOLS:
         TYPE TYP002.             " フィールドシンボル

* 既に TB001 にはデータが入っていてSORTまでされているとします
* ブレイクキー項目の有る内部テーブルにコピー
  TB002[]  =  TB001[].

LOOP AT TB002 ASSIGN .

  AT NEW  .
    IF -ITEM00A <> KEY.
*** ここにブレイク時の処理を記述(今回はWRITEします)
      WRITE: /1(10)   -ITEM00A-ITEM001,
              13(10)  -ITEM00A-ITEM002.

      KEY = -ITEM00A. " KEY項目の更新(これをしないとブレイクしない)
    ELSE.
      NEW-LINE.       " ブレイクしない場合、ただ改行だけ
    ENDIF.
  ENDAT.

  WRITE: 26(10)  -ITEM003, " 非キー項目はそのままWRITE

         39(10)  -ITEM004.

ENDLOOP.

これを実行するとこんな感じに出力される(はず)。

aaaaa   aaaaa  xxxxx yyyyy
               xxxxx yyy00
               xxxxx yyy01
aaaaa   bbbbb  xxxxx yyyyy
               x00xx yyyyy
abbbb   bbbbb  xxxxx yyyyy

キー部分がブレイクした時だけ出力されて、非キー項目はレコード毎に出力されます。

ちょっと面倒な感じもあるし、比較項目を2つ用意してLOOPさせながらIFで比較するって言う旧来のやり方と殆ど変わらない気もするんですが、 フィールドシンボルの場合AT NEW 内で
「全項目へのアクセスができる」
って所が個人的には
すげーーーーー!Σ(・ω・;|||
って単純に思っちゃたんです。(^^;

まあ、覚えておいて…どっかで使うこと…あるかな????


では〜。

SSH Keyを作成してGitHubなどに接続してみる - Qiita

大事なことなので。 SSH Keyを作成してGitHubなどに接続してみる - Qiita : GitHubやGitLab上のリポジトリへgitコマンドでファイルをpushする時に、上手く接続出来なかったのでSSH Keyの作成からやり直してみました。これはその作業ログなので自分...