2014-09-15 7 views
0

Hello Domino 프로그래머!SessionAsSigner - 데이터베이스 개체 충돌

은 내가 Xpages 응용 프로그램 작업을하고 난 다음 문제로 실행 :

내가보기에있는 모든 문서의 수를 얻을 수 sessionAsSigner 객체를 사용합니다. 표시 할 단일 계산 필드를 사용합니다. 사용자가 볼 수있는 문서 수/모든 문서 수 값과 현재 계산 된 필드 (sessionAsSigner 아님)를 표시하는 또 다른 계산 된 필드를 사용합니다. 사용자 이름 계산 된 필드 코드에서

Page design

내가 다음 코드를 입력 : 다음과 같이

페이지 보인다

var viewAsUser = database.getView("AllByHID"); 
var docCountUser = viewAsUser.getAllEntries().getCount(); 

var dbAsSigner = sessionAsSigner.getCurrentDatabase(); 
var viewAsSigner = dbAsSigner.getView("AllByHID"); 
var docCountSigner = viewAsSigner.getAllEntries().getCount(); 

return docCountUser.toString() + "/" + docCountSigner.toString(); 
: DocCount 계산 된 필드 코드에서

session.createName(session.getEffectiveUserName()).getCommon() 

을 나는 다음과 같은 코드를 입력

다음과 같은 결과가 나타납니다.

enter image description here

이 현재 사용자가 볼 수있는 문서의 정확한 숫자이지만, sessionAsSigner 사용이 완전히 무시 된 것처럼 보인다. 후

일부 내가 얻기 위해 몇 줄의 코드를 교환 "땜질"(?) :

var dbAsSigner = sessionAsSigner.getCurrentDatabase(); 
var viewAsSigner = dbAsSigner.getView("AllByHID"); 
var docCountSigner = viewAsSigner.getAllEntries().getCount(); 

var viewAsUser = database.getView("AllByHID"); 
var docCountUser = viewAsUser.getAllEntries().getCount(); 

return docCountUser.toString() + "/" + docCountSigner.toString(); 

및 결과에

...

enter image description here

두 값이 올바른지,하지만 난 왜 내가 한 번에 전화를 걸 수 없는지 궁금해? 여기에 뭔가가 빠졌습니까?

도움이 될 것입니다.

답변

4

을 사용하십시오. Domino는보기의 기존 참조를 알고 있고 (다른 액세스 권한을 사용하여) 두 개의 인스턴스를 작성하는 대신이를 사용합니다.

은 먼저보기를 재활용 할 수 있습니다

var dbAsSigner = sessionAsSigner.getCurrentDatabase(); 
var viewAsSigner = dbAsSigner.getView("AllByHID"); 
var docCountSigner = viewAsSigner.getAllEntries().getCount(); 
viewAsSigner.recycle(); 

var viewAsUser = database.getView("AllByHID"); 
var docCountUser = viewAsUser.getAllEntries().getCount(); 

return docCountUser.toString() + "/" + docCountSigner.toString(); 

이 작동합니다.

+0

뷰를 재활용해야한다는 의미입니까, 아니면 데이터베이스 개체도 재활용해야합니까? – ShirouWrath

+0

보기를 재생하면됩니다. –

+0

알았어. 당신의 도움을 주셔서 대단히 감사합니다! – ShirouWrath

0

getCurrentDatabase()sessionAsSigner과 함께 사용하지 않아야합니다. 현재 사용자에 대해 검색된 것과 동일한 Database 객체를 검색합니다. 대신 sessionAsSigner.getDatabase(database.getServerName(), database.getFilePath())

+0

그냥 테스트 됨 var dbAsSigner = sessionAsSigner.getDatabase (database.getServer(), database.getFilePath()); 하지만 여전히 606/606을 얻고 있습니다. – ShirouWrath