matsukawar’s blog

個人的な技術ブログです。SAPネタを充実したい。Twitter : https://twitter.com/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などにアップしていければいいなと思っています。 

TFSの作業項目のカスタマイズは簡単にできます

Visual Studio / Visual Studio Code Advent Calendar 2015 19日目の記事です

はじめに

今日は、TFSで管理されるタスクやテストケース、バグなどの項目のカスタマイズのやり方について書きたいと思います。
また、TFSのポータルのグラフ表示の機能で、視覚的に残工数や残作業項目を表示する方法についても触れたいと思います。

現在、タスク管理をするためにRedmine等を利用されている方が多いと思いますが、
TFSのタスク管理も、自由にカスタマイズできます。しかも、PowerToolsを使用することにより、
より簡単に変更することができるようになっています。
※簡単にできちゃうので、問題を起こしたくない場合は権限周りを見直す必要あり。

ある程度自由にカスタムフィールドが追加できれば、チームに沿った運用ができるようになります。

なお、この記事では、オンプレのTFSに関して記載します。
Visual Studio Onlineのプロセスの編集に関しては以下の記事を参照してください(英語)

Visual Studio Online Process Customization
http://blogs.msdn.com/b/visualstudioalm/archive/2015/05/05/visual-studio-online-process-customization.aspx

手順

1. TFS Power Tools を入れます

Visual Studio をインストールした後、Microsoft Visual Studio Team Foundation Server 2015 Power Tools を追加でインストールします。※VS2013の場合は、Microsoft Visual Studio Team Foundation Server 2013 Power Tools を使用ください。

インストールすると、VSのメニューに「ツール」−「Process Editor」が追加されます。

2. Process EditorでTFSにつなげる

VSのメニューの「ツール」−「Process Editor」−「Work Item Types」−「Open WIT from Server」をクリックします。
対象のTFSにつなぎ、カスタマイズしたい作業項目を選択します。

そうすると、以下の様な画面が開きます。(今回は"バグ"を選択。)

Fields :
各入力欄の定義一覧です。名前空間にSystem.HOGE、や、Microsoft.VSTS.HOGEとなっているものは、TFSの標準フィールドですので、これらのアイテムはいじらないほうが無難です。独自のカスタムフィールドを作る場合は、まずここに定義を行います。

Layout :
"Fields"で定義した項目を画面に配置します。項目の表示順番の変更や表示ON/OFF、追加。また、グルーピングや、ラベルの設定や空欄時のガイダンスなど、制限はありますがカスタマイズ可能です。

Workflow :
タスクの状態遷移と状態遷移時の理由を管理します。TFSの作業項目には、"状態"と"理由"という2つのフィールドが存在します。"状態"はそのまま、作業項目の状態を表し、"理由"というのは、タスクの状態遷移の理由になります。


Workflowでは、作業項目の状態遷移の理由のカスタマイズができます。
以下の図では、作業項目:バグについて、「新規」→「コミット済み」に状態遷移した際に選べる理由として、「チームによるコミットメント」という理由1個が選択できるという設定になっています。

状態遷移の際、例えば、作業項目が新規にTFSにコミットされた場合や、
作業項目をクローズする際に入力する理由をカスタマイズする場合、この画面にてReasonの定義を増やします。
ただし、各状態遷移ごとの設定になります。

3. カスタムフィールドを追加する

Fieldタブの"New"ボタンをクリックし、新規の項目を追加します。
"Field Definition"で以下の様に入力します。

Reference Nameは必須項目なので、「チームプロジェクト名.フィルド名」などと任意に命名しておきます。
次に、"Rules"タブで値の定義と初期値などを設定していきます。
設定するのは、ALLOWEDVALUESとDEFAULTです。

ALLOWEDVALUESでAAA, BBB, CCCという項目を定義した例

DEFAULTでBBBを定義した例

基本的にこの2つで事足りると思いますが、より細かい設定を行う場合は以下に事細かく書いてあります。

作業項目フィールドへの規則の適用
https://msdn.microsoft.com/ja-jp/library/ms404857.aspx

VSの保存ボタンをクリックすると、設定した内容がTFSに反映されます。

4. カスタムフィールドを配置する

先に作った、カスタム項目を、画面に配置していきます。
この画面はあくまでも、項目を画面に配置したり、ラベルを変更する程度の簡単なレイアウト機能です。
また、既存の項目で消したい項目があれば、非表示にすることができます。

入力欄を置きたい位置を右クリックし、"New Control"をクリックします。
設定としては、"Field Name"に先に作ったカスタム項目の名前空間を設定し、"Label"に任意のラベルを設定すれば終わりです。

なお、Label Font Size, Label HyperlinkやPaddingなども設定できますので、業務フローに合わせて利用できるものは利用するといいと思います。ただし、細かい設定はできません。

5. カスタムフィールドが正しく表示されているか確認します

カスタムフィールドを作ったら、以下の確認をして、意図したとおりにレイアウトされているか確認してください。

  1. Visual Studio で該当の作業項目を表示してみる
  2. Team Web ポータル で該当の作業項目を表示してみる。(URLは、通常ですと http://TFSサーバー:8080/tfs )
  3. (Microsoft Test Managerを使ってる場合のみ)Test Managerで該当の作業項目(バグ、要件、テストケース等)を表示してみる。

驚くことに、すべてのプラットフォーム上のレイアウトも先ほどのカスタムフィールドの設定変更に従ってレイアウトが変更されているはずです。
ここまでできれば、カスタムフィールドの値を作業項目の中に保存することができるようになります。

6. カスタムフィールドを使い倒す!グラフ表示機能

単にカスタムフィールドを追加しただけでは物足りません!
これを有効に使っていきましょう。特に、Team Web ポータルのグラフ表示の機能はチームに合わせて使い倒せること間違いなしです。

手順

  1. カスタムクエリを作ります
  2. グラフ化したいタスクをクエリで抽出します。
  3. 「結果」タブにてグラフの横軸や縦軸に取りたいカスタムフィールド値のカラムを表示します。
  4. 「グラフ」タブをクリックし、グラフを追加します。

※クエリの結果としてカラム表示されていれば、グラフの縦軸や横軸として値を設定可能です。

この機能を使えば、Team Web ポータルのダッシュボードに以下のようなグラフを出して(ピン止めする)、チームの運用状況を視覚的に表現することができるようになりTeam Web ポータルへアクセスすると日々チームの状態の変化を見ることができるので、アクセスするのが楽しくなります。(嘘?)

グラフ化例

  • タスクの進捗状況
  • テストケースの進捗状況
  • タスクの担当者、作業量などの集計


Enjoy!
Ryosuke Matsukawa

ASPXのサイトのValidation機能からみるサイト攻撃ルート

脆弱性"&'<<>\ Advent Calendar 2014 (18日目)

久しぶりに日記を書きます。
今日は、ASP系のアドベントカレンダーに書きたかった内容なんですが、セキュリティに絡んだ内容ですので脆弱性アドベントカレンダーに初投稿です。よろしくお願いします。簡単に自己紹介→「.Net系開発者です。TFSとTestManager好きです。」

    • -

まず、ASPXのサイトを見つけて、フォームの入力値(検索フォーム)とかに「&#」(いずれも小文字)と入力してみたことはあるでしょうか?
結構多くののサイトでサーバーエラーが発生します。初期設定で、クライアントはこの「&#」(以降、”呪文”と呼びます)をサーバーにPOSTすることが許可されていないためです。

以下、私がサクッと試して発見したサイト
呪文を入力して「検索」と押すと、サーバーエラーになりますよね。

ハンビットステーション
※FAQ検索画面
http://www.hanbitstation.jp/supportNet/FaqView.aspx?cdFaq=601&Code=112&Category=1

SDガンダムオンライン
※ログインメールアドレスが呪文、パスは適当
http://www.sdgundamcfo.jp/netcafe/tenpo_map.aspx?weeeple=1

つまり、サーバーエラーが発生するサイトはこの呪文のチェックをASPの初期設定で行っていると考えられ、この呪文の入力テストを行っていない可能性があるといえます

さすがに、ログイン画面で落ちるのはどうかと思いますが…

システム全体で見ても、この呪文のような特殊文字の入力を想定してない可能性がありますので、攻撃者の1つのツールとして目をつけられることは必至でしょう。

aspxでこの呪文を制御できていない場合の問題点としては、どのようなケースが考えられるのでしょうか?
たとえば、攻撃者がフォームの一部に、この呪文を仕込んだとしましょう。

<input type="text" value="&#" style="display:none;" />

の様にです。これでは、フォームに入力した内容を誰もポストバックできなくなってしまいます。
一番厄介なのは、マスター系のデータをこの呪文に変えられたときだと思います。

落ちないようにするためには、
ASPの設定(Web.configの設定など)で、この標準のValidation機能をOFFにする必要があります。

Validation機能をOFFにする必要があります。

えっ・・・

つまり、呪文を入力しても落ちなかったサイトは
標準のValidation機能をOFFにして、自分たちで独自実装してる可能性があるのです。
なので、抜けがもしかしたらあるかもしれない、ということです。

ユーザーに見えているフォーム内の各種フィールドは、ちゃんと値チェックなど入っているかもしれませんが、ユーザーに隠ぺいされている各種Hiddenフィールドなどが、攻撃ルートとしては狙いやすいのではないかと思います。

そのHiddenフィールドにSQLインジェクションなどを入力されたときにちゃんとはじけるかどうか、というテストが十分になされていない可能性があるためです。

IEでは、F12キーを押して、display:none となっている各種フィールドをdisplay:blockに書き換えるだけで、簡単に表示されますので、いろんなサイトで実験はできそうです。

こういうHiddenの値をDBに直接値を入れてたりしたら、最悪ですね。

自他ともに気を付けていきたいものです。

★おすすめ記事
@jsakamotoさん「ASP.NET MVC3 で要求検証を無効にする」
http://devadjust.exblog.jp/16628546

最近の開発環境をメモ

Web開発案件やAzureの開発案件をやり始めたので、今の開発環境や使ってるツールをメモしてみたいと思います。現在所属している会社では、技術面での理解があり、MSDNサブスクリプションや、インフラなどを使わせてくれるので助かってます。

MSDNサブスクリプションVisual Studio Professional with MSDN

  1. UnitTestはできるが、Coded UI Testには利用できないライセンス体系。
  2. Windows Azureのチケットが5000円/月くらいついてくる。

Office 2013

  1. 業務用

Visual Studio 2013 Update 2

  1. .Net Framework 4.5.1

jQuery2.X

  1. IE8以前は使用不可(※ターゲットから外すしかない)

jQGrid

  1. LINQ, Entitiy Framework, ASHXと組み合わせ、ページ送りなどを簡単にできるようなフレームワークを社内で作成したものを使える環境にした。

Team Foundation Server 2012

  1. 業務用。
  2. ソース管理、バージョン管理用

Team Foundation Service

  1. 個人用。
  2. ソース管理、バージョン管理、テスト管理、タスク管理

Windows Azure

  1. 個人用と業務用。
  2. 業務では、仮想サーバー、SQL Server、Web Service、Web Sites、Storageを利用
  3. 個人用では、ビルドサーバー、テストサーバー、開発用サーバー

Windows8

  1. Windows8.1ではActive Directory + ウィルスバスターの動作が保障されてないので今のところ8のまま。