Создание Дока Через Скрипт

Тема в разделе "Lotus - Программирование", создана пользователем Anatoly, 3 дек 2011.

  1. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Есть мейн-форма. Перед созданием по ней дока, пользователь выбирает нужные параметры, в соответствии с этим заполняются поля для определения подключения требуемых сабформы. И создается док через .CreateDocument.
    ----
    Set Doc =db.CreateDocument
    Doc.Form ="Claim"
    ... заполняю нужные поля так как нужно
    Call wks.EditDocument(True, Doc)
    ----
    В ходе заполнения документа требуется создавать несколько респонсов к нему.
    Так вот, пока не выйдешь из него с сохранением и не зайдешь заново, код :
    ----
    @Command([FileSave]);
    @Command([Compose];"ClaimSum")
    ----
    Вызывает ошибку: "No document is selected; please select a document to respond to".
    Не спасает сохранение документа явно. Вот пока не выйдешь и не зайдешь, респонсы не создаются...
    Чего не хватает с создании через скрипт? При создании мейна через @Command все нормально.
     
  2. dimat

    dimat Lotus team
    Lotus team

    Регистрация:
    31 июл 2008
    Сообщения:
    518
    Симпатии:
    0
    А как респонсы к нему создаете?
    мржно например создавать респонсы так:

    Код (LotusScript):
    Set respDoc=db.CreateDocument
    Call respDoc.MakeResponse(Doc)
     
  3. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Респонсы создаются через формулы в экшн.
    Причем даже @Command([FileSave]) перед @Command([Compose]) не помогает, не видит дока, на который создается респонс.
    Хотя, если переключиться на вкладку с вью, мейн док в нем уже есть.
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    ммм, попробуй перед сделать так: Когда по кнопке будут пытаться создавать респонз то переводить документ в режим чтения.
    Он естественно предложит сохранить изменения, а затем перезагрузиться.

    Можно еще сделать Save перед Call wks.EditDocument(True, Doc)
    Но тогда документ в любом случае будет сохранен.

    Претензии клепаешь? не в МАДе часом?)
     
  5. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Попробовал...
    В режиме редактирования - ошибка.
    @Command( [EditDocument] ) - документ переходит в режим просмотра и респонся создаются нормально
    @Command( [EditDocument] ) - документ возвращается в режим редактирования и снова ошибка при создании респонсов :)

    Это если я создавал мейн стоя на строке с документом во вью
    Если же при нажатии на кнопку создания мейна, курсор во вью стоял на строке категории, ошибка при создании респонса вылетает по любому :)

    Было, работает. Но сохранение - не айс. Хотя в качестве временной меры может верну на время.

    Юристам работу с исками автоматизирую.
     
  6. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Короче что-то по любому перестало работать.
    Переделал режим создания респонсов, сделал твк-же через скрипт.
    Но... Чего не хватает в документе, созданном через .CreateDocument, что бы в нем можно было создавать, не выходя, создавать респонсы через формулы?
     
  7. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Проверяй что он не в режиме чтения на собаках забыл функцию @IsDocBeEding или что-то похожее

    save ему не хватает. Док создается совсем пустым, без полей, без NoteID. Можно перед созданием респонзов требовать сохранения документов, если он на экране. Выводить сообщение: "Необходимо сохранить документ".
    Проверить можно так, на скрипте:
    Код (LotusScript):
    'в Declaration формы:
    dim currDoc as NotesDocument ' Это текущий документ его на определять на PostOpen событии, глобальная перменная.

    'в коде кнопки:
    dim macro as variant
    macro = Evaluate({@NoteID},currDoc)

    if macro(0) = "NT00000000" then
    msgbox "Необходимо сохранить документ"
    exit Sub
    end if
    Создание ответных тоже предлагаю тебе на скрипте делать - возможностей больше.
     
  8. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Сохраняю документ перед тем как (системная акшн). - не помогает.
    Более того. как написал. переключая между режимами просмотра/редактирования - запуская создание респонса, либо удачно открывает форма его, либо получаем указанную ошибку.
     
  9. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    На кнопку создания респонза. При этом у документа-потомка тип формы = Ответ.
    Код (LotusScript):
       
    Dim ws As New NotesUIWorkspace
    Dim s As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Dim newdoc As NotesDocument

    Set uidoc = ws.CurrentDocument
    Set doc = uidoc.Document

    Call uidoc.Save

    Set newdoc = s.CurrentDatabase.CreateDocument
    newdoc.Form = "formname"
    Call newdoc.MakeResponse(doc)

    Call ws.EditDocument(True, newdoc)
     
  10. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    ну, я не настолько... Я умею создавать доки через скрипт. :)
    Мне не интересно, чего не хватает в отработке создания мейна через скрипт заходе в него-же через .EditDocment, что, находясь в этом мейне, я не могу создать респонс через формулу. Даже выполнив сохранение мейна в режиме редактирования. Вариантов отработки два:
    1) .Save перед .EditDocument для мейна
    2) Сохранить мейн, выйти из него и зайти снова.
    Оба мне как-то...

    Если создаю мейн через формулу, такого нет.
     
  11. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Мне почему-то очень сложно понять, что ты имеешь ввиду. Может вопрос формулируешь не так или я туплю по утрам)) Я могу и ошибаться, но подозреваю, что пока документ не сохранен его нет в базе и на него нельзя сделать ответ. Как создать ответ на документ у которого еще нет unid?
    И не понимаю какая разница между созданием документа формулой или из скрипта.
     
  12. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    У нового несохранённого документа UNID уже есть, нет NoteID. Соответственно, скриптом на него уже можно создать ответ (response.MakeResponse(mainDoc)).
     
  13. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Есть два вида документов: "Иск" и наследники к нему, один из них "Сумма по иску".
    Во категоризированном вью с исками есть акшн со скриптом, который заканчивается кодом:
    Код (LotusScript):
    Set Doc =db.CreateDocument
    Doc.Form ="Claim"
    ' заполняем нужным образом поля мейна
    ...
    Call wks.EditDocument(True, Doc)
    Открывает форма для работы с иском. В процессе работы возникает необходимость создать к иску наследников.
    Акшн в форме с кодом:
    Код (LotusScript):
    @Command([FileSave]);
    @Command([Compose];"Claim.Sum");
    Вызывает ошибку - предлагает сначала выбрать документ,к которому создается наследник. Не помогает и явное сохранение документа через системные действия и меню. Пока не выйдешь из дока и не зайдешь в него из представления, наследники не создаются.

    Если же мейн создается из вью по формуле @Command([Compose];"Claim"), то наследники создаются без проблем по @Command([Compose];"...") даже без предварительного @Command([FileSave]). И, сохранив наследника и вернувшись на форму работы с родителем, мы можем отказаться от сохранения самого родителя. То родителя нет, а респонс есть... И ссылается он будет на документ, который был под курсором во вью в момент создания нового документа. Но это и решается @Command([FileSave]) перед созданием наследника.
    А вот если мейн создается через скрипт, то никакие сохранения его не позволяют создать наследника через формулу.
    Приходиться в скрипте создания мейна сохранить его перед .EditDocument
     
  14. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Не надо мешать в одну кучу котлеты и мух. Создаёте главный документ скриптом — создавайте и ответы скриптом, хотите формулы — делайте на формулах всё.
     
  15. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Тогда объясните мне, чем отличается документ, открытый через @Command([Compose]) от открытого через .CreateDcoument + .EditDocument ?
    Почему они ведут себя по разному? Я нахожусь в редактировании документа и почему я не могу создавать респонсы через формулу? Как удобнее и быстрее.
     
  16. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Есть разница. На форуме обсуждалось. Из скрипта можно создавать документы разными способами, в том числе и методом ws.ComposeDocument. Но в этом случае документ открывается на редактирование сам и поля придется заполнять через uidoc.
     
  17. Anatoly

    Anatoly Well-Known Member

    Регистрация:
    30 мар 2007
    Сообщения:
    204
    Симпатии:
    0
    Все, что надо, я заполняю еше до .EditDocument.
    Почему, даже сохранив документ находясь в открытой форме, я не могу создать наследника к нему?
     
  18. motogarri

    motogarri Well-Known Member

    Регистрация:
    17 фев 2010
    Сообщения:
    188
    Симпатии:
    4
    Ну это совсем просто. Уверен, что в описании классов Notesdatabase и NotesUIWorkspace можно найти информацию по этим методам. Мне пока не приходилось так углубляться((
     
Загрузка...

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