Мелкие Вопросы Rtfm

Тема в разделе "Lotus - Программирование", создана пользователем serko, 9 ноя 2014.

  1. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Здравствуйте. Только начал осваивать среду и пользоваться вкладкой Help :lol:
    Заранее прошу прощения, если я не в тот раздел написал(а я скорее всего написал не в тот раздел). Это единственный форум, который я смог найти по Domino B)
    Передо мной стоит задача: написать в View для Action код на открытие документа с автоматическим заполнением полей. Почти все сделал, но встретил последний подводный камень. Я пытался написать на LotusScript, но т.к. я в Help ничего не нашел, чтобы открыть этот документ, был вынужден прибегнуть к @-формулам. Не знаю, может вы поставите меня в нужное русло, т.к. я перегибаюсь между двумя языками. Потыкав Help я понял, что @формулы подходят для простых команд типа сохранить,удалить,создать...
    Ну, не об этом. К делу...
    На @-формулах написал следующее:
    field= @GetField("addres");
    @Command([Compose]; "form1");
    @SetDocField(docUNID;"addres"; field);

    Проблема заключается в том, что я не знаю как получить docUNID. Есть @DocumentUniqueID, которая годится для текущего документа, но мне надо, чтобы она работала на несозданном документе. Т.е. пользователь выбирает документ, нажимает на action и перед ним открывается создаваемый документ с уже заполненным полем addres из того документа, который был выделен перед нажатием на action(скорее всего с этого и надо было начать мой флуд). Зная UNID создаваемого документа я бы смог вставить значение в поле. Меня просто разрывает между лотусом и формулами. Помогите новичку и с выбором разобраться, пожалуйста. :mellow:
     
  2. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Если брать в качестве языка лотус, то у меня возникают другие проблемы:
    1) Документ создается, я в коде прописал форму, но почему-то View с выборкой не отображает документ с этой формой, а если ставить выборку на все документы и попытаться открыть этот документ, то открывается форма, которую я установил в коде. Так почему же выборка не видит мой документ?
    2) Документ сразу сохраняется(после doc.save). Мне так делать нельзя(т.к. идентификатор должен у документа быть, а я его сохраняю БЕЗ, а это грубая ошибка). Мне надо лишь, чтобы открылась форма для заполнения.
    Эх. Искал, искал, но так и не нашел никакой процедуры на лотусе типа Open, только Create, который ничего не отображает B)
     
  3. swyatogor

    swyatogor Lotus team
    Lotus team

    Регистрация:
    24 фев 2014
    Сообщения:
    432
    Симпатии:
    10
    Ну для напримера.. Вам ни кто не мешает сделать на кнопке создания документа
    @SetEnvironment("address";@Text(@GetField("test")))
    а в поле нового дока default value
    @If(@IsNewDoc;@Environment("address");"")
     
  4. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Большое спасибо за информацию! В жизни не додумался бы :mellow:
    Еще интересно узнать про LotusScript. Можно ли через него осуществить подобное и выйдет ли проще, чем на языке формул? B)
    Плюсанул бы, но не активна кнопка :lol:
     
  5. alexas1

    alexas1 Lotus team
    Lotus team

    Регистрация:
    10 апр 2014
    Сообщения:
    567
    Симпатии:
    214
    Лиха беда начало :)
    Конечно, тут удобней LS. Попробуйте так:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">В кнопе на view</div></div><div class="sp-body"><div class="sp-content">
    Код (Text):
    Sub Click(Source As Button)
    Dim ws As New NotesUIWorkspace
    Dim uiview As NotesUIView
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument    'выделенный док
    Dim newDoc As NotesDocument     'новый док
    Set uiview = ws.CurrentView
    Set db = s.CurrentDatabase
    Set doc = db.GetDocumentByID(uiview.CaretNoteID)        'получен док, выделенный в виде
    '   Msgbox doc.addres(0)    'показ содержимого поля (item) addres выделенного дока
    Set newDoc = db.CreateDocument  'создан новый док
    newDoc.Form = "form1"   'в item Form нового дока записано имя формы по которрой будем открывать
    newDoc.addres = doc.addres 'записали содержимое item addres из выделенного дока в новый
    Call ws.EditDocument(True, newDoc)  'открыли подготовленный док в UI (в режиме редактирования)
    End Sub
     
  6. swyatogor

    swyatogor Lotus team
    Lotus team

    Регистрация:
    24 фев 2014
    Сообщения:
    432
    Симпатии:
    10
    Подобное действие можно конечно сделать и через LS.. проще не будет)
    Сам по себе язык альфа формул - это не язык как таковой - это набор микромакросов, если сравнивать с LS, то типа sub..

    Код (LotusScript):
        Dim uidoc As NotesUIDocument
    Dim uiview As NotesUIView
    Dim w As New NotesUIWorkSpace
    Dim doc As NotesDocument

    Set db = w.CurrentDatabase
    Set uiview = w.CurrentView
    If uiview.Documents.Count = 0 Then
    Msgbox "Невыбрано ни одного документа!",MB_ICONEXCLAMATION+MB_OK+MB_APPLMODAL,"Ошибка!"
    Exit Sub
    Else
    Set doc = curview.Documents.GetFirstDocument()
    Do Until (doc Is Nothing)

    Set uidoc = w.ComposeDocument(,,"Форма для нового документа",,)
    Call uidoc.FieldAppendText("adress",doc.GetFirstItem("addr")(0))
    ну как то вот так для начала.. ну и там далее в том же духе)

    на LS проще писать в том плане что он более предсказуем и легко дебажится.. на формулах иногда можно получить результат отличающийся от желаемого))
     
  7. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Всем огромное спасибо! Честно, повысил бы репутацию, если бы мог :)
    Очень-очень помогли! Я уж начал думать, что LS и формулы ограничены в чем-то. Оказывается, я ошибался :D
     
  8. garrick

    garrick Lotus team
    Lotus team

    Регистрация:
    26 окт 2009
    Сообщения:
    773
    Симпатии:
    52
    Если создаваемый документ является ответным (response) главному, то установите на форме документа свойства "Formulas inherit values from selected document" (вторая закладка) и пропишите в формулах вычисления полей ссылки на нужные поля родительского документа.
     
  9. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Ограничены, формулы работают не везде, LS не дает полного ООП.
    И еще куча всего... Со временем всё узнаете)
     
  10. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Даны на форме 3 Action: Закрыть, редактировать, Сохранить. Надо, чтобы при открытии были видны только кнопки Закрыть и Редактировать. При нажатии на Редактировать появляется кнопка Сохранить и документ переходил в режим редактирования. Смог лишь добиться режима редактирования с помощью @Command([EditDocument]). Если возможно реализовать без кода появление/скрытие кнопки Сохранить, то буду благодарен <_<
     
  11. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Нашел ответ. Открываем Shared Action в верхней шапке в меню заходим в Design-->Shared Action Properties и в открывшемся окне заходим во вторую вкладку и ставим галочку напротив пунктов previewed for reading и opened for reading
     
  12. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Здравствуйте. Вылетает ошибка на месте "ОШИБКА". До ""222Warning!!!" выполнение не доходит.
    Функция getDB возвращает базу данных, т.е. я уже её проверил и пришел к выводу, что косяк где-то во View, но косяка я так и не нашел.
    Код (LotusScript):
    Public Function getDoc(ID As String) As NotesDocument
    Dim db As NotesDatabase
    Set db = me.getDB()
    Dim view As NotesView
    Set view = db.Getview("myView")
    MsgBox "Вьюшка получена!"
    Dim doc As NotesDocument
    Set doc = view.Getdocumentbykey(ID, True) 'ПОДОЗРИТЕЛЬНО!!!!
    MsgBox "Warning!!!"
    MsgBox doc.Getitemvalue("Server") ' ОШИБКА!!!!
    MsgBox "222Warning!!!"
    MsgBox doc.Getitemvalue("Path")
    Set getDoc = doc   
    End Function
     
  13. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    во вьюхе обязана быть первая сортированная колонка в которой находятся ваши ID-шники
    после того как вы взяли документ из вьюхи, может имеет смысл проверить, получили-вы его или нет?
    Код (LotusScript):
    if (doc is nothing) then
    MsgBox "Где документ? Кто спёр?"
    End if
     
  14. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    во вьюхе обязана быть первая сортированная колонка в которой находятся ваши ID-шники
    после того как вы взяли документ из вьюхи, может имеет смысл проверить, получили-вы его или нет?

    Вывело: Документ никто не спёр!!! <_<
    Код (LotusScript):
    If (doc Is Nothing) Then
    MsgBox "Где документ? Кто спёр?"
    Else
    MsgBox "Документ никто не спёр!!!!"
    End If
    Я нашел я нашел!!! Ахаха. Вот я идиот!!! Это ж масссив!!! :) :) :lol:
    MsgBox doc.Getitemvalue("Server")(0) <--- Чертова скобка ахаха
    Спасибо за ответ))
     
  15. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Даны 3 вида форм: Фирма, отдел, рабочий и действия: создать фирму, создать отдел, создать рабочего.
    При нажатии на кнопку создать отдел при выделенной фирме в новом документе должно самостоятельно заполняться поле с названием фирмы. Аналогичная ситуация с отделом и рабочим (по полю название отдела). Проставил в настройках формы для фирмы тип Документ, для отдела - Response to Response и Formulas inherit values... и для рабочего тоже response tor esponse и formulas inherit values...
    View не сортируется пока что. Пока вывел просто все документы по порядку. Проблема в том, что при выделении отдела и нажатии Создать рабочего значение полей не заполняется, хотя все поля одноименные. В чем может быть косяк? Если выбрать фирму и на ней создать отдел, то поля заполняются отлично. <_<
     
  16. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Нашел косяк. Рабочий создается не через @Command([Compose... а через LS
     
  17. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Хочу получить список баз данных, располагающихся на сервере, только вот выводит мне не заголовок БД, а одну и ту же надпись "Activity Trends(6)"
    Код (LotusScript):
    Sub Click(Source As Button)
    Dim ws As New NotesUIWorkspace
    Dim s As New NotesSession
    Dim dbcur As NotesDatabase
    Set dbcur = s.CurrentDatabase

    Dim dbdir As NotesDbDirectory
    Set dbdir = s.GetDbDirectory(dbcur.Server)
    Dim db As NotesDatabase
    Set db = dbdir.GetFirstDatabase(DATABASE)
    Msgbox db.Title
    'While Not(db Is Nothing)
    '   Msgbox db.Title, , db.FileName
    'Wend

    End Sub
     
  18. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    где получение следующей базы в цикле?
    Код (LotusScript):
    Set db= DbDirectory.Getnextdatabase()
    P.s. Не всегда у вас отработает, особенно если доступа к базе нет - ошибку выдаст.
    Для возврата Title нужно открыть базу. в противном случае лучше возвращать путь Filepath
    кучу мелких тем создали, на обыденные вопросы...
    Есть тема для мелких вопросов: вы же уже её нашли, как раз "вопрос-ответ".
    И в целом, хотите получить все БД на сервере? Посмотрите базу catalog.nsf, в корне сервера лежит.
    Вьюха {Applications\By Server}
     
  19. serko

    serko Well-Known Member

    Регистрация:
    17 окт 2014
    Сообщения:
    246
    Симпатии:
    0
    Мне надо получить выделенный документ, только вот uiview пустует. С остальными View код пашет.
    Код (LotusScript):
    Dim ws As New NotesUIWorkspace
    Dim uiview As NotesUIView
    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument    'выделенный док
    Dim coldoc As NotesDocument
    Set uiview = ws.CurrentView
    Set db = s.CurrentDatabase
    If uiview Is Nothing Then
    Msgbox "ПУСТО"
    End If
    Вьюшка состоит из 2 столбцов. Первый - отсортирован, второй - нет.
    Для первого столбца прописал формулу @If(form = "Two"; TwoTitle; form="Three"; ThreeTitle; "")
    Для второго столбца просто указал поле OneTitle
    Иерархия во вьюшке идет от One к Two, а от Two к Three.
    [​IMG]
     
  20. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Проще:
    меняем код из кнопки на вызов агента
    в агенте выставляем таргет "только выделенные документы"
    далее в коде set documentCollection = NotesDatabase.UnprocessedDocuments ( постоянно ошибаюсь в написании)
    В кнопке делаем вызов на собаке нашего агента.
     
Загрузка...

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