本文へジャンプ

Lotus > Lotus Developer Domain > 
   
 

Microsoft .NETアプリケーションでのIBM Lotus Dominoの使用

 
   
 
コンテンツ
プログラミング・モデル: .NETおよびCOM
Lotus Domino Webサービス
Domino XMLのサポート
Dominoデータを取得するLotus Domino Webサービス
ASP.NETアプリケーション
まとめ
リソース
筆者について(原文のまま)

Tony Patton(aspatton@bellsouth.net), Consultant

レベル:上級
原文の掲載:2006年9月05日
原文はこちら (US)


IBM Lotus DominoとMicrosoftのツール・セットは、これら2つのシステムを相互に協調できる標準に基づいて作成されています。この記事では、コンポーネント・オブジェクト・モデル(COM)とLotus Domino Objects、Webサービス、およびXMLなど、Lotus DominoとMicrosoft .NETを統合するために使用できる技術やアプローチについて説明します。

どの開発者にとっても、異なるシステムを調和させることは共通の課題です。システムの規模にかかわらず、多くのIT部門で1つの開発プラットフォームへの標準化が進みません。企業の合併、買収が行われると、異なった構成要素が導入されることが多く、古いアプリケーションが新しいプラットフォームと共存するにつれ、異なったシステムに移行してしまいます。IBM Lotus Dominoのような製品は、エンタープライズ・アプリケーションを開発するために強力なプラットフォームを備えていますが、多くのエンタープライズ・ソフトウェア製品と同様、他のシステムとの相互協調をとることが必要です。

この記事では、Microsoft .NET開発プラットフォームでのLotus Dominoの統合を検討し、特に、Lotus Domino 7、Microsoft .NET Framework V1.1、およびMicrosoft Visual Studio .NET 2003について説明します。この記事は、Lotus Notes/Dominoアプリケーション開発者としての経験があり、LotusScriptやLotus Domino Webサービスの設計要素に習熟した方で、Microsoft .NET Frameworkに関する知識を有する方を対象にしています。

メモ: この記事に記載されたソリューションは、Microsoft .NET Frameworkバージョン2.0およびバージョン1.1とともに動作します。

しかも、Lotus Notes access for SAP solutionsのインプリメンテーションは、Lotus Notes/Dominoの開発者や管理者にとってLotus Notesの柔軟性についてのお手本のようなものです。クライアント・レベルで設定の煩わしさがないLotus NotesとSAPの統合を実現し、すべてのLotus Notesアプリケーションと同様、必要に応じてカスタマイズして適用することができます。

プログラミング・モデル: .NETおよびCOM

Lotus Dominoは、エンタープライズ・データの処理に優れたプラットフォームです。Lotus Domino以外のデータ・ソースへのアクセスには、Open Database Connectivity (ODBC)を使用したり、IBM Lotus Enterprise IntegratorまたはLotus Domino Enterprise Connection Servicesが提供する強力な機能を使用したりできます。ときには、他のアプリケーションからLotus Dominoにアクセスすることが必要なこともあります。コンポーネント・オブジェクト・モデル(COM)を持つ他のアプリケーションに対してLotus Domino環境を公開できるため、COMを通じて公開された多様なオブジェクトやクラスを介し、外部アプリケーションをLotus Dominoとともに動作させることができます。.NET Frameworkを使用して作成されたアプリケーションにLotus Domino機能を統合することは、そのわかりやすい例です。

  1. 1.Visual Studioで、「Project(プロジェクト)」>「Add Reference(参照の追加)」を選択します。
  2. 2.「Add Reference(参照の追加)」ダイアログ・ボックスの「COM」タブを選択し、一覧から適切なType Libraryファイルをダブルクリックします。
  3. 3.「OK」をクリックすると、参照が追加されます。

この時点で、Visual Studio .NETがCOM Type Libraryファイルのオブジェクトとメンバーを同等の.NETアセンブリに変換します。.NETアセンブリが生成されていると、ネイティブの.NETのクラスおよびメンバーのように、.NETのクラスを使用してCOMオブジェクトを作成したり、COMメンバーを呼び出すことができます。さらに、このプロセスを逆にして、COMベースのアプリケーションで.NETアセンブリを使用することもできます。

メモ: Visual Studio .NETを使用していない場合は、.NET Framework SDK(ソフトウェア開発キット)が提供するType Library Importer (tlbimp.exe)ユーティリティーを使用します。これは、COM Type Libraryに格納されているクラスやインターフェースをメタデータに変換するコマンド・ライン・ツールです。このツールを使って、タイプ情報についてのInteropアセンブリや名前空間を自動的に作成できます。

Visual Studioソリューションで使用可能なLotus Dominoオブジェクトを作成して、このアプローチを説明します。図1に、Lotus Domino Objectsが強調表示されている「Add Reference(参照の追加)」ダイアログ・ボックスを示します。

「Add Reference(参照の追加)」ダイアログ・ボックス


Lotus Domino Objects

Lotus Notes/Domino R5.02bから、Lotus Domino Objectsを使ってCOM経由でDominoオブジェクトにアクセスできるようになりました。Lotus Domino Objectsは、Lotus DominoサーバーまたはLotus Notesクライアント(IBM Lotus Domino Designer、Lotus Domino Administrator、またはLotus Notes)のいずれかをインストールしていれば使用できます。インストール・ディレクトリでdomobj.tlbを検索します。Lotus Domino 6.xにはLotus Domino Objectsバージョン1.1が、Lotus Domino 7にはバージョン1.2が含まれています。

Lotus Dominoをインストールする必要はありますが、実行する必要はありません。もう1つの重要なポイントは、COMを使用してLotus Dominoにアクセスする際に、バックエンド・クラスのみ使用できるということです。したがってユーザー・インターフェース・クラスにはアクセスできません。

Lotus Dominoメール・アプリケーション

COMを使用してLotus Dominoにアクセスすることは、Lotus Domino DesignerでJavaまたはLotusScriptプログラミング言語を使用することと似ていますが、Lotus Dominoとのやりとりはすべてセッションで開始されます。Lotus Domino Objectsには、COMを使用してLotus Dominoで機能するために必要なクラスがすべて含まれており、LotusScriptまたはJava言語を使用してDominoオブジェクト・モデルに関わる開発者であればCOMオブジェクトに馴染みやすいでしょう。

Visual Studio統合開発環境(IDE)に含まれているIntelliSense機能は、COMオブジェクトを使用した作業を促進します。状況依存ヘルプを表示し、入力中のコードを自動的に完成するため、入力ミスを減らせます。

最初に、Dominoディレクトリから取得したデータをLotus Dominoで使用して、電子メールでメッセージを送信する.NET Windowsアプリケーションを作成する例を紹介します(図2参照)。.NET Windowsアプリケーションでは、次の.NET要素を使用します。

  • ComboBoxコントロール。メールの受信者を選択し、Dominoディレクトリのビューからフィールドに値を埋め込みます。
  • TextBoxコントロール。メール・メッセージの件名を入力します。
  • RichTextBoxコントロール。メール・メッセージの本文を入力します。
  • Labelコントロール。メッセージが送信されたか、エラーが発生していないかをシグナルで通知します。
  • Buttonコントロール。実際のメール・メッセージを送信、または送信を試行します。


図2. .NET WindowsアプリケーションでLotus Dominoから電子メールを送信する


リスト1に、アプリケーション・コード(アプリケーション用のVisual Studio生成コードは省略)の大部分を示します。「Send(送信)」ボタンをクリックすると、btnSend_Clickメソッドを呼び出します。このメソッドによって、メッセージの作成および送信時に順番に使用されるNotesSession、NotesDatabase、NotesView、およびNotesDocumentの各オブジェクトが作成されます。

アプリケーションのロードが完了すると、Form_Loadメソッドを呼び出します。このメソッドは、NotesSession、NotesDatabase、NotesView、およびNotesDocumentの各オブジェクトを使用してComboBoxに値を埋め込みます。ビュー内の文書からの個々の値をComboBoxコントロールに追加します。選択されたユーザー名にドメイン名を付加し、メッセージの配信を補助します。

リスト1. .NET Windowsアプリケーション

メール・メッセージの送信では、アプリケーションで次の処理が行われます。
Private Sub btnSend_Click(ByVal sender As System.Object, 
ByVal e As System.EventArgs)Handles btnSend.Click
  Try
    Dim ns As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    If Not (ns Is Nothing) Then
      ns.Initialize("password")
      db = ns.GetDatabase("ServerName//Domain", "names.nsf", False)
      If Not (db Is Nothing) Then
        doc = db.CreateDocument()
        doc.ReplaceItemValue("Form", "Memo")
        doc.ReplaceItemValue("SendTo", cboNames.SelectedText + "//Domain")
        doc.ReplaceItemValue("Subject", txtSubject.Text)
        Dim rt As NotesRichTextItem
          rt = doc.CreateRichTextItem("Body")
          rt.AppendText(rtbBody.Text)
            doc.Send(False)
          rt = Nothing
            doc = Nothing
            lblMessage.Text = "Message Sent."
      End If
      db = Nothing
      ns = Nothing
    End If
    Catch ex As Exception
      lblMessage.Text = "Error: " + ex.Message.ToString()
  End Try
End Sub


Private Sub Form1_Load(ByVal sender As System.Object, 
ByVal e As System.EventArgs)Handles MyBase.Load
  Dim s As New NotesSession
    s.Initialize()
  Dim db As NotesDatabase
  Dim vw As NotesView
  Dim doc As NotesDocument
    db = s.GetDatabase("ServerName//Domain", "names.nsf", False)
  If Not (db Is Nothing) Then
    vw = db.GetView("_People")
    doc = vw.GetFirstDocument()
    While Not (doc Is Nothing)
      cboNames.Items.Add(doc.GetFirstItem("FirstName").Text + " " + 
        doc.GetFirstItem("LastName").Text)
        doc = vw.GetNextDocument(doc)
    End While
  End If
End Sub


  1. NotesSessionオブジェクトのインスタンスを生成します。
  2. 指定したサーバ・データベースでNotesDatabaseオブジェクトのインスタンスを生成します。
  3. NotesDatabaseオブジェクトを使用して、新しいNotesDocumentオブジェクトを作成します。
  4. 文書のフィールドにフォームからの値を埋め込みます。
  5. NotesDocumentオブジェクトを使用し、メール・メッセージの本文に対して新しいNotesRichTextItemオブジェクトを作成します。
  6. フォームからNotesRichTextItemにテキストを追加します。
  7. 電子メール・メッセージをNotesDocumentのsendメソッドで送信します。
  8. Labelコントロールを、メッセージの送信時に表示されるように設定します。(それ以外の場合、例外が発生するとエラー・メッセージが表示されます。全体の操作をTryブロックで囲みます。)

COMは、Windowsのアプリケーションのみで使用するわけではありません。Webまたは他のアプリケーション・タイプでも同様に使用することができます。

次に、WebサービスおよびXMLなど他の方法を使用したLotus Dominoとの通信方法について説明します。



上に戻る

Lotus Domino Webサービス

Lotus Domino Objectsは、Lotus Domino以外のアプリケーション内のDominoリソースにアクセスする効果的な方法ですが、他にも方法があります。2つのシステムを統合するもう1つの方法は、Web規格と、.NETコード内でのLotus Domino Webサービスのコンシュームに関与するものです。

Lotus Domino 7で、Webサービスの設計要素が追加されました。DominoベースのWebサービスは、標準のWebサービスのようにコンシュームされます。Webサービスで使用できるメソッドを見つけるには、Webサービス記述言語(WSDL)を使用します。DominoをベースとしたWebサービス用のWSDLは、?wsdlコマンドを付加したWebサービスのURLを通じて使用できます。例えば、次のURLは、testwsという名前のWebサービスのWSDLを取り出します。

http://localhost/dominodatabase.nsf/testws?wsdl

カレンダー・エントリーに関連付けられていない時間を記録するため、または時間報告を管理するために、メール・データベースには新しい「SAP Time Entries(SAPタイムエントリー)」ビューが用意されています。このビューには、現行の時間報告、時間入力フォームを開始するボタン、時間報告の編集およびSAPへの提出を管理するウィザードが表示されます。


Visual Studio .NET IDEを使用すると、プロジェクトでWebサービスを使用することが簡単になります。そのために、Web参照をプロジェクトに追加します。追加先のプロジェクトを右クリックして、図3のように「Add Web Reference(Web参照の追加)」を選択してください。

図3.Web参照をプロジェクトに追加する


上に戻る

Domino XMLのサポート

統合の際に使用できるもう1つのLotus Dominoの機能はXMLです。共通のLotus Domino要素のXMLへのアクセスは複雑ではありません。Dominoビューを使用して作成された例があります。ビューのURLと?ReadViewEntriesコマンドをともに使用すれば、ビューのXMLに簡単にアクセスできます。例えば、次のURLを使用すると、Lotus Domino 7のDominoディレクトリの_PeopleビューのXMLにアクセスできます。

http://domain/names.nsf/_People?ReadViewEntries

リスト2は、Lotus Domino 7サーバーのディレクトリに、?ReadViewEntriesコマンドを使用して生成されたXMLのサンプルです。


リスト2. ?ReadViewEntriesコマンドを使用して生成されたXML

<?xml version="1.0" encoding="UTF-8" ?> 
  <viewentries toplevelentries="3">
    <viewentry position="1" unid="A819181402AC862F85257199007D02BC"
     noteid="1342" siblings="3">
    <entrydata columnnumber="0" name="$18">
      <number>0</number> 
    </entrydata>
    <entrydata columnnumber="1" name="$17">
      <text>Patton , Tony</text> 
    </entrydata>
    <entrydata columnnumber="2" name="$12">
      <text /> 
    </entrydata>
    <entrydata columnnumber="3" name="CompanyName">
      <text /> 
    </entrydata>
    <entrydata columnnumber="4" name="$16">
      <text>Tony Patton/Patton@Test</text> 
    </entrydata>
    <entrydata columnnumber="5" name="$21">
      <text>TestServer/Test</text> 
    </entrydata>
  </viewentry>
</viewentries>

この生成済みのXMLを.NETのXMLサポートと組み合わせると、Dominoデータを交換したり、使用したりできます。例えば、生成済みのXMLをMicrosoft ASP.NETデータ・コントロールに関連付けるとします。リスト3に表示されているASP.NETページは、_PeopleビューからXMLを使用してDropDown Listコントロールに値を埋め込んでいます。


リスト3. _PeopleビューからXMLを使用するASP.NETページ

このコードは、Microsoft Visual Basic .NETを使用する標準のASP.NETページです(コードビハインドなし)。基本的に、このコードは次の処理を行います。



<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>
<%@ Import Namespace="System.XML" %>
<%@ Page Language="vb" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
    <head>
    <title>Populate DropDownList via XML</title>
    <script language="vb" runat="server">
      Private Sub Page_Load(ByVal sender As System.Object, 
ByVal e As System.EventArgs)
        If Not (IsPostBack) Then
          Try
            GetData()
            Catch ex As Exception
            Response.Write(ex.ToString())
          End Try
        End If
      End Sub
      Public Sub GetData()
        Dim strResult As String
        Dim objResponse As WebResponse
        Dim objRequest As WebRequest
        objRequest = _
HttpWebRequest.Create("http://192.168.1.103/names.nsf/
_People?ReadViewEntries")
        objResponse = objRequest.GetResponse()
        Dim sr As StreamReader
        sr = New StreamReader(objResponse.GetResponseStream())
          strResult = sr.ReadToEnd()
          Dim doc As New XmlDocument
        sr.Close()
        doc.LoadXml(strResult)
        Dim nodes As XmlNodeList
        nodes = _
          doc.SelectNodes("viewentries/viewentry/entrydata
_[@columnnumber=""1""]")
        ddlNames.DataSource = nodes
        ddlNames.DataTextField = "innertext"
        ddlNames.DataValueField = "innertext"
        ddlNames.DataBind()
      End Sub
    </script>
    </head>
    <body>
      <form id="frmPopulateControlViaXML" method="post" runat="server">
        <asp:DropDownList id="ddlNames" runat="server" Width="336px" />
      </form>
    </body>
  </html>
  • DominoビューのURLと?ReadViewEntriesコマンドによるXMLを.NET XmlDocumentオブジェクト(System.XML名前空間から)にロードします。
  • XmlDocumentおよびXPath式からXmlNodeListオブジェクトをインスタンス化して、XMLから特定のエンティティーを選択します。(このコードでは、columnnumber=1属性を持つ第1カラムのentrydata要素のみを扱っています。)
  • XmlNodeListをDropDown Listコントロールのデータ・ソースとして使用します。
  • DropDownListコントロールのdatabindメソッドを呼び出して、コントロールにデータをバインドします。
結果はWebページに表示され、リストから名前を選択できます。

最初のステップでは、.NET System.NetとSystem.IOの名前空間を使用して、ネットワーク(インターネット)の要求および返されたデータを処理します。適切なURLを呼び出すために、このページでWebRequestオブジェクトを使用し、WebResponseオブジェクトが応答をキャプチャーします。

WebResponseオブジェクトのResponseStreamプロパティーをStreamReaderオブジェクトと結合して、Web要求が返すXMLを読み取ります。次に、XML形式を使ったXMLDocumentオブジェクトの作成およびインスタンス生成を行います。個別のノードをXMLDocumentオブジェクトから選択して、XMLNodeListオブジェクトに格納します。XPath式を指定して、適切なノードを選択します。

ユーザーによって各エントリーが選択されたときに返される値と同様に、選択されたノードのコレクションは、コントロールの表示値として指定された各列(内部テキスト)を使ったデータ・コントロールへの埋め込みに使用されます。XMLの取り出しやデータ・コントロールの埋め込みに関連するすべての操作は、GetDataメソッド内にあります。このメソッドは、ASP.NET WebフォームのPage_Loadイベントで呼び出されます。初めてページが呼び出されるときのみコントロールを埋め込みたい場合、そのページのIsPostBackプロパティーで、ページがリフレッシュまたは再ロードされていない場合に1回のみロードされるようになっていることを確認します。最後に、ページには、Tryブロックを使用して予測できないエラーをキャッチし、同じページにエラーの説明を記載します。図4にASP.NETページを示します。


図4. DominoビューのXMLから埋め込まれるASP.NET DropDownListコントロール


ここではデモンストレーション用に、Lotus Dominoメール・アプリケーションの例をLotus Domino Webサービスと組み合わせて、Webサービスの呼び出しによるDominoデータの取得および表示を行いました。実際は、.NETアプリケーションでWebサービスの使用範囲を指定する前に、まずLotus Domino Webサービスの範囲を指定する必要があります。


上に戻る

Dominoデータを取得するLotus Domino Webサービス

Lotus Domino Webサービスを初めて使う場合

Domino Webサービスを初めて使用するユーザーは、developerWorksのLotusの記事『Lotus Notes/Domino 7 Webサービス』を参照してください。このサービスでは、Lotus Domino WebサービスをLotusScriptでコーディングする際に、次の基本を含む十分なバックグラウンドを提供します。

  1. 実装コードのクラス定義(このクラスは、プロパティー・ウィンドウの「基本」タブのPortTypeクラスに指定された名前と一致し、publicでなければなりません。)
  2. 同じクラス内の、Webサービスでの各操作のプロシージャー(関数、サブプロシージャー、またはメソッド)の定義(これらのプロシージャーはpublicであることが必要です)。
  3. lsxsd.lssのインクルード
  4. Lotus Domino Objectsにアクセスする場合は、NotesSessionの初期化(この操作は新しいブロックで行うのが最適です)。

サンプルのWebサービスは単純なものです。ユーザー名(ラストネームにファーストネームが続き、コンマで区切る形式。この形式は上のサンプルで使用されています)を受け取り、Domino ディレクトリからそのユーザーに関連する値を検索します。サービスは、LotusScriptで記述されています。


サンプルのサービスは、GetUserInfoという名前のクラス内に存在し、次のpublicメソッドを含みます。
GetPhoneNumber:メソッドに渡されたユーザーのオフィスの電話番号を返します。
GetAddress:メソッドに渡されたユーザーのオフィスの住所を返します。
GetCity:メソッドに渡されたユーザーのオフィスが所在する市の名前を返します。
GetState:メソッドに渡されたユーザーのオフィスが所在する州の名前を返します。
GetZip:メソッドに渡されたユーザーのオフィスの郵便番号を返します。
GetCountry:メソッドに渡されたユーザーのオフィスが所在する国の名前を返します。

すべてのメソッドは、文字列パラメーター(ユーザーの名前)を1つ受け取り、文字列の値を返します。NotesSession、NotesDatabase、およびNotesViewの各オブジェクトが定義されると、クラスの新しいブロックで初期化が行われます。 リスト4にWebサービスのコードを示します。


%INCLUDE "lsxsd.lss"
Dim session As NotesSession
Dim db As NotesDatabase
Dim vw As NotesView
Dim doc As NotesDocument
Public Class GetUserInfo
  Sub New
    Set s = New NotesSession
    Set db = s.CurrentDatabase
    Set vw = db.GetView("(PeopleLookup)")
  End Sub
  Public Function GetPhoneNumber(uName As String) As String
    Set doc = vw.GetDocumentByKey(uName)
    If Not (doc Is Nothing) Then
      GetPhoneNumber = doc.GetItemValue("OfficePhoneNumber")(0)
      Else
        GetPhoneNumber = ""
    End If
  End Function
  Public Function GetCity(uName As String) As String
    Set doc = vw.GetDocumentByKey(uName)
    If Not (doc Is Nothing) Then
      GetCity = doc.GetItemValue("OfficeCity")(0)
      Else
        GetCity = ""
    End If
  End Function
  Public Function GetState(uName As String) As String
    Set doc = vw.GetDocumentByKey(uName)
    If Not (doc Is Nothing) Then
      GetState = doc.GetItemValue("OfficeState")(0)
      Else
        GetState = ""
    End If
  End Function
  Public Function GetAddress(uName As String) As String
    Set doc = vw.GetDocumentByKey(uName)
    If Not (doc Is Nothing) Then
      GetAddress = doc.GetItemValue("OfficeStreetAddress")(0)
      Else
        GetAddress = ""
    End If
  End Function
  Public Function GetZip(uName As String) As String
    Set doc = vw.GetDocumentByKey(uName)
    If Not (doc Is Nothing) Then
      GetZip = doc.GetItemValue("OfficeZip")(0)
      Else
        GetZip = ""
    End If
  End Function
  Public Function GetCountry(uName As String) As String
    Set doc = vw.GetDocumentByKey(uName)
    If Not (doc Is Nothing) Then
      GetCountry = doc.GetItemValue("OfficeCountry")(0)
      Else
        GetCountry = ""
    End If
  End Function
  Public Function GetFullName(uName As String) As String
    Set doc = vw.GetDocumentByKey(uName)
    If Not (doc Is Nothing) Then
      GetFullName = doc.GetItemValue("FirstName")(0) + " " + _
        doc.GetItemValue("LastName")(0)
      Else
        GetFullName = ""
      End If
  End Function
End Class
リスト4. Lotus Domino Webサービス

ブラウザーに次のURLを入力すると、簡単にWebサービスのWSDLを表示できます。

http://dominoserver/names.nsf/GerUserInfo?wsdl.

メモ: 各メソッドのルックアップで使用するために、新しいビューが追加されました。この非表示ビューは、PeopleLookupと呼ばれ、次の式で埋め込まれたカラムを持つPersonフォームで作成された文書のみを表示します。

上に戻る

ASP.NETアプリケーション

このWebサービスをASP.NETアプリケーションで使用すると、WebページのフィールドにWebサービスの呼び出しから取得したデータの値を設定することができます。始めに、.NETアプリケーションにWebサービスの参照を追加します。サービスのアドレスを入力し「Go(移動)」をクリックした後に、追加されたWeb参照と、メソッドのリストが表示されます(図5参照)。

図5. .NETアプリケーションにWebサービス参照を追加する


コードでWebサービスにアクセスする際に使用する名前を「Add Web Reference(Web参照の追加)」ダイアログ・ボックスの「Web reference name(Web参照名)」フィールドに入力してください。Web参照が追加された後のコーディングは単純です。リスト5に、最初にコードビハインド・ファイルが続くASP.NETページのコードを示します。


リスト5.リスト5. Lotus Domino Webサービスを使用するASP.NET Webフォーム

<%@ Page Language="vb" AutoEventWireup="false" 
Codebehind="DominoTest.aspx.vb" Inherits="DominoIntegration.Test2"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  <html>
    <head>
      <title>Domino Web Service Demo</title>
    </head>
    <body>
      <form id="frmDominoIntegration" method="post" runat="server">
        <asp:Label id="lblSelect" runat="server" Width="144px">
          Select Name:</asp:Label>
        <asp:DropDownList id="ddlNames" runat="server"
          OnSelectedIndexChanged="ddlNames_SelectedIndexChanged"
          AutoPostBack="True" Width="336px"></asp:DropDownList><br>
        <asp:Label id="lblName" runat="server" Width="144px">
          Address:</asp:Label>
        <asp:TextBox id="txtFullName" runat="server" Width="360px" /><br>
        <asp:Label id="lblAddress" runat="server" width="144px">
          Address:</asp:Label>
        <asp:TextBox id="txtAddress" runat="server" Width="360px" /><br>
        <asp:Label id="lblCityState" runat="server" Width="144px">
          City, State</asp:Label>
        <asp:TextBox id="txtCity" runat="server" Width="264px" /><br>
        <asp:Label id="lblComma" runat="server" Width="8px" Font-Bold="True">
          ,</asp:Label>
        <asp:TextBox id="txtState" runat="server" Width="80px" /><br>
        <asp:Label id="lblZip" runat="server" Width="144px">
          Zip Code:</asp:Label>
        <asp:TextBox id="txtZip" runat="server" Width="200px" /><br>
        <asp:Label id="lblCountry" runat="server" Width="144px">
          Country:</asp:Label>
        <asp:TextBox id="txtCountry" runat="server" Width="200px" /><br>
        <asp:Label id="lblPhone" runat="server" Width="144px">
          Phone:</asp:Label>
        <asp:TextBox id="txtPhoneNumber" runat="server" Width="200px" /><br>
      </form>
    </body>
  </html>

リスト6に、Visual Basicで作成されたASP.NET Webフォームのコードビハインド・ファイルを示します。


Imports System.Net
Imports System.IO
Imports System.Xml
Public Class DominoIntegration
  Inherits System.Web.UI.Page
  Protected WithEvents ddlNames As DropDownList
  Protected WithEvents lblSelect As Label
  Protected WithEvents txtFullName As TextBox
  Protected WithEvents lblName As Label
  Protected WithEvents lblPhone As Label
  Protected WithEvents lblCountry As Label
  Protected WithEvents txtCountry As TextBox
  Protected WithEvents lblZip As Label
  Protected WithEvents lblCityState As Label
  Protected WithEvents txtZip As TextBox
  Protected WithEvents txtState As TextBox
  Protected WithEvents txtCity As TextBox
  Protected WithEvents txtPhoneNumber As TextBox
  Protected WithEvents txtAddress As TextBox
  Protected WithEvents lblAddress As Label
  Protected WithEvents lblComma As Label
  Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles MyBase.Init
    InitializeComponent()
  End Sub
  Public Sub Page_Load(ByVal sender As System.Object, 
ByVal e As System.EventArgs)Handles MyBase.Load
    If Not (Me.IsPostBack) Then
      Try
        GetData()
        Catch ex As Exception
        Response.Write(ex.ToString())
      End Try
    End If
  End Sub
  Public Sub GetData()
    Dim strResult As String
    Dim objResponse As WebResponse
    Dim objRequest As WebRequest
    objRequest = System.Net.HttpWebRequest.Create(
      "http://192.168.1.103/names.nsf/_People?ReadViewEntries")
    objResponse = objRequest.GetResponse()
    Dim sr As System.IO.StreamReader
      sr = New StreamReader(objResponse.GetResponseStream())
      strResult = sr.ReadToEnd()
    Dim doc As New XmlDocument
      sr.Close()
      doc.LoadXml(strResult)
    Dim nodes As XmlNodeList
      nodes = doc.SelectNodes("viewentries/viewentry/entrydata
	_[@columnnumber=""1""]")
      ddlNames.DataSource = nodes
      ddlNames.DataTextField = "innertext"
      ddlNames.DataValueField = "innertext"
      ddlNames.DataBind()
  End Sub
  Public Sub ddlNames_SelectedIndexChanged(ByVal sender As System.Object,
    ByVal e As System.EventArgs)
    Dim ws As New WebReference.GetUserInfoService
      txtFullName.Text = ws.GETFULLNAME(ddlNames.SelectedValue.ToString())
      txtAddress.Text = ws.GETADDRESS(ddlNames.SelectedValue.ToString())
      txtCity.Text = ws.GETCITY(ddlNames.SelectedValue.ToString())
      txtState.Text = ws.GETSTATE(ddlNames.SelectedValue.ToString())
      txtZip.Text = ws.GETZIP(ddlNames.SelectedValue.ToString())
      txtCountry.Text = ws.GETCOUNTRY(ddlNames.SelectedValue.ToString())
      txtPhoneNumber.Text = 
        ws.GETPHONENUMBER(ddlNames.SelectedValue.ToString())
  End Sub
End Class
リスト6. ASP.NET WebフォームのVisual Basic. NETコード

Webフォームには、リスト3で説明したGetDataメソッドが含まれていますが、現在はテキスト・フィールドが含まれており、Webサービス呼び出しによって取得したデータを受け取ります。DropDownListコントロールで選択されると、Webサービスが呼び出されます。このコントロールのSelectedIndexイベントは、ユーザーがリストから値を選択するときに、自動的に呼び出されます(コントロールのAutoPostBackプロパティーがTrueに設定されている場合)。

コントロールから選択した値はWebサービスに渡され、個別の呼び出しによってデータの各部分(住所や市など)を取得します。「Add Web Reference(Web参照の追加)」ダイアログ・ボックスから追加されたWebReferenceオブジェクトがコーディングに使用され、Webサービスにアクセスします。

上に戻る

まとめ

エンタープライズ製品の開発者にとって、異なるシステムを統合することは一般的な開発タスクです。Microsoft .NETプラットフォームにLotus Dominoを組み込むこともそのうちの1つです。COMテクノロジー、XML、および即時利用が可能なWebサービスなど、どの方法でもこの統合を達成できます。これらのオプションにより、複数のITリソースを結び付けてビジネスのニーズを満たすことが簡単になります。


上に戻る

リソース

学ぶ 製品/技術ダウンロード


議論する
上に戻る

筆者について(原文のまま)

Tony Patton is a consultant based in Louisville, Kentucky. He works with various technologies, including Lotus Notes/Domino, Java technology, and Microsoft .NET. He is the author of two books focusing on Lotus Notes/Domino development: Practical LotusScript and Domino Development with Java as well as weekly columns on CNet.com focusing on .NET and Web development. You can reach Tony at aspatton@bellsouth.net



上に戻る