1

必要なドキュメントと関連する REST コンポーネントを一覧表示する iNotes リスト ビュー オブジェクトがあります。「OnSelectEntry」メソッドには、次のコードがあります。

var unid =  items[0]["@unid"];
var myUrl = "test.nsf/main.xsp/docPathInfo/unid/" + unid;

var h;

if (window.XMLHttpRequest){
    h = new XMLHttpRequest();
} else {
    h = new ActiveXObject("Microsoft.XMLHTTP");
}

h.onreadystatechange=function() {
  if (h.readyState == 4 && h.status == 200) {
      var myObject = eval('(' + h.responseText + ')');

      var result = dojo.byId("#{id:inputText1}");
      result.value = myObject.field1 + " " + myObject.field2;

  }
}

h.open("GET",myUrl,false);
h.send();

このコードは、NSF がサーバーでホストされている場合は完全に機能しますが、ローカルにある場合は次のように失敗します。

uncaught exception: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nslXMLHttpRequest.send]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: http://127.0.0.1:50113/xsp/.ibmxspres/.mini/dojo/.en/@Wc&@Eab&@Eya&@lu.js :: anonymous :: 

クライアントで作業するにはこれが必要です。これは、クライアントでコールバックを行う正しい方法ですか?

ACL アクセスも変更しようとしましたが、役に立たないようです。また、相対 URL ではなく絶対 URL も試しました。

[アップデート]

代わりに、次のように Dojo 呼び出しに変更してみました。

var x;
var myCallback = function(data, ioArgs)
{
 var myObject = eval('(' + data + ')');

  var result = dojo.byId("#{id:inputText1}");
  result.value = myObject.field1 + " " + myObject.field2;
}
dojo.xhr("Get", {
url: myUrl,
handleAs: "text",
timeout: 10000,
load: myCallback
});

このコードを実行すると、サーバーでは正常に動作しますが、クライアントで実行すると動作しません。XPages.log ファイルに次のメッセージが表示されます。

1/10/13 10:45 AM: Internal warning: Check access being called outside of a request
1/10/13 10:45 AM: Internal warning: Check access being called without a valid session/database
4

1 に答える 1

2

OK クライアントで REST を使用してそれを行う方法についてはわかりませんが、XSP.partialRefreshGet() 呼び出しを行うことができ、それは機能するはずです。

したがって、コードでは次のようにします。

var partialRefreshOptions = { 
    "unid" : items[0]["@unid"]
};

// If you want to do any processing client side.
function partialRefreshOnComplete() {}
function partialRefreshOnStart() {};
function partialRefreshOnError() {};

// Make the call. 
XSP.partialRefreshGet("#{id:someDummyField}", {
    params : partialRefreshOptions,
    onStart : partialRefreshOnStart, 
    onError : partialRefreshOnError, 
    onComplete : partialRefreshOnComplete}
);

次に、「someDummyField」で表示用に計算するように設定し、次のようなコードを作成します。

if(!param.isEmpty()){
    // Do something with the param.unid. Alternatively... 
    return param.unid;

} 

これに関する推奨事項として、「XPages Portable Command Guide」の 176 ページがあります。

これを少し拡張すると、XHR の代わりに XSP.partialRefreshGet() を使用する必要があります。AJAX 呼び出しが正しく行われないと、バックエンド ドキュメントが破損する可能性があるためです。これも同書に記載されています。

于 2013-01-10T15:54:45.577 に答える