この特集のトップページへ
Chapter 7:プレゼンテーション層の構築

head1.gif 7.9 考察とまとめ

 以上で,一通りのユーザーインタフェースを実装したことになる。本当ならば,このあと領収書を作成する処理まで実装し,さらに細かい部分まで作り込みたいところだが,さすがにこれ以上実装するものを増やすと先に進めなくなる。本稿中ではこのぐらいにとどめておき,残った処理は読者への課題としたい。

 とはいえ,本章ではまだ,ユーザーインタフェースを構築する際に重要な点をいくつか説明していないので,最後にそれらについて簡単に解説を加えることにする。

head2.gif 7.9.1 アカウント名からユーザー名に変換する
 すでにお気づきの読者も多いと思うが,今回のアプリケーションではユーザーの識別名としてWindowsドメイン(Windows NTドメインやActiveDirectoryドメイン)におけるアカウント名を利用している。そのため,帳票における表示もアカウント名となっている。内部的に利用するものであればこのままでもよいかもしれないが,外部に提出する伝票や請求書などでは,アカウント名をそのまま印刷して渡してしまうわけにはゆかない。体裁が悪いばかりか,セキュリティ上の問題もあるからである。そこで,アカウント名をユーザー名に変換する方法について説明しておく。

 アカウント名をユーザー名に変換するには,大きく2つの方法がある。1つはWindows 2000で標準搭載されているADSI(ActiveDirectory Service Interfaces)を用いる方法,もう1つはWin32APIのNetUserGetInfo関数を用いる方法である。

 どちらを用いてもよいが,Visual Basicで扱う場合にはADSIのほうが簡単なので,ここではそちらを説明する。


One Point! Microsoft社のWebページからADSIのコンポーネントをダウンロードすることで,Windows 95やWindows 98,Windows NT 4.0でも,ADSIを利用できるようになる。

 Visual BasicでADSIを利用する場合には,まず「Active DS Type Library」を参照設定する(Fig.7-112)。

Fig.7-112 Active DS Type Libraryの参照設定
fig7_112

 ADSIでユーザー情報を取得するには,次のようにする。

【Active Directoryドメインの場合】

Dim objUser As IADsUser
Set objUser = GetObject("LDAP://サーバー名/アカウント名")
MsgBox objUser.FullName

【Windows NTドメインの場合】

Dim objUser As IADsUser
Set objUser = GetObject("WinNT://ドメイン名/アカウント名")
MsgBox objUser.FullName


One Point! ただし,GetObject関数の引数に指定したユーザー(オブジェクト)が見つからないときには実行時エラーが発生するので,アプリケーションで利用するにあたっては,それをトラップするため,On Error GoTo文やOn Error Resume Next文などを事前に実行しておく必要がある。

 実際に,N階層のアプリケーションにおいてアカウント名からユーザー名に変換する場合には,上述のような変換処理をビジネスロジック層のほうにメソッドとして実装しておき,プレゼンテーション層から呼び出して使うような形になるだろう。なぜならば,プレゼンテーション層にアカウント名からユーザー名に変換する処理を実装してしまうとその変換処理がクライアント側で実行されるから,すべてのクライアントにADSIがインストールされていることが前提となってしまうためである。

 Active DirectoryドメインとWindows NTドメインでは,GetObject関数に引き渡すアカウント名の指定方法が異なるだけで,両者ともにGetObject関数でユーザーを取得したのちFullNameプロパティを参照する手順に変わりはない。また,上記に示した書式のうち,サーバー名は省略することもできる(省略する場合には,その直後の「/」も省略する)。省略したときには,その時点でログオンしているカレントサーバーが使われる。


One Point! ちなみに,FirstNameプロパティで名字を,LastNameプロパティで名前を,それぞれ取得することもできる。

 たとえば,Active Directoryドメインで“CN=Osawa, CN=Users, DC=example, DC=co, DC=jp”のユーザー名を取得したいときには,次のように指定する。

LDAP://CN=Osawa, CN=Users, 
   DC=example, DC=co, DC=jp

 また,Windows NTドメインでExampleドメインのユーザーOsawaを検索したいときには,次のように指定する。

WinNT://Example/Osawa

 ADSIはかなり奥が深いので,ここではGetObject関数を使ってユーザーを取得し,そのFullNameプロパティを参照するとユーザーの名前を取得できるという説明をするだけにとどめる。実際には,ADSIを使って,ユーザーのメールアドレスや連絡先などの各種情報を取得できるし,ユーザーの情報を書き換えたり,さらにはユーザーを登録したりすることもできる。また,扱えるのはユーザーに限らず,プリンタや共有フォルダなどの情報にアクセスすることも可能である。より詳しく知りたい読者は,MSDNのADSI SDKのドキュメントや拙書『Windows 2000 ActiveDirectoryドメイン構築ガイド』(ソフトバンクパブリッシング刊)などを参照されたい。

Prev 131/134 Next