EnableFolder

Zeka

Well-known member
01.09.2009
219
0
#1
Есть SPOFU фолдер - "A".
Есть кнопка которая должна этот приватный фолдер инициализировать:
Код:
Sub Click(Source As Button)
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase	
Call db.EnableFolder("A")		
End Sub
При нажатии кнопки получаю - "Can't move document to shared Private On First Use folder (A)".
Что за ерунда? Какой ещё документ? Права у меня все есть. База пустая, только создана.
Кто-нибудь сталкивался?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#2
Вроде бы, такие папки можно только вручную инициализировать.
 

nvyush

Lotus team
22.04.2009
2 317
0
#3
Сталкивался с тем, что пока не откроешь в клиенте SPOFU представление/папку, из скрипта к ним не достучишься.
 

Zeka

Well-known member
01.09.2009
219
0
#4
Есть. Manager и все галочки.

Вроде бы, такие папки можно только вручную инициализировать.
Сталкивался с тем, что пока не откроешь в клиенте SPOFU представление/папку, из скрипта к ним не достучишься.
А зачем тогда этот метод - db.EnableFolder()?

Мне ж как раз по описанию и надо инициализировать этот самый приватный фолдер перед тем как положить в него результаты FTSearch.
Usage
Use the EnableFolder method to make sure a folder exists before calling the PutInFolder, PutAllInFolder, RemoveFromFolder, and RemoveAllFromFolder methods.
 

nvyush

Lotus team
22.04.2009
2 317
0
#6
А зачем тогда этот метод - db.EnableFolder()?
Судя по всему — для создания неприватной папки перед вызовом doc.PutInFolder.
Можно попробовать кодом найти ноту SPOFU папки, создать её копию и вручную прописать нужные поля, в частности $Readers. Сам не пробовал.

Добавлено
Если у пользователя в ACL не стояло разрешения на создание SPOFU, то при открытии в уи создаётся SDPOFU. Последующие попытки достучаться до неё из кода вызовут ошибку. Чтобы её снести, нужно удалить ярлык базы из рабочей области.
 

Zeka

Well-known member
01.09.2009
219
0
#7
I have used two solutions:

1. Build POFU folder/view Before using them in code by embedding in form that users will have to open before calling you operation (PutAllInFolder) – a dirty way

2.Catch the Error in code (”Can't move document to Shared Private On First Use Folder”) display pofu folder to user and repeat your operation once again (PutAllInFolder) – the operation should execute successfully as POFU private version was generated after displaying to user.
This approach works for well designed application – you can link your recall in action such ”refresh”, ”search” or ”clear”
Спасибо, NickProstoNick, но это сработает только в Ноутсах. Мне же надо в xPages. А xp:viewPanel инициализировать SPOFU фолдер не умеет...


Добавлено:
Можно попробовать кодом найти ноту SPOFU папки, создать её копию и вручную прописать нужные поля, в частности $Readers. Сам не пробовал.
Ааааа.... Хочу в отпуск!!!!
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#8
Видел твою тему в пейджах... у меня вообще ничего там не получилось :)

Добавлено: а если действительно попробовать создать фолдер кодом?
Думаю через DXL
 

Zeka

Well-known member
01.09.2009
219
0
#9
Добавлено: а если действительно попробовать создать фолдер кодом?
Есть функция database.createView(). Но нет database.createFolder()!!! Где-то мелькало, что надо сделать вью, а потом убрать у него SelectionFormula. Попробывал. Нифига. Вью, как был вьювом, так им и остался. Потом попробую ещё покопать в этом направлении. А сейчас решил попробывать через DXL.

До сих пор с DXL не работал. Но попробовал...

Сделал экспорт SPOFU фолдера. Получил стринг:
Код:
<?xml version='1.0'?> <!DOCTYPE folder SYSTEM 'xmlschemas/domino_8_5_2.dtd'>
<folder name='a' xmlns='http://www.lotus.com/dxl' version='8.5' maintenanceversion='2.0' replicaid='C2257A3900283295' showinmenu='false' 
noreplace='true' privatefirstuse='true' publicaccess='false' designerversion='8.5.2' unreadmarks='none'
onopengoto='lastopened' onrefresh='displayindicator' headers='beveled' opencollapsed='false' showresponsehierarchy='true' 
showmargin='true' shrinkrows='false' extendlastcolumn='false' showhierarchies='false' unreadcolor='black' 
rowlinecount='1'
headerlinecount='1' rowspacing='1' bgcolor='white' totalscolor='black' headerbgcolor='white' boldunreadrows='false' evaluateactions='false' 
allownewdocuments='false' allowcustomizations='true' hidemarginborder='false' marginwidth='0px'
marginbgcolor='white' uniquekeys='false' noserverindex='true' initialbuildrestricted='false' noemptycategories='false'>
<noteinfo noteid='192' unid='7264956A902737F3C2257A3900286A43' sequence='3'>
<created>
<datetime dst='true'>20120712T102126,43+03</datetime>
</created>
<modified>
<datetime dst='true'>20120712T102130,74+03</datetime>
</modified>
<revised>
<datetime dst='true'>20120712T102130,73+03</datetime>
</revised>
<lastaccessed>
<datetime dst='true'>20120712T102133,82+03</datetime>
</lastaccessed>
<addedtofile>
<datetime dst='true'>20120712T102126,43+03</datetime>
</addedtofile>
</noteinfo>
<updatedby>
<name>CN=XXX/O=Compidea/C=LT</name>
</updatedby>
<wassignedby>
<name>CN=XXX/O=Compidea/C=LT</name>
</wassignedby>
<column hidedetailrows='false' itemname='$0' width='10' resizable='true' separatemultiplevalues='false' sortnoaccent='true' sortnocase='true' showaslinks='false'>
<columnheader title='#'>
<font size='9pt' style='bold' />
</columnheader>
<code event='value'>
<formula>@DocNumber</formula>
</code>
</column>
<item name='$Name' sign='true'>
<text>a</text>
</item>
</folder>
Сделал импорт - как и задумывалось, получил в базе второй SPOFU фолдер.
Сделал экспорт приватного фолдера.
Получил стринг:
Код:
<?xml version='1.0'?> <!DOCTYPE folder SYSTEM 'xmlschemas/domino_8_5_2.dtd'>
<folder name='a' xmlns='http://www.lotus.com/dxl' version='8.5' maintenanceversion='2.0' replicaid='C2257A3900283295' showinmenu='false' 
noreplace='true' privatefirstuse='true' publicaccess='false' designerversion='8.5.2' private='true'
unreadmarks='none' onopengoto='lastopened' onrefresh='displayindicator' headers='beveled' opencollapsed='false' showresponsehierarchy='true' 
showmargin='true' shrinkrows='false' extendlastcolumn='false' showhierarchies='false' unreadcolor='black'
rowlinecount='1' 
headerlinecount='1' rowspacing='1' bgcolor='white' totalscolor='black' headerbgcolor='white' boldunreadrows='false' evaluateactions='false' 
allownewdocuments='false' allowcustomizations='true' hidemarginborder='false' marginwidth='0px'
marginbgcolor='white' uniquekeys='false' formatnoteid='7264956A902737F3C2257A3900286A43'>
<noteinfo noteid='1c6' unid='28EF1B97A1C1E1F0C2257A39002B57C8' sequence='1'>
<created>
<datetime dst='true'>20120712T105325,20+03</datetime>
</created>
<modified>
<datetime dst='true'>20120712T105325,22+03</datetime>
</modified>
<revised>
<datetime dst='true'>20120712T105325,21+03</datetime>
</revised>
<lastaccessed>
<datetime dst='true'>20120712T105325,28+03</datetime>
</lastaccessed>
<addedtofile>
<datetime dst='true'>20120712T105325,22+03</datetime>
</addedtofile>
</noteinfo>
<updatedby>
<name>CN=XXX/O=Compidea/C=LT</name>
</updatedby>
<wassignedby>
<name>CN=XXX/O=Compidea/C=LT</name>
</wassignedby>
<column hidedetailrows='false' itemname='$0' width='10' resizable='true' separatemultiplevalues='false' sortnoaccent='true' sortnocase='true' showaslinks='false'>
<columnheader title='#'>
<font size='9pt' style='bold' />
</columnheader>
<code event='value'>
<formula>@DocNumber</formula>
</code>
</column>
<item name='$Readers' sign='true' readers='true'>
<text>CN=XXX/O=Compidea/C=LT</text>
</item>
<item name='$Authors' sign='true' authors='true'>
<text>CN=XXX/O=Compidea/C=LT</text>
</item>
<item name='$Name' sign='true'>
<text>a</text>
</item>
<item name='$ViewInheritedFrom'>
<text>a</text>
</item>
</folder>
Приватный фолдер удаляю и пытаюсь сделать импорт DXL.
Получаю:
Код:
12.07.2012 11:23:18  HTTP JVM: NotesException: DXL importer operation failed
12.07.2012 11:23:18  HTTP JVM: 	at lotus.domino.local.DxlImporter.importDxl(Unknown Source)
12.07.2012 11:23:18  HTTP JVM: 	at utils.Util.create(Util.java:18)
12.07.2012 11:23:18  HTTP JVM: 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
12.07.2012 11:23:18  HTTP JVM: 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
12.07.2012 11:23:18  HTTP JVM: 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
12.07.2012 11:23:18  HTTP JVM: 	at java.lang.reflect.Method.invoke(Method.java:600)......
any ideas?
 
A

alexas

#10
Приватный фолдер можно инициализировать только открыв в UI - это 100%
Например, в Вашей кнопке - @Command([OpenView];"A"); @Command([CloseWindow])
Но фолдер "моргнет".
Или, до применения фолдера, открыть его в маленьком фрейме, типа скрытом, с размерами не меньше 2х2 пикселя.
Если SPOFU несколько - удобно этот фрейм использовать и для их инициализации.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#11
Приватный фолдер можно инициализировать только открыв в UI - это 100%
Например, в Вашей кнопке - @Command([OpenView];"A"); @Command([CloseWindow])
Но фолдер "моргнет".
Или, до применения фолдера, открыть его в маленьком фрейме, типа скрытом, с размерами не меньше 2х2 пикселя.
Если SPOFU несколько - удобно этот фрейм использовать и для их инициализации.
Все усложняется тем, что это все надо в xpages
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#12
Стесняюсь спросить... если уж пошел такой изврат... может имеет смысл озвучить цель, которая преследуется?
Может есть какой-то другой путь?
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#13
если надо открывать пользователю его собственный фолдер...
Ну как вариант - создавать обычные фолдеры и именовать их например по Abbreviate имени пользователя (убрать/заменить "/" )
Ну или что-то в этом роде... не знаю
 

Zeka

Well-known member
01.09.2009
219
0
#14
Стесняюсь спросить... если уж пошел такой изврат... может имеет смысл озвучить цель, которая преследуется?
Может есть какой-то другой путь?
Цель - юзер делает поиск, результаты складываются в фолдер.
Далее Юзер может:
1 - выполнить поиск по другим критериям и результат добавить к ранее найденым.
2 - начать новый поиск.
3 - искать в ранее найденых - откинуть документы не сооветствующие новым критериям.
Ну как вариант - создавать обычные фолдеры и именовать их например по Abbreviate имени пользователя (убрать/заменить "/" )
Можно, но это тоже как-то убого...
 

RAJ

Well-known member
17.01.2007
440
0
#16
как идея:
1. Имеем одну ОБЩУЮ папку "SearchResult"
2. По найденным докам создавать документы-линки на документ+в реадерс поле прописывать автора запроса

таким образом в общей папке каждый будет видеть только свое.

как-то так
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#17
как идея:
1. Имеем одну ОБЩУЮ папку "SearchResult"
2. По найденным докам создавать документы-линки на документ+в реадерс поле прописывать автора запроса

таким образом в общей папке каждый будет видеть только свое.

как-то так
Думаю самый достойный вариант
 

Zeka

Well-known member
01.09.2009
219
0
#18
Ну либо убого... либо с геморроем
Вообщем, из 4-ёх вариантов (сделать убого, сделать с гемороем, просто уволиться и вариантом предолженым RAJ) пока выбрал этот:
Ну как вариант - создавать обычные фолдеры и именовать их например по Abbreviate имени пользователя (убрать/заменить "/" )
Вроде работает.
Всем спасибо :(