Проверка номера документа

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

  1. Domino_Maddog

    Domino_Maddog Гость

    г-да, требуется Ваша подсказка куда и как копать.
    Есть некое приложение в котором пользователи в документ вводят номер.В приложение есть поля Reders и Authors.
    До этого проверка осуществлялась в QuerySave дока так как номер надо проверять до сохранения, но тут полезли,
    косяки из-за того что пользователи имею не всегда доступ к другим доком. Задумался написать агент который бы стартовал
    с правами сервера и возвращал параметр о возможности записи, но не совсем понял как это делать.
    Можно делать через поля дока, но хотелось бы это более правильно организовать.
     
  2. Klido

    Klido Гость

    страшная вещь.... почему бы номеру не вводится сразу самому? ;)
     
  3. Domino_Maddog

    Domino_Maddog Гость

    это приложение работает с внешними контрагентами, туда заносятся номера счетов на оплату (которые надо оплачивать), автоматом не получится. Внутр нумерация есть.
    Нужен именно контроль номера счета.
     
  4. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Включаешь блокировку(F1 + Document locking), создаешь документ, хранящий номер(или номера). Когда надо получить номер, то блокируешь этот документ, получаешь номер и разблокируешь обратно.
     
  5. Klido

    Klido Гость

    ему скорее надо проверить нет ли уже такого номера, а у автора нет возможности увидеть доки...
    ну да, я бы агентом под сервером и делал...
     
  6. Domino_Maddog

    Domino_Maddog Гость

    Именно это мне и надо.
    Вопрос как передавать параметр, через поле этого дока или как то ещё.
     
  7. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Дублируй номера в отдельных открытых документах.
     
  8. Domino_Maddog

    Domino_Maddog Гость

    Думал на эту тему но у меня за 1 год набирается (период архивирования) несколько десятков тысяч документов,
    и придется юзать RT поле.
     
  9. Klido

    Klido Гость

    а зачем дублировать?
    юзер - автор, делаешь tmp док, передаешь его в агент, который в док же запишет да или нет, на выходе считываешь и прибиваешь (или админским агентом косишь по факту)
     
  10. ToxaRat

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

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    Domino_Maddog
    создай отдельную базу, туда выкладываются маленькие доки, содержащие уже зарегистрированные номера и по этой базе делай сверку ;)
     
  11. Domino_Maddog

    Domino_Maddog Гость

    Call agent.run (doc) ?
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Call agent.RunOnServer (doc.NoteId)
     
  13. VladSh

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Люди, проставляющие номера счетов, в большинстве случаев относятся к одной группе или роли по доступу к функционалу. Как вариант: добавить роль/группу и при создании дока вносить её в поле типа Readers или Authors.
    Если надо чтобы оператор видел только свои доки, то либо внедрённый вид + Show single category либо с помощью фильтра (@SetViewInfo).
     
  14. Кирилл Шваб

    Кирилл Шваб Well-Known Member

    Регистрация:
    30 июн 2006
    Сообщения:
    144
    Симпатии:
    4
    Метод Run запустит агента локально от имени текущего пользователя, если надо запустить на сервере, то используй метод RunOnServer (его описание есть в справке).


    Но на мой взгляд лучше хранить номера в отдельных документах-счетчиках (о чем уже писали выше).
    Если пугает количество документов-счетчиков, то можно хранить их в отдельной базе.

    В плане реализации намного проще и надежней - добавляешь в QuerySave обработчик, который:

    1. Открывает представление, в котором хранятся счетчики и ищет документ-счетчик с номером текущего документа
    2. Если его нет, то сохраняешь документ (все нормально)
    3. Если такой счетчик есть, то сравниваешь сохраненный в нем UNID с UNID'ом текущего документа и если они не равны, то либо обновляешь номер, либо сигнализируешь об этом пользователю

    Вот пример кода из приложения с подобной задачей (счетчики хранятся в самой базе):

    Код (Text):
    Dim session as NotesSession
    Dim db as NotesDatabase
    Dim numberDoc as NotesDocument
    Dim numberView as NotesView
    Dim entry As NotesViewEntry
    Dim taskNumber As String

    Set session = New NotesSession
    Set db = session.CurrentDatabase
    Set numbersView = db.GetView("TaskNumbersAll")
    taskNumber = taskDoc.TaskNumber(0)
    Set entry = numbersView.GetEntryByKey(taskNumber)
    If Not entry Is Nothing Then
    Set numberDoc = entry.Document
    End If

    If numberDoc Is Nothing Then
    ' Если документа-счетчика нет, то создаем его
    Call TaskNumber_CreateDoc()
    Else
    If LCase(numberDoc.Unid(0)) <> LCase(taskDoc.UniversalID) Then
    ' Если есть, но не от этого документа, то сообщаем
    ' пользователю об ошибке или присваиваем документу новый номер
    ' ...
    End If
    End If
     
  15. VladSh

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

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Кирилл Шваб, см. коммент №3; речь совсем не о том.
     
  16. Domino_Maddog

    Domino_Maddog Гость

    у меня похожий код, только еще поля автор и ридер и доступа порой к доку нет.Тогда начинают копится повторы.


    Добавлено:
    Хорошое предложение но у меня не всегда так, а еще есть разные компании и т.д. много оговорок :) и желание переделывать все UI у меня то же нет.
     
  17. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Ещё один вариант -- сделать скрытую категоризованную по номеру вьюшку и искать нужный Entry по ключу. Галку "Don't show empty category" не устанавливаем. Фишка в том, что категории отображаются все, вне зависимости от прав текущего пользователя на документы.
     
  18. Кирилл Шваб

    Кирилл Шваб Well-Known Member

    Регистрация:
    30 июн 2006
    Сообщения:
    144
    Симпатии:
    4
    А зачем добавлять поля читатели/редакторы к документам-счетчикам?
    Смысл этих счетчиков в виде отдельных документов как раз в том, что они доступны всем пользователям (в отличии от самих документов, у которых задан доступ).

    TIA,

    Интересный способ, кстати. :)
     
  19. Domino_Maddog

    Domino_Maddog Гость

    Точно !!!!!!
    Пасип....так и сделал...

    Добавлено:
    запарился...не внимательно прочитал... :)
     
Загрузка...

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