2016-08-26 3 views
1

xページでは、ユーザーがログインする必要があります。ユーザーのログイン後、ログインしたユーザーに属する情報が表示されます。xpages:別のユーザーログイン時の表示を更新

レビューのために以下のxpageコードを見つけてください:(Lotus Clientのビューには、UserName、UserIDなどのさまざまな列が含まれていますが、xpageではログインする必要があるため、私はブラウザ(Internet Explorerなど)でのXPageをプレビューすると、データ

tmp:[email protected]([CN];@UserName); 
SELECT Form = "BookVenue" & UserName =tmp 

を取得するために、数式を使用して、のXPageにユーザー名)]ビューについて

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 

<xp:viewPanel rows="30" id="viewPanel1" pageName="/BookVenue.xsp" viewStyle="width:700.0px"> 

<xp:this.data> 
    <xp:dominoView var="view4" viewName="UserBookedVenueInfo"> 
    </xp:dominoView> 
</xp:this.data> 
<xp:viewColumn columnName="Venue" id="viewColumn1" displayAs="link"> 
    <xp:viewColumnHeader value="Venue" id="viewColumnHeader1" sortable="true"> 
    </xp:viewColumnHeader> 
</xp:viewColumn> 
<xp:viewColumn columnName="ReturnDate" id="viewColumn2" displayAs="link"> 
    <xp:viewColumnHeader value="Return Date" id="viewColumnHeader2" sortable="true"> 
    </xp:viewColumnHeader> 
</xp:viewColumn> 
<xp:viewColumn columnName="Remarks" id="viewColumn3" displayAs="link"> 
    <xp:viewColumnHeader value="Remark" id="viewColumnHeader3" sortable="true"> 
    </xp:viewColumnHeader> 
</xp:viewColumn> 
<xp:this.facets> 
    <xp:pager partialRefresh="true" layout="Previous Group Next" xp:key="footerPager" id="pager1"> 
    </xp:pager> 
</xp:this.facets> 
</xp:viewPanel> 
</xp:view> 

を表示し、ビューを表示することができます関連するデータしかし、ブラウザを閉じると、別のアカウントを使用してログインすると、ビューには以前のユーザーの情報が表示されます。

最初に私はテスターAのアカウントを使ってログインすると、テスターAに関連する情報が表示されます。その後、ブラウザを閉じてxページを開くと、ログインする必要があります私はテスターBのアカウントを使用してログインすると、ビューにはテスターAに関する情報が表示されます。ブラウザを閉じてテスターCのアカウントを使用してログインすると、ビューにはまだテスターAに関する情報が表示されます。

テスターCビューにはまだテスターAに関する情報が表示されます。私はブラウザーを閉じません。ビューでは、私はこれに式を変更します。

SELECT Form = "BookVenue" & UserName = @Name([CN];@UserName) 

私はブラウザをリフレッシュし、ビューはC.をテスターに​​関連するデータは、その後、私は、ブラウザを閉じてログインするテスターBのアカウントを使用して示しています。ビューには、テスターCに関連するデータが表示されます。

奇妙なことは、数式を変更してブラウザを更新すると、ログインしたユーザーに関連する適切なデータが表示されることです。

tmp:[email protected]([CN];@UserName); 
SELECT Form = "BookVenue" & UserName =tmp 

ビューは、以前にログインしたユーザーの情報を「覚えている」のはなぜですか? 私はいつもユーザーがxpageにログインし、ユーザーがブラウザを閉じると、ユーザーとxpageの間の接続が閉じられていると思います。私は、それぞれのビューで式を変更続けると

(多分私の考え方は正しくない)、ビューは、ユーザーに関連する適切なデータを表示することができます。(私は、このアプローチが機能する理由はわかりません。)

私の質問は、別のユーザーのログイン時にビューを更新する方法ですか?私はこの問題は式である推測:

tmp:[email protected]([CN];@UserName); 
SELECT Form = "BookVenue" & UserName =tmp 

SELECT Form = "BookVenue" & UserName = @Name([CN];@UserName) 

私はインターネット@Nameで検索しかし([CN];ユーザー名@)ユーザ名を取得するために正しいです。私もビューとxpageを再作成しますが、結果は同じです。私はまだxpageでビューをリフレッシュするために、ビューの式を変更する必要があります。

私の間違いを誰かに教えてもらえますか?ありがとうございました。

参考:

http://www.ibm.com/support/knowledgecenter/SSVRGU_9.0.0/com.ibm.designer.domino.main.doc/H_USERNAME.html

+1

ビューの選択式に@Usernameを使用しないでください。 –

+0

こんにちは@FrantisekKossuth、ご意見ありがとうございます。どうか質問してもらえますか?ビューの選択式でユーザー名を使用しないのはなぜですか?それを使用しない場合は、私はビューでユーザー名を取得することができます任意のメソッドです – Learner

+1

私はこの[投稿]を(http://stackoverflow.com/questions/32057349/notes-view-how-can-i-show-ユーザー名の下にあるドキュメントのみ)@Usernameをビューの選択式で使用しない理由を説明します。コメントで私の質問を申し訳ありません。 – Learner

答えて

2

あなたはビューの選択に@Usernameを使用することはできません(上記のコメントを参照)。 それでもあなたは、以下のソリューション設計することによって、これを達成することができます: - ユーザー名 を表示する分類の列を持つビューを作成する - ビューパネルで、session.getEffectiveUserNameを(使用して計算された「カテゴリ名によるフィルター」を追加)

以下のXPageは、フィルタリングするユーザー名を含む "cat"フィールドを持つ "view"という名前のビューを使用します。

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
<xp:this.data> 
    <xp:dominoView var="view1" viewName="view" 
     categoryFilter="#{javascript:session.getEffectiveUserName()}"> 
    </xp:dominoView> 
</xp:this.data> 

<xp:viewPanel value="#{view1}" id="viewPanel1"> 
    <xp:this.facets> 
     <xp:pager partialRefresh="true" layout="Previous Group Next" 
      xp:key="headerPager" id="pager1"> 
     </xp:pager> 
    </xp:this.facets> 
    <xp:viewColumn columnName="cat" id="viewColumn1"> 
     <xp:this.facets> 
      <xp:viewColumnHeader value="Cat" xp:key="header" 
       id="viewColumnHeader1"> 
      </xp:viewColumnHeader> 
     </xp:this.facets> 
    </xp:viewColumn> 
    <xp:viewColumn columnName="subject" id="viewColumn2"> 
     <xp:this.facets> 
      <xp:viewColumnHeader value="Subject" xp:key="header" 
       id="viewColumnHeader2"> 
      </xp:viewColumnHeader> 
     </xp:this.facets> 
    </xp:viewColumn> 
</xp:viewPanel></xp:view> 

このソリューションを使用すると、すべてのユーザーは引き続きすべてのドキュメントにアクセスでき、(理論上は)読むことができます。ドキュメントを利用できないようにするには、リーダーフィールドを実装する必要があります。詳細はこちらをご覧ください。http://www.ibm.com/developerworks/lotus/library/reader-names/

+0

適切なアプリケーション設計では、ビューがすべての文書を表示するということは問題ではありません。個人的には、私はXPagesのアプリケーション設計とデータ+フォーム+ビュー+エージェント設計を2つの別々のNSFにすることをお勧めします。リッチテキストフィールドの添付ファイルや画像にアクセスしている場合を除き、データベース上でURLを開くのを防ぎ、すべての直接URLアクセスを削除することができます。ビューとフォームは、フォームやビューのプロパティでWebから非表示にすることができます。 XPagesはサーバー側で実行されるため、XPagesアプリケーションは引き続きそれらを使用できます。 –

+0

回答とコメントありがとうございました。私は 'session.getEffectiveUserName()'を使うと、この 'CN = XXX/OU = YYY/O = ZZZ'のような値を返します。しかしフォームの中で、私はそれがリーダフィールドを持っていて、コードは '@Name([CN]; @ UserName)'であることを発見しました。私はコードを試して、 'CN ='と '/ OU = YYY/O = ZZZ'のないXXX部分だけを返します。 – Learner

+0

私は別のNSFを作成することができません。だから私は、ビューパネルのコードを変更することに焦点を当てることがあります。ですから、 "category nameでフィルタリング"では、 'session.getEffectiveUserName()'を使用し、CN =なしでCN部分を取得するコードを記述できますか? – Learner

関連する問題