1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

  1. Domino_Maddog

    Domino_Maddog Гость

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

    Klido Гость

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

    Domino_Maddog Гость

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

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

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

    Klido Гость

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

    Domino_Maddog Гость

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

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

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

    Domino_Maddog Гость

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

    Klido Гость

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

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

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

    Domino_Maddog Гость

    Репутация:
    0
    Call agent.run (doc) ?
     
  12. nvyush

    nvyush Well-Known Member
    Lotus team

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

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

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

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

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


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

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

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

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

    Код:
    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

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

    Domino_Maddog Гость

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


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

    TIA :-)
    Lotus team

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

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

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

    TIA,

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

    Domino_Maddog Гость

    Репутация:
    0
    Точно !!!!!!
    Пасип....так и сделал...

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

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