データの送信と取得

バインドされたデータ項目は、 新規の文書や置き換える文書としてデータソースに送信できます。

ここでは、文書の作成、取得、置き換えを行うための最も単純なデバイスを 示します。 データは、JavaScript で シンプルアクションと Domino® ライブラリによって 操作できます。 ビュー以外のコントロール (データ表など) は、 データの取得に使用できます。

文書の作成

タイプが Submit のボタンコントロールは、バインドされたデータをそのソースに送信します。 デフォルトでは、 新しい文書が作成されます。 以下の例にページ全体を示します。 ここには Domino 文書データソース (main という名前の フォーム)、データソースの項目にバインドされた入力ボックス、 および送信ボタンがあります。 ユーザーが入力ボックスに値を入力して このボタンを押すと、文書がデータストアに作成されます。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
	<xp:this.data>
		<xp:dominoDocument var="document1" formName="main"></xp:dominoDocument>
	</xp:this.data>
	<xp:inputText id="inputText1" value="#{document1.subject}"></xp:inputText>
	<xp:br></xp:br>
	<xp:button value="submit" id="button1">
		<xp:eventHandler event="onclick" submit="true"
			refreshMode="complete" immediate="false" save="true">
		</xp:eventHandler>
	</xp:button>
	<xp:button value="cancel" id="button2"></xp:button>
</xp:view>

送信ボタンをクリックすると、 要求がサーバーに送信されます。 サーバーは要求を処理し、新しい文書を作成して、 クライアントに応答を送信します。 デフォルトの応答では、 同じ XPage の新しいコピーが開かれます。

ページには、 タイプが Cancel のボタンコントロールを 配置することもできます。 このボタンは、 要求を送信して応答を受け取りますが、 サーバーはデータを処理しません。

文書の取得

ビューは、 以下のようにして文書を取得するように調整できます。
  • ビューのプロパティ pageName は、 リンクである要素をユーザーが選択した場合に開く XPage を 指定します。 設計モードで、ビューコントロールの [ビュー] タブを クリックし、[実行時に、次を使用して選択した文書を開く] を 選択します。 デフォルトでは、データソースのフォームに 関連付けられた XPage が使用されます。
  • ビューの列のプロパティ displayAs を使用すると、 ユーザーは、要素を下位文書へのリンクとして使用することができます。 設計モードで、 ビューの列コントロールの [表示] タブを クリックし、[列の値をリンクとして表示する] に チェックマークを付けます。
以下のビューコントロールは、 ユーザーがリンクをクリックした場合に replace という XPage を開き、 最初の列を設定します。最初の列には、subject 項目の 値がリンクとして入ります。 replace XPage を開くと、 バインドされたデータがビュー内のターゲット文書から 取り込まれます。
<xp:viewPanel rows="30" id="viewPanel1" pageName="/replace.xsp">
	<xp:this.facets>
	 <xp:pager partialRefresh="true" layout="Previous Group Next"
			xp:key="headerPager" id="pager1">
		</xp:pager>
	</xp:this.facets>
	<xp:this.data>
		<xp:dominoView var="view1" viewName="main"></xp:dominoView>
	</xp:this.data>
	<xp:viewColumn columnName="subject" id="viewColumn1"
		displayAs="link">
		<xp:viewColumnHeader value="subject"
			id="viewColumnHeader1">
		</xp:viewColumnHeader>
	</xp:viewColumn>
	<xp:viewColumn columnName="$1" id="viewColumn2">
		<xp:viewColumnHeader value="last modified"
			id="viewColumnHeader2">
		</xp:viewColumnHeader>
	</xp:viewColumn>
</xp:viewPanel>

文書の置き換え

既存の文書を変更するには、 最初に (前のセクションで説明した方法などで) その文書を 取得します。 すると、ユーザーが XPage で 変更を加えられるようになります。 データソースに action="editDocument" が 指定されている場合は、XPage を送信すると 置き換えが行われます。 この設定は、XPage などのコンテナの [データ] タブで 行うことができます。
以下の例に XPage 全体を示します。 これは、 前のセクションに示したビューコントロールのリンクをクリックした結果として 開かれる replace ページです。 このページには入力ボックスがあり、 取得したドキュメントの subject 項目が 取り込まれます。 また、この XPage にはナビゲーションルールが設定されており、 送信後に main という XPage が開かれます。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
	<xp:this.data>
		<xp:dominoDocument formName="main" var="document1" action="editDocument" />
	</xp:this.data>
	<xp:inputText id="inputText1" value="#{document1.subject}"></xp:inputText>
	<xp:br></xp:br>
	<xp:button value="submit" id="button1">
		<xp:eventHandler event="onclick" submit="true"
			refreshMode="complete" immediate="false" save="true">
		</xp:eventHandler>
	</xp:button>
	<xp:button value="cancel" id="button2">
		<xp:eventHandler event="onclick" submit="true"
			refreshMode="complete" immediate="true" save="false">
		</xp:eventHandler>
	</xp:button>
	<xp:this.navigationRules>
		<xp:navigationRule outcome="xsp-success" viewId="/main.xsp"></xp:navigationRule>
	</xp:this.navigationRules>
</xp:view>

実行時には、 ユーザーが main ページのビューにあるリンクを クリックします。 これにより、replace ページが開き、そこにデータが 取り込まれます。 ユーザーはこのページで 変更を加えることができます。 ページを送信すると、 既存の文書が置き換えられ、main ページが開きます。

照会保存エージェント

文書を保存する前に、文書を処理するエージェントを呼び出すことができます。 このエージェントは保存操作をキャンセルできます。

ページの [すべてのプロパティ] の下で、関連するデータソースを開きます ([data] > [data] の下)。 WebQuerySaveAgent プロパティの場合は、現在のアプリケーションでエージェントの名前を指定します。

ユーザーがデータソースへの送信を行うと、フィールド値が適用されてから文書が保存されるまでの間に、エージェントが呼び出されます。 エージェントは、LotusScript® NotesAgentContext クラスの DocumentContext または Java™ AgentContext クラスの getDocumentContext を介してメモリー内文書にアクセスできます。エージェントは、値が 0 (ゼロ) の SaveOptions という名前の項目を追加することにより、保存操作をキャンセルできます。 SaveOptions のそれ以外の値の場合には、文書が保存されますが、SaveOptions 項目は含められません。

次の XPage では、保存操作での最終送信前にエージェント saveAgentJava を呼び出します。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">

	<xp:this.data>
		<xp:dominoDocument var="document1" formName="City"
			webQuerySaveAgent="saveAgentJava">
		</xp:dominoDocument>
	</xp:this.data>
	<xp:messages id="messages1"></xp:messages>
	<xp:table>
		<xp:tr>
			<xp:td colspan="2">
				<xp:label
					value="If the field#1 is empty, then the agent will prevent it from being saved"
					id="label0"></xp:label>
			</xp:td>
		</xp:tr>
		<xp:tr>
			<xp:td>
				<xp:label value="Field1:" id="label1" for="inputText1"></xp:label>
			</xp:td>
			<xp:td>
				<xp:inputText value="#{document1.Field1}" id="inputText1"></xp:inputText>
			</xp:td>
		</xp:tr>
		<xp:tr>
			<xp:td>
				<xp:label value="Field2:" id="label2" for="inputText2">
				</xp:label>
			</xp:td>
			<xp:td>
				<xp:inputText value="#{document1.Field2}" id="inputText2"></xp:inputText>
			</xp:td>
		</xp:tr>
		<xp:tr>
			<xp:td>
				<xp:label value="Agent calculated Value:" id="label3">
				</xp:label>
			</xp:td>
			<xp:td>
				<xp:text escape="true" id="computedField2" value="#{document1.AgentValue}"></xp:text>
			</xp:td>
		</xp:tr>
		<xp:tr>
			<xp:td></xp:td>
			<xp:td>
				<xp:button value="Save" id="button1">

					<xp:eventHandler event="onclick" submit="true"
						refreshMode="complete">
						<xp:this.action>
							<xp:saveDocument var="document1"></xp:saveDocument>
						</xp:this.action>
					</xp:eventHandler>
				</xp:button>
			</xp:td>
		</xp:tr>
	</xp:table>
</xp:view>
次に、保存操作を条件付きでキャンセルする saveAgentJava のコードを示します。
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();
          doc.replaceItemValue("AgentValue", "Processed by Java: "+doc.getItemValueString("Field1")+","+doc.getItemValueString("Field2"));
          
          String field1 = doc.getItemValueString("Field1");
          if(field1==null || field1.length()==0) {
        	  doc.replaceItemValue("SaveOptions", Integer.valueOf(0));
          }
          
      } catch(Exception e) {
          e.printStackTrace();
       }
   }
}