2016-08-26 3 views
1

На xpage для его входа в систему требуется авторизация. После входа в систему пользователя отображается представление, которое принадлежит зарегистрированному пользователю.xpages: обновите представление при входе пользователя в систему

Код для поиска ниже: (примите во внимание, что в Lotus Client содержатся различные столбцы, например UserName, UserID и т. Д., Но на xpage, из-за необходимости входа в систему, поэтому я не отображать имя пользователя в 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> 

О представлении, я использую формулу, чтобы получить данные

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

Когда я просмотреть XPage в браузере (Internet Explorer), вид может отображать соответствующие данные. Однако, когда я закрываю браузер, я использую другую учетную запись для входа в систему, представление показывает информацию предыдущего пользователя.

Примите во внимание следующую ситуацию: в первый раз я использую учетную запись тестера A для входа в систему, представление может отображать информацию, относящуюся к тестеру A. Затем я закрываю браузер и снова открываю xpage, он требует, чтобы я заходил так, чтобы Я использую счетчик тестера 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]; @ UserName) правильно, чтобы получить имя пользователя. Я снова воссоздаю представление и 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, спасибо за ваш комментарий. Могу я задать вопрос, пожалуйста? Почему бы не использовать Username в формуле выбора представления? Если не использовать его, есть ли какой-либо метод, я могу получить имя пользователя в представлении – Learner

+1

Я думаю, что это [сообщение] (http://stackoverflow.com/questions/32057349/notes-view-how-can-i-show- only-the-documents-which-are-under-the-users-name) объясняют, почему не следует использовать @Username в формуле выбора представления. Извините за мой вопрос в комментарии. – Learner

ответ

2

Вы не можете использовать @Username в поле зрения выбора (см комментарий выше). Тем не менее вы можете добиться этого с помощью следующего проекта решения: - Создание представления с категоризированным столбцом, который отображает имя пользователя - в панели просмотра, добавление «Фильтр по категории имени» рассчитывается с использованием session.getEffectiveUserName()

В XPage ниже используется представление с именем «view» с полем «cat», которое содержит имя пользователя для фильтрации.

<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, а данные + форма + просмотр + дизайн агента должен быть в двух отдельных NSF. Если вы не получаете доступ к вложениям или изображениям в расширенных текстовых полях, вы можете запретить открывать URL-адрес в базе данных и удалять все прямые URL-адреса. Независимо от того, что виды и формы могут быть скрыты из сети в свойствах формы или вида. Поскольку XPages работает на стороне сервера, приложение XPages все равно сможет их использовать. –

+0

Благодарим вас за ответ и комментарий. Я замечаю, что если я использую 'session.getEffectiveUserName()', он вернет значение, подобное этому 'CN = XXX/OU = YYY/O = ZZZ'. Однако в форме я обнаружил, что у него есть поле считывателя, а код - '@Name ([CN]; @ UserName). Я пробовал код, и он возвращает только часть XXX без 'CN =' и '/ OU = YYY/O = ZZZ'. – Learner

+0

Я не уверен, что могу создать еще один NSF. Поэтому я могу сфокусироваться, чтобы изменить код на панели просмотра. Итак, в разделе «Фильтровать по названию категории» можно использовать 'session.getEffectiveUserName()', а затем написать код для извлечения CN-части без CN =? – Learner