1. Акция на весь декабрь! Получай оплату х2 за уникальные статьи, объемом от 200 слов, если в заголовке темы и теле статьи присутствует слово Python
    Скрыть объявление

Возможен ли такой Picklist?

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

  1. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Опишу ситуацию. Есть документ в котором есть поля табельный номер и ФИО. А необходимо реализовать следующее: нужно отсылать письма пользователям из Actiona на вьюхе. Причём нужен некий своеобразный Picklist (для списка из выбранных пользователей). Не стандартный в котором в левой части отображаются пользователи почтовой системы и при нажатии двойного щелчка мышки или кнопки добавить переносит пользователя в правое окошко при выборе ещё одного пользоваателя из левой части добавление уже идёт в существующий список ранее выбранных пользователей (адресная книга), а хотелось бы сделать так чтобы в левой части отображались табельные номера и при предположим нажатия кнопки добавить в правую часть добавлялась бы уже ФИО (причём именно добавлялась по аналогу адресной к уже выбранным записям)? Возможно ли это вообще реализовать и хотя какие могут здесь быть пути решения? Заранее спасибо за ответы
     
  2. Elena Nefedova

    Elena Nefedova Гость

    1) В форму встроить вьюху с документами персон - их номера табельные и все, что нужно; у внедренной вьюхи должны стоять флаги "show selection bar" и "show view action"
    2) Во вьюху добавить Action: @Command([RunAgent];...
    3) Для св-ва Target в агенте установить None
    В этом случае мы, с одной стороны, можем получить агентом все выделенные документы во вьюхе
    Код (Text):
    Function get_unprocessed_ui(sess As NotesSession, wsp As NotesUIWorkspace) As NotesDocumentCollection
    ' Created by Elena Nefedova, Fors-Banking Systems
    If sess Is Nothing Then Set sess = New NotesSession
    If wsp Is Nothing Then Set wsp = New NotesUIWorkspace
    Dim uiview As NotesUIView, caret As NotesDocument
    Dim db As NotesDatabase, col As NotesDocumentCollection
    Dim s_caret_note_id$
    Set db = sess.CurrentDatabase
    Set uiview = wsp.CurrentView
    ' Получение коллекции для обработки
    Set col = uiview.Documents
    If col.Count = 0 Then
    s_caret_note_id = uiview.CaretNoteID
    If s_caret_note_id <> "" And s_caret_note_id <> "0" Then
    Set caret = db.GetDocumentByID(s_caret_note_id)
    End If
    If caret Is Nothing Then
    Msgbox "Необходимо выделить документы явным образом!"
    Goto EndLab
    Else
    Call col.AddDocument(caret)
    End If
    End If
    EndLab:
    Set get_unprocessed_ui = col
    Exit Function
    ErrLab:
    Goto EndLab
    Set col = Nothing
    End Function
    с другой же стороны, можем получить доступ к текущему открытому документу
    Код (Text):
        Dim ws As New NotesUIWorkspace
    Dim uid As NotesUIDocument
    Set uid = ws.CurrentDocument ' не забудем проверить, существует uid или Nothing
    Добавление списка в конец поля осуществляется при помощи ArrayAppend, ArrayUnique, ReplaceItemValue
    Для UI-документа есть FieldAppendText, но надо следить, какие используем разделители значений, а также, используются ли в поле списки выбора с подстановкой

    Можно делать это и в обычном режиме, и в диалоге.
     
  3. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    спасибо за развёрнутый ответ! действительно это вариант. ещё небольшой вопрос есть! что то я туплю повесил на сабформу Layout и на Layoutе кнопку. На кнопке скриптовый код, когда в дебагер захожу
    он реагирует когда вызываю сабформу, а вот когда нажимаю на кнопку на Layoutе дебаггер почему то не срабатывает( ? хотя если на кнопку мессагу кинуть мессагу показывает, а вот в дебагер не заходит?
     
  4. Elena Nefedova

    Elena Nefedova Гость

    Да нет, должно все работать.
    Надо поставить Stop в коде этой кнопки и посмотреть.
    Может, еще дебаггер не в том контексте включается.
     
  5. Axel

    Axel Гость

    Еще вариант: более простой на мой взгляд (если надо с левой стороны отображать только табельные номера).

    Опять же форма, на нее кладешь одно поле нескрытое, которое проинициализировано табельными номерами, а другое скрытое с соответствующими ФИО (оба поля мультивэлью). Рисуешь кнопучку как в стандартном выборе адресатов ( -> ) а на нее пишешь "поместить значение(я) с соответствующим(и) индексом(и)". То есть индексы берешь из нескрытого поля, а значения из скрытого.

    Если заинтересовался, и есть непонятки, пиши, более полдробно опишу. <_<
     
  6. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Для: Axel
    не совсем понял
    Ну предположим поля оба мультивэлью...
    А как же ты из скрытого поля возьмёшь значения?? На этом же скрытом поле @DbColumn(откуда он фио и берёт) и к примеру ели ты его попробуешь с инициализировать GetText ом к примеруето поле то он в значении Value ничего не покажет? Значения наверно из поля не возьмёшь на котором лукап или колумн висит если бы оно текстовое было бы и уже заполненное то другое дело...
    Или как то по другому? может я чего не понял?... :)
    Сам сейчас стал делать несколько по другому... Сделал поле обычное текстовое которое бы с клавы вводилось(под инвентарные номера), сделал кнопочку добавить, по нажатию на кнопку создаю коллекцию нужной вьюхи с нужными доками
    под табельные номера и оттуда же хочу и вытащить соответствующему табельному соответствующую фамилию, предварительно считав табельный который пользователь с клавы ввёл. ну может проще можно?
     
  7. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Невидимые поля скрыты только в интерфейсе, т.е. не видны на экране и недоступны через фореГраунд методы. Через BG они доступны
     
  8. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    чёто туплю наверно опять....может конец рабочего дня сказывается....
    вот я создал скрытое поле(proba3) на нём формула выбора по колонке @dbcolumn
    Сейчас по кнопке пытаюсь вытащить оттуда значения таким образом
    Код (Text):
    Set uidoc = ws.CurrentDocument

    Dim doc3 As NotesDocument
    Set doc3 = uidoc.Document
    q = doc3.GetItemValue("proba3")(0)
    И значение пустое в поле proba3 после getitemvalue в переменной точнее
    ну чего не так ? это ж bg уже? иди млин не знаю)


    надо наверно домой уже идти :)
     
  9. Axel

    Axel Гость

    Для: Gor
    Ну я немного неполно описал метод. Я сварганил пример. Куда тебе послать?

    Забирай отсюда http://www.meetfile.com/files/11905/1.rar.html

    Для теста: Create->dialog
     
  10. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Для: Axel
    Да всё достаточно просто оказалось! не ожидал)
    вчера уже доки перебирал, сравнивал табельный считанный с реальным табельным вытаскивал оттуда
    потом фамилию)) итд итп) получилось очень коряво 3000 доков перебрать и вытащить нужное) отрабатывалось секунд 20)
    Спасиб большое за пример!
     
  11. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Для: Axel
    Поторопился! Не всё видимо так просто оказадось((
    Столкнулся со следующей проблемкой видимо поле очень маленькое для всех моих записей :)

    ошибка - Field is too large (32k) or View's column & selection formulas are too large

    У меня доков с фамилиями и табельными около 3000
    Ну что видимо придётся оставлять прошлый мой вариант доки перебирать вытаскивать всё нужное оттуда(( итд итп
    вот так (
    это код на кнопке --> (Add)
    Код (Text):
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim idb As NotesDatabase
    Dim id As Variant
    Dim doc, doc1 As NotesDocument
    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim view As NotesView
    Dim p As String

    Set ws = New NotesUIWorkspace
    Set idb = session.GetDatabase("SRVCLST1", "INFO.nsf", False)

    Set db = session.CurrentDatabase
    Set uidoc = ws.CurrentDocument

    p = uidoc.FieldGetText( "proba1" )

    Set view = idb.GetView("TabNOM")
    Set doc = view.GetFirstDocument()
    While Not (doc Is Nothing)
    If doc.IDN(0) = p Then
    s = doc.FIO
    Goto Loopyt
    End If

    Set doc = view.GetNextDocument(doc)
    Wend
    Loopyt:
    Dim q As String
    q = uidoc.FieldGetText( "proba2" )
    Call uidoc.FieldSetText( "proba2",q + Chr(10) + s(0))
    а под ФИО придётся наверно массив делать...
    чтобы один раз он подгрузился а потом уже в нём работу вёл чтобы к бд на сервер другой не обращаться... :( УЖОС!
    Хотя мож и есть проще решение....
     
  12. Axel

    Axel Гость

    Для: Gor
    Да, если значений много, то через поля с дблукапами не пройдет.
    Это ограничение Лотуса на 64к уже порядком поднадоело....

    Так что придется тебе твоим методом...

    <!--QuoteBegin-Gor+20:07:2006, 18:03 -->
    <span class="vbquote">(Gor @ 20:07:2006, 18:03 )</span><!--QuoteEBegin-->While Not (doc Is Nothing)
    If doc.IDN(0) = p Then
    s = doc.FIO
    Goto Loopyt
    End If

    Set doc = view.GetNextDocument(doc)
    Wend
    [snapback]40501" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Тока цикл убери а вместо него поставь получение документа через view.GetDocumentByKey(таб.номер, True)..... :D
     
  13. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    А чем @PickList( [CUSTOM] : [SINGLE] ; server : file ; view ; title ; prompt ; column ; categoryname ) не подходит ? Имхо, самое то. И никаких ограничений.
     
  14. Axel

    Axel Гость

    Для: Medevic

    <!--QuoteBegin-Gor+14:07:2006, 05:42 -->
    <span class="vbquote">(Gor @ 14:07:2006, 05:42 )</span><!--QuoteEBegin-->а хотелось бы сделать так чтобы в левой части отображались табельные номера и при предположим нажатия кнопки добавить в правую часть добавлялась бы уже ФИО (причём именно добавлялась по аналогу адресной к уже выбранным записям)
    [snapback]40112" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Вот собственно из-за этого и сыр-бор. А так @PickList на самом деле хорошее решение (тока Gor-у скорее скриптовый аналог пиклиста нужен будет
    stringArray = notesUIWorkspace.PickListStrings( type% [, multipleSelection ], server$, databaseFileName$, viewName$, title$, prompt$, column% [, categoryname$ ] ) :D
     
  15. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Для: Axel
    view.GetDocumentByKey(таб.номер, True) чего то я им никогда не пользовался...хотя странно это
    Вот блин)) :)
    И я до этого недогнал))))))))))))
    Самое смешное что я уже написал массив под табельные и фамилии чтобы он под это дело грузился при инициализации PickLista)))))))))) :p ржунимагу)
    Пасиб!
    Ещё маленький вопросик!!
    Возможно ли вообще как нибудь проверить имея в наличии в поле имя и фамилию
    есть ли у него почтовый ящик в лотусе или нет?
    Проверка по адресной книге какая нибудь или чёто ещё есть?
     
  16. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    @NameLookup ?
     
  17. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    Для: Medevic
    Ну в принципе да... а аналог Скриптовый есть?
     
  18. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
  19. Gor

    Gor Well-Known Member

    Регистрация:
    7 июн 2005
    Сообщения:
    517
    Симпатии:
    2
    ну в общем да))) :) пойдёт "АНАЛОГ"))
     
  20. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Аналога нет.
    Можно поиск в адресной книге через NotesView.GetDocumentByKey или NotesDatabase.Search. Но это, имхо, хуже.
     
Загрузка...

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