4

xPages でデータ コンテキストを使用したことがないので、その利点を知りたいのですが、

メモリに何かを返したい場合は、メモリにも格納されていると思われる SSJS スクリプト ライブラリで関数を呼び出すことがよくあります。

たとえば、ssjs に notesdocument を返す関数があるとします。この関数は、xpage のいくつかの場所から呼び出される可能性があります。この場合、ssjs スクリプト ライブラリに関数を持つことに関して、データ コンテキストは有益でしょうか。

4

2 に答える 2

7

dataContext は、グローバル変数と考えることができます。SSJS 関数に対する利点は次のとおりです。

1) dataContext は SSJS / Java を実行し、何でも値を返します。dataContext への参照は、データソースと同じように EL (例: #{myVar}) を使用します。だから私の理解では、毎回SSJS/Javaコードを実行するのではなく、ELが価値を得るということです。したがって、そこにはパフォーマンス上の利点があります。

2) dataContext の値は、動的に、またはページの読み込み時に計算できます。したがって、関数を毎回実行するのではなく、${javascript:@Today()} を使用して 1 回実行することができます。

dataContext への参照は EL を使用するため、パフォーマンス上の利点もあると思います。したがって、参照のどの時点でも SSJS を実行しないため、SSJS パーサーを経由する必要はありません。

dataContext の追加の利点は、データソースが可能な任意のレベル (XPage、Custom Control、または Panel) にスコープを設定できることです。これにより、viewScope よりも有利になります。したがって、繰り返しコントロールのパネルに dataContext を設定して、NotesDocument のフィールドまたはフィールドの連結への複数の参照を回避することもできます。

私は、Domino オブジェクトを dataContext に格納することを避ける傾向がありました。これは主に、リサイクルに固有のリスクがあるためです。問題があるかどうかはわかりません。

于 2012-02-23T13:55:43.633 に答える
1

@Withers: #{MyVar} dblookup で DataContext 変数 #{DataStoreDbName} を使用したときに機能しないことがわかりました: (ただし、ウィザース氏の投稿は非常に価値があると思います)

これらは機能しませんでした:

#{DataStoreDbName}
@Sum(@DbLookup("#{DataStoreDbName}","personnelbudget",compositeData.catid,10))

#{id:DataStoreDbName}
@Sum(@DbLookup("#{id:DataStoreDbName}","personnelbudget",compositeData.catid,10))

これはうまくいきました

DataContext が入力されたコントロールの [プロパティ] タブの [データ] セクションにある DataSources のリストに dataContext var が表示される方法が気に入っています。

  1. DataContext の定義から始めます: var = DataStoreDbName

  2. このデータ コンテキスト変数は、@DbLookup で使用している Server:DB の外部データベースです。

    DataStoreDbName」変数名が、データ セクションの下のデータ ソースに表示されるようになりました。

  3. これは、私が DataContext を使用している DbLookup です: @Sum(@DbLookup( DataStoreDbName ,"personnelbudget",compositeData.catid,10))

ここに画像の説明を入力

  1. 上記は (明らかに) 別の DataConext の例ですが、変数名がフィールドまたは非表示フィールドの customCoverter の計算でどのように使用されたかを示します (これにより、非表示フィールドは Notes の計算フィールドのように機能します)。*エラーをスローしないように合計を @Text() することに注意してください。

ここに画像の説明を入力

<xp:text> は DataContext 変数の値を表示するだけですが、<xp:inputHidden> は customCoverter で DataContext 変数の値を使用して、送信/保存時に値を保存/保持します。

于 2012-09-28T19:43:34.447 に答える