XPage に、ボタンで開く拡張ライブラリ ダイアログ コントロールがあります。
XSP.openDialog("#{id:commentsDialog}");
私の XPage には、document1 というドキュメント ソースがあります。これらのフィールド (データ パレットからドラッグ アンド ドロップ) をダイアログ コントロールに配置すると、フィールド (docID) は存在しますが、編集できません。表示用に計算されたように見えます。
<xe:dialog id="commentsDialog" title="Comments" styleClass="dialogBoxComments">
<xp:panel>
<xp:table style="width:100%">
<xp:tr>
<xp:td>
<xp:label value="Enter your comments..." id="label2"></xp:label>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:inputTextarea id="comments" style="width:100%;height:100px">
</xp:inputTextarea>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:div style="text-align:right">
<xp:button value="Submit" id="submitButton">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:saveComments();}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button id="cancelButton" value="Cancel">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[XSP.closeDialog("#{id:commentsDialog}");]]></xp:this.script>
</xp:eventHandler>
</xp:button>
</xp:div>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:inputText value="#{document1.docID}" rendered="false"
id="docID"></xp:inputText>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel>
<xp:br></xp:br>
</xe:dialog>
ユーザーが値を入力する入力テキスト領域がありますが、SSJS を使用してその値を取得するのに問題があります。私が試してみました:
function getComponentValue(id){
var field = getComponent(id);
var value = field.getSubmittedValue();
if( null == value ){
// else not yet submitted
value = field.getValue();
}
return value
}
入力テキスト エリアの値を取得するには、どうすればよいかわかりません。データ パレットの既存のフィールドにバインドすると、編集不可のように見え、値を入力できないからです。
また、SSJS を呼び出すダイアログ コントロールに送信ボタンがあります。
function saveComments() {
// Need to create a comments doc for the movie...
var db:NotesDatabase = session.getCurrentDatabase();
var doc:NotesDocument = currentDocument.getDocument();
var unid = getComponentValue("docID");
// Grab comments from dialog...
var comments = getComponentValue("comments");
// Create the comments doc...
var docComm:NotesDocument = db.createDocument();
docComm.replaceItemValue("Form", "comment");
var nowValue = @Text(@Now());
var currentUser = sessionScope.get("currentUser");
docComm.replaceItemValue("cm_Key", unid);
docComm.replaceItemValue("cm_By", currentUser);
docComm.replaceItemValue("cm_Date", nowValue);
docComm.replaceItemValue("cm_Key", unid);
docComm.save();
}
サーバー側からダイアログを閉じるにはどうすればよいですか?
ですから、3 つのこと (忍耐に感謝します):
- ダイアログ コントロールでフィールドを編集可能にする方法
- ドキュメントのフィールドにバインドされていない入力テキスト領域から値を取得する方法1
- サーバー側からダイアログを閉じる方法
ありがとう!
編集: 画像を正しく表示できるように、このコメントに編集を加えました...
- docID フィールドを表示できるようにしましたが、計算されたように見え、編集できません。
- 2 番目のドキュメント データ ソース (commentDocument) を追加し、フィールドの値を [データ] パレットの値に設定しました。編集できない可能性があると考えて、フィールドが表示されません。
画像は次のとおりです。緑色のボックスはコメント フィールド (commentsDocument ソースの cm_Comm) が存在する場所であり、赤色のボックスは編集不可の docID フィールドです。
コントロールの背後にあるコードは次のとおりです。
<xe:dialog id="commentsDialog" title="Comments" styleClass="dialogBoxComments">
<xp:panel>
<xp:table style="width:100%">
<xp:tr>
<xp:td>
<xp:label value="Enter your comments..." id="label2"></xp:label>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:inputTextarea id="comments" style="width:100%;height:100px"
value="#{commentDocument.cm_Comm}">
</xp:inputTextarea>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:div style="text-align:right">
<xp:button value="Submit" id="submitButton">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:saveComments();getComponent("commentsDialog").hide();}]]></xp:this.action>
</xp:eventHandler>
</xp:button>
<xp:button id="cancelButton" value="Cancel">
<xp:eventHandler event="onclick" submit="false">
<xp:this.script><![CDATA[XSP.closeDialog("#{id:commentsDialog}");]]></xp:this.script>
</xp:eventHandler>
</xp:button>
</xp:div>
</xp:td>
</xp:tr>
<xp:tr>
<xp:td>
<xp:inputText value="#{document1.docID}" id="docID"></xp:inputText>
</xp:td>
</xp:tr>
</xp:table>
</xp:panel>
<xp:br></xp:br>
</xe:dialog>
私が間違っていることを教えてください-これに感謝します!