Skip to main content link. Accesskey S
  • Anonymous
  • Log on
  • Help
  • IBM logo
  • Lotus Notes and Domino Application Development wiki
  • All Wikis
  • Home
  • Community Articles
  • Product Documentation
  • Learning Center


Search

Advanced Search

Categories

Tag Cloud

  • 6.0
  • 6.5
  • 8.0
  • 8.5
  • 8.5.1
  • 8.5.2
  • 8.5.3
  • action bar
  • Agents
  • Ajax
  • app dev
  • Application
  • beginner
  • C&S
  • calendaring and scheduling
  • client
  • composite applications
  • Controls
  • converters
  • css
  • Custom controls
  • Data Binding
  • db2
  • design elements
  • dialog boxes
  • Documents
  • Dojo
  • Domino
  • Domino Designer
  • Domino Designer 8.5
  • DXL
  • Eclipse
  • error handling
  • errors
  • extensions
  • FAQ
  • Forms
  • formulas
  • getting started
  • globalization
  • Help
  • html
  • Installation
  • interface
  • internationalization
  • iPhone
  • Java
  • JavaScript
  • localization
  • Lotus Domino Designer
  • LotusScript
  • LotusSphere
  • LotusTechInfo
  • menu bar
  • Mobile
  • new user
  • Notes
  • Notes 8
  • notes.ini
  • NSD
  • OpenNTF
  • partial update
  • performance
  • Pickers
  • Portal
  • presentations
  • programming
  • Redbooks
  • Requested Articles
  • roadmap
  • rooms and resources
  • samples
  • Scripting
  • security
  • tabs
  • templates
  • themes
  • Tips
  • toolbar
  • troubleshooting
  • tutorials
  • validation
  • variables
  • video
  • VideoFest
  • View
  • view control
  • ViewPanel
  • Views
  • web
  • Web apps
  • Web services
  • webdev
  • XML
  • Xpage
  • XPages
  • XPages Extensibility API
  • xsp-config
  • データソース
  • 九州地区ノーツパートナー会
InformationInformation
You are currently viewing machine translated content. IBM translation might be available. Click IBM Translated Product Documentation to see what is available.X


Home > 日本語 - Japanese > XPages で新規文書に、データベースから取得した値を設定する(スクリプトライブラリとエージェントを使用)
Rate this article 1 starRate this article 2 starsRate this article 3 starsRate this article 4 starsRate this article 5 stars

XPages で新規文書に、データベースから取得した値を設定する(スクリプトライブラリとエージェントを使用) 

expanded Abstract
collapsed Abstract
XPages の新規文書で、データベースから取得した値を設定するサンプルコードを紹介します。コーディングの方法として、XPages に設定されたサーバーサイド JavaScript を使用する方法とそのコードをスクリプトライブラリにして再利用できるようにした方法を詳細します。またエージェントを利用した方法も紹介します。
ShowTable of Contents
HideTable of Contents
  • 1 アプリケーションの概要
  • 2 XPages での実装の準備
    • 2.1 XPagesに埋め込んだサーバーサイド JavaScript での実装
    • 2.2 スクリプトライブラリのサーバーサイド JavaScript の利用
    • 2.3 エージェントの利用

アプリケーションの概要


ここで紹介するアプリケーションでは、ユーザーが新規に XPage のページを開き、コンボボックスの都道府県名を選んで検索ボタンを押すと、選択された都道府県の県庁所在地の都市名が結果用のフィールドに設定されます。全ての処理は文書の保存なしに行われます。
アプリケーションにはすでに都道府県名と県庁所在地を保存できるフォームがあると仮定します。都道府県名は 「name」 フィールド、県庁所在地は 「city」 フィールドにあります。すでにいくつかの県について、このフォームで文書が作成されているとします。
 

XPages での実装の準備


本題の JavaScript の実装の前に、必要な XPages のコンポーネントを用意します。
適当な XPages を新規に作成し、以下のようなコントロールを作成します。
 
  コントロール名 コントロールタイプ 説明
1
comboBox1 コンボボックス 選択肢として適当な都道府県名を設定する
2
inputText1 編集ボックス 結果が設定されるフィールド
3
inputText2 編集ボックス 結果が設定されるフィールド
4
inputText3 編集ボックス 結果が設定されるフィールド


XPagesに埋め込んだサーバーサイド JavaScript での実装


最も単純な正攻法です。XPage にボタンなどを作成し、その onClick イベントで 「Execute Script」 を選択し、以下のコードを記載します。
 

	var input = getComponent("comboBox1");

	var name = input.getValue();

	 

	var dc = database.search("name=\"" + name + "\"");

	var match = dc.getCount();

	 

	var city = "Not Found";

	if (match > 0) {

	    var doc = dc.getFirstDocument();

	    city = doc.getItemValueString("city");

	} else {

	    print ("No prefecture was found.")

	}

	 

	var output = getComponent("inputText2");

	output.setValue(city);

	

 

スクリプトライブラリのサーバーサイド JavaScript の利用


先の例とほとんど同じ内容ですが、複数のページで処理の内容が重複するといったときには、処理の内容をスクリプトライブラリによって共通化することができます。
まず、共通化できる部分をスクリプトライブラリにします。このとき作成するスクリプトライブラリはサーバーサイド JavaScript のスクリプトライブラリです。スクリプトライブラリの内容は以下の様になります。
 
 

	function myfunc(name) {

	    var dc = database.search("name=\"" + name + "\"");

	    var match = dc.getCount();

	

	    var city = "Not Found";

	    if (match > 0) {

	        var doc = dc.getFirstDocument();

	        city = doc.getItemValueString("city");

	    } else {

	        print ("No prefecture was found.")

	    }

	

	    var output = getComponent("inputText3")

	    output.setValue(city);

	} 

	
 
 
つぎにこのスクリプトを使用する XPage のリソース・プロパティでこのスクリプトライブラリを使用する宣言を追加します。
そしてボタンの onClick イベントなどに以下の様に実装します。 
 
 

	var input = getComponent("comboBox1");

	var name = input.getValue();

	

	myfunc(name); 

	
 
 

エージェントの利用


同じような処理をエージェントを使って実装してみましょう。
このとき、新規作成した文書を保存することなくエージェントに渡すことはできません。そこで少々複雑な処理をします。
 
ここで紹介する方法は、 以下の記事がもとになっています。
 
XPages and Calling Agents Using an In-Memory Document
 
この例では Java エージェントとして処理を実装しています。新規に 「jaInMemory」 という名前の Java エージェントを作成します。このエージェントは実行方法としてアクションメニューからの選択実行として、ターゲットは 「なし」 にします。
Java のコードは以下の様になります。
 
 

	import lotus.domino.*;

	

	public class JavaAgent extends AgentBase {

	

	    public void NotesMain() {

	

	        try {

	            Session session = getSession();

	            AgentContext agentContext = session.getAgentContext();

	

	            // (Your code goes here)

	            Document doc = agentContext.getDocumentContext();

	            String name = doc.getItemValueString("Name");

	

	            // search prefecture

	            String city = "Not Found";

	            Database db = agentContext.getCurrentDatabase();

	            DocumentCollection dc = db.search("name=\"" + name + "\"");

	            int match = dc.getCount();

	            if (match > 0) {

	                Document prefDoc = dc.getFirstDocument();

	                city = prefDoc.getItemValueString("city");

	            } else {

	                System.out.println("No prefecture was found.");

	            }

	

	            doc.replaceItemValue("City", city);

	 

	        } catch(Exception e) {

	            e.printStackTrace();

	        }

	    }

	} 

	
 
 
これを呼び出すサーバーサイド JavaScript は以下になります。これをボタンの onClick イベントなどに実装します。
 
 

	var agentName:String = "jaInMemory";

	

	var compInput = getComponent("comboBox1");

	var compOutput = getComponent("inputText1");

	

	// get the input parameter

	var paramIn = compInput.getValue();

	

	// create In Memory Document

	var doc = database.createDocument();

	doc.appendItemValue("Name",paramIn);

	

	var agent:NotesAgent = database.getAgent(agentName);

	if (agent != null) {

	    agent.runWithDocumentContext(doc);

	    compOutput.setValue(doc.getItemValueString("City"));

	    doc.recycle();

	} else {

	    compOut.setValue("Can not find Java Agent");

	}

	
 
 
この処理では、呼び出し元の JavaScript で database.createDocument() によって新規に文書が作成され doc 変数に格納されます。そして、エージェントの実行に必要な情報が文書に設定されます。
次に Java エージェントが呼び出されますが、doc 変数はは runWithDocumentContext() の引数として渡されます。この時点で文書 doc は保存されていません。そしてエージェントの中で処理が行われ、その結果が doc のアイテムとして設定されます。
エージェントの処理が終わると JavaScript に処理が戻ります。JavaScript では doc から処理結果を取り出し、表示している XPage のフィールドに設定しています。そしてデータ受け渡し用に使用された文書 doc はそのまま破棄されています。

expanded Article information
collapsed Article information
Category:
日本語 - Japanese
Tags:
XPages

This Version: Version 17 March 27, 2012 10:38:52 AM by Hiroaki Komine  IBMer

expanded Attachments (0)
collapsed Attachments (0)

 


expanded Versions (17)
collapsed Versions (17)
Version Comparison     
Version Date Changed by               Summary of changes
This version (17) Mar 27, 2012 10:38:52 AM Hiroaki Komine  
16 Feb 5, 2012 11:00:16 PM Y Kawa  
15 May 31, 2011 5:16:04 AM Hiroaki Komine  
14 May 31, 2011 5:15:51 AM Hiroaki Komine  
13 May 31, 2011 5:08:09 AM Hiroaki Komine  
12 May 31, 2011 5:07:39 AM Hiroaki Komine  
11 May 31, 2011 5:06:25 AM Hiroaki Komine  
10 May 31, 2011 5:03:09 AM Hiroaki Komine  
9 May 31, 2011 5:02:15 AM Hiroaki Komine  
8 May 31, 2011 5:01:03 AM Hiroaki Komine  
7 May 31, 2011 4:54:50 AM Hiroaki Komine  
6 May 31, 2011 4:41:27 AM Hiroaki Komine  
5 May 31, 2011 4:30:25 AM Hiroaki Komine  
4 May 31, 2011 4:28:13 AM Hiroaki Komine  
3 May 31, 2011 4:26:12 AM Hiroaki Komine  
2 May 31, 2011 4:24:35 AM Hiroaki Komine  
1 May 31, 2011 4:05:26 AM Hiroaki Komine  
expanded Comments (0)
collapsed Comments (0)
Copy and paste this wiki markup to link to this article from another article in this wiki.
Go ElsewhereStay ConnectedSubscribe to RSSHelpAbout
  • All Lotus and WebSphere Portal wikis
  • IBM developerWorks
  • IBM Software support
  • IBM Social Business User Experience Blog
  • IBMSocialBizUX on Twitter
  • IBMSocialBizUX on Facebook
  • Lotus product forums
  • IBM Social Business UX blog
  • IBM Collaboration Solutions
  • Recently added feedRecently added
  • Recently edited feedRecently edited
  • Recently added comments feedRecently Added Comments
  • Wiki Help
  • Forgot user name/password
  • Wiki design feedback
  • Content feedback
  • About the wiki
  • About IBM
  • Privacy
  • Contact IBM
  • IBM Terms of use
  • Wiki terms of use