Вопрос По Работе Со Spofu Папкой.

  • Автор темы Автор темы Eugen
  • Дата начала Дата начала

Eugen

Green Team
22.03.2012
210
1
BIT
1
Всем добрый день.

Есть две базы, условно №1 и №2.
В базе №1 пользователь нажимает кнопку примерно с таким
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">кодом</div></div><div class="sp-body"><div class="sp-content">
Код:
Sub Click(Source As Button)
Dim s As New NotesSession
Dim w As New NotesUIWorkspace
Dim db As NotesDatabase
Dim uidb As NotesUIDatabase
Dim docColl As NotesDocumentCollection
Dim view As NotesView
Dim uiview As NotesUIView
Dim SRVName As String
Dim DBPath As String
Dim picklist As Variant
Dim messagelist As String

On Error Goto ErrH

SRVName = "Server"
DBPath = "Folder\test.nsf"

Set uidb = w.CurrentDatabase
Set db = s.GetDatabase (SRVName, DBPath, False)
Set docColl = db.Search({SELECT Form="formPermit"}, Nothing, 0)

Call docColl.PutAllInFolder("SPOFU", True) 'при первом запуске в этом месте матюкается и идет в ErrH.
Continue:
Print "продолжил"
Set view = db.GetView ("SPOFU")
Call view.Refresh
picklist = w.PickListStrings (PICKLIST_CUSTOM, True, SRVName, DBPath, "SPOFU", "Заголовок", "Сообщение", 1)
If Not (Isempty (picklist) ) Then
Forall plist In picklist
messagelist = messagelist & plist & Chr(10)
End Forall
End If

Msgbox messagelist 'выбранные варианты возвращаются в месседж временно,потом это будет в док класться.
Exit Sub

ErrH:
Print "пошел в ошибку"
ERRNUM = Cstr(Err)
If Cstr(Err) = "4291" Then
Print "Ошибка №"+ERRNUM+" появилась первый раз."
Call w.OpenDatabase (SRVName, DBPath, "SPOFU", , True, True)
Call w.CurrentDatabase.Close 'вот этот шаг почему то выполняется уже после закрытия дайлогбокса.
Call docColl.PutAllInFolder("SPOFU", True)		

Resume Continue
Else
Msgbox "Другая ошибка: №"+Cstr(Err)+" "+Error + ". Line "+Cstr(Erl)
Resume EndSub
End If

EndSub:
End Sub
Собственно вопрос: возможно ли как то передать содержимое коллекции в Spofu папку, если она еще ни разу не открывалась пользователем не играясь с открытием/закрытием в воркспейсе?
Почему Call w.CurrentDatabase.Close отрабатывает так поздно?
Т.е. в том виде что у меня есть сейчас происходит следующее: при первом запуске идет в ошибку в Errh, там открывается папка в базе №2, туда передается коллекция, база не закрывается, поверх нее открвается диалог, пользователь что-то выбирает и только после этого закрывается и диалог и база №2. В идеале пользователь вообще не должен видеть открытия второй базы.
 
Почему Call w.CurrentDatabase.Close отрабатывает так поздно?
потому что вариант отработать сразу Call w.CurrentDatabase.Close(True) - заставляет лотус слетать, ну не доделали индусы ;)

возможно ли как то передать содержимое коллекции в Spofu папку
1) создать папку и наполнить
2) сохранить где нить ID нужный доков и потом использовать

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

папку и через DXML можно создать ;)
 
1) создать папку и наполнить
2) сохранить где нить ID нужный доков и потом использовать


не открывай базу и не открывай папку

папку и через DXML можно создать ;)
Папку я в дизайнере создал, но наполнить я ее не могу, пока она персонально для пользователя не создастся.

Насчет DXL - как выгружать документы знаю, а вот как создавать элементы дизайна не в курсе...
 
Call notesDatabase.EnableFolder( foldername$ )
Use the EnableFolder method to make sure a folder exists before calling the PutInFolder, PutAllInFolder, RemoveFromFolder, and RemoveAllFromFolder methods.



Добавлено: Если папки нет, то она создается автоматом. Правда как работает это с Spofu вопрос...
 
Call notesDatabase.EnableFolder( foldername$ )
Use the EnableFolder method to make sure a folder exists before calling the PutInFolder, PutAllInFolder, RemoveFromFolder, and RemoveAllFromFolder methods.



Добавлено: Если папки нет, то она создается автоматом. Правда как работает это с Spofu вопрос...
Буквально 10 минут назад пробовал... не работает со spofu ;)
 
Так... у нас тут в рабочей системе есть такая фича, от авторов "коробки":
Код:
Declare Function NEMGetCurrentSubprogramWindow Lib "nnotesws.dll" () As Long
Declare Function NEMStopSubprogramWindow Lib "nnotesws.dll" (Byval wHandle As Long) As Integer

Call uidb.OpenView( "StatByNum" ,"",True)
wHandle = NEMGetCurrentSubprogramWindow
Call NEMStopSubprogramWindow(wHandle)

Call uidb.OpenView( "StatByCtrl" , "",True)
wHandle = NEMGetCurrentSubprogramWindow
Call NEMStopSubprogramWindow(wHandle)

Call uidb.OpenView( "StatByExec","",True )
wHandle = NEMGetCurrentSubprogramWindow
Call NEMStopSubprogramWindow(wHandle)

Call uidb.OpenView( "StatByFolders","",True )
wHandle = NEMGetCurrentSubprogramWindow
Call NEMStopSubprogramWindow(wHandle)
Я так понял, что они открывают программно папки и тут же закрывают через Handle. Папки как раз spofu.
 
Почему Call w.CurrentDatabase.Close отрабатывает так поздно?
Потому что если закрываем текущий элемент, в котором находимся, то сначала выполняется весь код до конца, а только потом срабатывает закрытие. RTFM.

Буквально 10 минут назад пробовал... не работает со spofu ;)
И не будет. Тем на форуме, посвящённых этому, масса.
 
в чем задача такой "игры" с коллекцией?
 
Насчет DXL - как выгружать документы знаю, а вот как создавать элементы дизайна не в курсе...
- создаешь папку
- открываешь каким-нибудь пользователе - в результате создастся для этого пользователя папка
- заходишь в дизайнере в папку и экспортируешь в dxl
- потом программно берешь этот файл правишь имя пользователя на нужного
- сохраняешь
- экспортируешь в базу
все...папка для нового пользователя создана
 
Буквально 10 минут назад пробовал... не работает со spofu ;)
Работать со SPOFU можно ТОЛЬКО после показа ее в UI, обсуждалось не раз.
Для этого в любом месте (например, при открытии базы, фрейма, дока ...), но что-бы гарантированно выполнилось до кода, где используется SPOFU, собаками или LS или как savl написал (правда не кроссплатформенно это) - открыть и тут-же закрыть нужную папку (папки). Правда "моргнет" вкладка, если SPOFU много надо подготовить - не айс. Я в этом случае в стартовом фреймсете базы, в самом низу, рисую фрейм высотой 2 пикселя (1 - не годится) и в нем открываю (по умолчанию) сколько надо SPOFU. Они не видны, просто чуть толще нижний разделитель, юзер не догадывается, что там что-то есть.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!