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

Тема в разделе "Lotus - Программирование", создана пользователем Eugen, 20 июн 2013.

  1. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Всем добрый день.

    Есть две базы, условно №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">
    Код (LotusScript):
    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. В идеале пользователь вообще не должен видеть открытия второй базы.
     
  2. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    потому что вариант отработать сразу Call w.CurrentDatabase.Close(True) - заставляет лотус слетать, ну не доделали индусы ;)

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

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

    папку и через DXML можно создать ;)
     
  3. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Папку я в дизайнере создал, но наполнить я ее не могу, пока она персонально для пользователя не создастся.

    Насчет DXL - как выгружать документы знаю, а вот как создавать элементы дизайна не в курсе...
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Call notesDatabase.EnableFolder( foldername$ )
    Use the EnableFolder method to make sure a folder exists before calling the PutInFolder, PutAllInFolder, RemoveFromFolder, and RemoveAllFromFolder methods.



    Добавлено: Если папки нет, то она создается автоматом. Правда как работает это с Spofu вопрос...
     
  5. Eugen

    Eugen Well-Known Member

    Регистрация:
    22 мар 2012
    Сообщения:
    172
    Симпатии:
    0
    Буквально 10 минут назад пробовал... не работает со spofu ;)
     
  6. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Так... у нас тут в рабочей системе есть такая фича, от авторов "коробки":
    Код (LotusScript):
    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.
     
  7. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Потому что если закрываем текущий элемент, в котором находимся, то сначала выполняется весь код до конца, а только потом срабатывает закрытие. RTFM.

    И не будет. Тем на форуме, посвящённых этому, масса.
     
  8. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.075
    Симпатии:
    300
    в чем задача такой "игры" с коллекцией?
     
  9. erdi

    erdi Well-Known Member

    Регистрация:
    20 авг 2008
    Сообщения:
    261
    Симпатии:
    36
    - создаешь папку
    - открываешь каким-нибудь пользователе - в результате создастся для этого пользователя папка
    - заходишь в дизайнере в папку и экспортируешь в dxl
    - потом программно берешь этот файл правишь имя пользователя на нужного
    - сохраняешь
    - экспортируешь в базу
    все...папка для нового пользователя создана
     
  10. alexas

    alexas Well-Known Member

    Регистрация:
    10 июн 2009
    Сообщения:
    215
    Симпатии:
    0
    Работать со SPOFU можно ТОЛЬКО после показа ее в UI, обсуждалось не раз.
    Для этого в любом месте (например, при открытии базы, фрейма, дока ...), но что-бы гарантированно выполнилось до кода, где используется SPOFU, собаками или LS или как savl написал (правда не кроссплатформенно это) - открыть и тут-же закрыть нужную папку (папки). Правда "моргнет" вкладка, если SPOFU много надо подготовить - не айс. Я в этом случае в стартовом фреймсете базы, в самом низу, рисую фрейм высотой 2 пикселя (1 - не годится) и в нем открываю (по умолчанию) сколько надо SPOFU. Они не видны, просто чуть толще нижний разделитель, юзер не догадывается, что там что-то есть.
     
Загрузка...
Похожие Темы - Вопрос По Работе
  1. tumanovalex
    Ответов:
    1
    Просмотров:
    1.594
  2. vladis222
    Ответов:
    1
    Просмотров:
    1.304
  3. DjTouch
    Ответов:
    1
    Просмотров:
    3.191
  4. ApplePen
    Ответов:
    0
    Просмотров:
    58
  5. gURaBA_N
    Ответов:
    3
    Просмотров:
    92

Поделиться этой страницей