2016-03-21 6 views
1

私はXPages RESTコントロールを使用して、RESTコントロール自体が存在するデータベースとは異なるデータベース内のリソースにアクセスしています。それは簡単です、私はちょうどdatabaseNameプロパティ を使用しています。私は外部データベース(databaseNameプロパティで参照されているもの)へのハンドルを取得したいと思う、それはむしろ挑戦しているようです この特定の場合私は、ビューの列の数式で親文書のデータにアクセスするためのハンドルが必要です。関係する外部データベースがない場合は、グローバルデータベースプロパティを使用するだけですが、RESTコントロールをホストするデータベースを指しているため、この場合は機能しません。XPages REST-Control。外部データベースへのハンドルを取得する方法

+1

これが役立つかどうかわかりませんが、これはBluemixの外部データベースに接続して検索可能なRESTサービスを作成する方法です - http://xomino.com/2015/11/27/xpages-in-bluemix-creating-a-searchable -rest-service/ – MarkyRoden

+1

この外部databaseNameは、xsp.propertiesファイルまたは独自のプロパティファイルに格納します。したがって、アプリケーション全体がこのパラメータから恩恵を受けることができます –

答えて

1

私は非常にフランク・ファン・デル・リンデンは簡単に使用する方法/機能を取得プロパティによって参照することができXSPプロパティとして設定し、コメントで推奨され、あなたのデータを作るの素敵な副作用を持っているものをお勧めしますアプリケーション間で簡単に接続呼び出しをコピー/貼り付けることができます。

例:

私は<app>/WebContent/WEB-INF/xsp.propertiesで、data property name stored as an xsp propertyを持っている:

xsp.local.data=MyApp_data.nsf 

私はa managed bean to perform the app config作品を使用して行われます。

<managed-bean> 
    <managed-bean-name>confBean</managed-bean-name> 
    <managed-bean-scope>application</managed-bean-scope> 
    <managed-bean-class>com.myApp.config.AppUtil</managed-bean-class> 
</managed-bean> 

これはmy AppUtil beanはデシベルパスにプロパティを設定することを意味:

ExtLibUtil.getXspContext().getProperty("xsp.local.data", "MyApp_data.nsf") 

*注:最初のパラメータはプロパティ名で、第二は、「デフォルト」である(フェイル・オーバー)の値が、イベントでそれは完全なパスを引っ張って次にプロパティの値

を見つけることができません。 restService、あなたがする必要があるだろう、すべてが値に突き出すあるが、そのように(:デフォルトの列とviewJsonService同じサーバを想定し、例がXEを示しています):

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view 
    xmlns:xp="http://www.ibm.com/xsp/core" 
    xmlns:xe="http://www.ibm.com/xsp/coreex"> 
    <xe:restService 
     id="restService1" 
     pathInfo="data"> 
     <xe:this.service> 
      <xe:viewJsonService 
       databaseName="#{confBean.dbAppPath}" 
       viewName="SomeView" 
       defaultColumns="true" /> 
     </xe:this.service> 
    </xe:restService> 
</xp:view> 

を[更新しますXEについて]

Sven Hasselbach氏は以下のコメントで指摘しているように、管理プロパティはxspプロパティファイルを編集することなくほぼ同じ結果を達成し、マネージドBean定義とインラインで(アプリケーションに対して明示的な)プロパティを保持します。 XPages managed beans and scoped variables上の彼の答えから取られた、ここにスヴェンは管理プロパティ使用して、同じことをする方法の例です:

彼のコンフィグ豆で

<managed-bean> 
    <managed-bean-name>myBean</managed-bean-name> 
    <managed-bean-class>ch.hasselba.xpages.MyBean</managed-bean-class> 
    <managed-bean-scope>application</managed-bean-scope> 

    <managed-property> 
     <property-name>dbName</property-name> 
     <value>MyName</value> 
     <property-class>java.lang.String</property-class> 
    </managed-property> 
</managed-bean> 

faces-config.xmlでは、それは(ラPOJO)任意のプロパティとして定義されています、私有財産と公共ゲッター/セッターを持つ:

//... 
private String dbName; 

public void setDbName(String dbName) { 
    this.dbName = dbName; 
} 

public String getDbName() { 
    return dbName; 
} 
//... 

使用できるだけで任意の管理対象Beanのプロパティとして:

<xp:text 
    value="#{myBean.dbName}" /> 

+1

代わりに管理プロパティを使用するのはなぜですか? –

+0

これは、この例が1つのプロパティにのみ焦点を当てており、マネージドBeanのプロパティに 'static final'値を注入するための素晴らしい方法であるため、これはかなり役に立ちます。私はそれを私の答えに加えました。 –

+0

ありがとう、以下の質問に対する自分の答えをご覧ください。たぶん、元の質問ではっきりしていないかもしれませんが、私の懸念事項は、データベースへのパスではなくdbオブジェクト自体を扱う方法に関するものです。 –

1

私の元の質問では指摘されていませんでしたが、外部データベースへのパスを定義するconfig-servletがあります。

多くのオーバーヘッドを発生させない方法で、データベースオブジェクトのハンドルを取得する方法についての質問がありました。昨日のPaul Winters(OpenNTFチャンネル)との議論の後、私は今、ビュー列で外部DBを開くことは完全に大丈夫だと確信しています。

var pid = rowData.getColumnValue("r_companyid"); var path = configBean.getDbPath(no.mycompany.myapp.Configuration.DB_PATH_CONTACTS); var contactsDb:NotesDatabase = session.getDatabase(database.getServer(), path); var docParent:NotesDocument = contactsDb.getDocumentByUNID(pid); retVal = docParent.getItemValueString("CompanyName");

むしろサービス内の外部ソースへのハンドルを探しているよりも、最終的な解決のための私のコードをneededSoたび、私は単純にコードのいくつかのシンプルなラインに沸くコードでDBを開きます

関連する問題