バインドされたデータ項目は、 新規の文書や置き換える文書としてデータソースに送信できます。
ここでは、文書の作成、取得、置き換えを行うための最も単純なデバイスを 示します。 データは、JavaScript で シンプルアクションと Domino® ライブラリによって 操作できます。 ビュー以外のコントロール (データ表など) は、 データの取得に使用できます。
<?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 のボタンコントロールを 配置することもできます。 このボタンは、 要求を送信して応答を受け取りますが、 サーバーはデータを処理しません。
<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>
<?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 ページが開きます。
ページの [すべてのプロパティ] の下で、関連するデータソースを開きます ( の下)。 WebQuerySaveAgent プロパティの場合は、現在のアプリケーションでエージェントの名前を指定します。
ユーザーがデータソースへの送信を行うと、フィールド値が適用されてから文書が保存されるまでの間に、エージェントが呼び出されます。 エージェントは、LotusScript® NotesAgentContext クラスの DocumentContext または Java™ AgentContext クラスの getDocumentContext を介してメモリー内文書にアクセスできます。エージェントは、値が 0 (ゼロ) の SaveOptions という名前の項目を追加することにより、保存操作をキャンセルできます。 SaveOptions のそれ以外の値の場合には、文書が保存されますが、SaveOptions 項目は含められません。
<?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>
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();
}
}
}