クライアント側の Javascript によってトリガーされた Repeat Control を更新したいと思います。興味深いことに、私のデータソースは JDBC クエリです。これが、部分的な更新だけを行わなかった理由です。XHR リクエストを使用してこれを行う方法についてのページを見たことがありますが、JDBC データを更新して新しい情報を取得する方法がわかりません。新しいデータではなく、古いデータで繰り返しコントロールを更新できます。
ランタイムが新しいデータを認識していないため、タイムアウトが必要になる可能性があることを示すRepeat control refresh errorを見ました。DBで何かを手動で変更して1分待った後、XHRを実行しましたが、まだ古い情報がありました。
RPC 呼び出しで変数 (jdbcPendingSummary) を更新できますか? そうでない場合は、サーバーにコールバックして CSJS 関数内で更新をトリガーできますか?
<xp:this.data>
<xe:jdbcQuery connectionName="testDB"
sqlQuery="EXEC ptoGetPendingRequests #{sessionScope.userID}"
var="jdbcPendingSummary" />
</xp:this.data>
<xe:jsonRpcService id="ptoRPC" serviceName="ptoRPC">
<xe:this.methods>
<xe:remoteMethod name="createNewRequest">
<xe:this.script><![CDATA[
javaBeanObject.ptoCreateRequest(#{sessionScope.userID}, startDate, endDate, comment, d1,....,d15);
// Can I update the datasource var here?
]]></xe:this.script>
<xe:this.arguments>
<xe:remoteMethodArg name="startDate" type="string"></xe:remoteMethodArg>
..........
<xe:remoteMethodArg name="d15" type="number"></xe:remoteMethodArg>
</xe:this.arguments>
</xe:remoteMethod>
</xe:this.methods>
</xe:jsonRpcService>
<xp:scriptBlock id="scriptBlock1">
<xp:this.value><![CDATA[
function createNewRequest(startDateID, endDateID, commentID, hiddenDivID, requestID) {
ptoRPC.createNewRequest(dojo.byId(startDateID).value, dojo.byId(endDateID).value, ........).addCallback( function(response) {
// ????? Refreshes the Repeat Control, but has the stale data.
setTimeout(
function() {
XSP.partialRefreshGet(requestID, {onComplete: function(responseData) { } })
// Or how about updating the datasource var here?
}, 8000);
});
}
]]></xp:this.value>
</xp:scriptBlock>