1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

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

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

Функцию Кнопки В Агент

Тема в разделе "Lotus - Программирование", создана пользователем Dimok-163rus, 22 авг 2013.

  1. Dimok-163rus

    Dimok-163rus Well-Known Member

    Репутация:
    0
    Регистрация:
    20 июн 2013
    Сообщения:
    89
    Симпатии:
    0
    Агент исполняет функцию кнопки "генерация п2" (Подправил скрипт, вставил в агент, вызываю агент простым действием с кнопки на форме).

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

    Тестирую агент на сервере!
     

    Вложения:

  2. savl

    savl Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    28 окт 2011
    Сообщения:
    2.116
    Симпатии:
    157
    ну ли прав в папку нет, либо файл не закрыт, либо неверный путь.
    RunOnServer?
    Не, если бы на сервере - ошибка была бы записана в Log сервера, а не на экране.
    Так что агент работает на клиенте, следовательно ошибка в имени файла, в полном имени. Папки может не быть.
     
  3. Dimok-163rus

    Dimok-163rus Well-Known Member

    Репутация:
    0
    Регистрация:
    20 июн 2013
    Сообщения:
    89
    Симпатии:
    0
    создал кнопку на форме, добавил "простое действие" -> выполнить агент: "По приложению 1" (выбрал из списка созданных агентов) Рис.1

    Скрипт вставлен в этом агенте, вроде все так. Рис.2

    А какой папки может не быть говоришь?
     

    Вложения:

    • Функцию Кнопки В Агент
      1.jpg
      Размер файла:
      469 КБ
      Просмотров:
      66
    • Функцию Кнопки В Агент
      2.jpg
      Размер файла:
      431,9 КБ
      Просмотров:
      64
  4. savl

    savl Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    28 окт 2011
    Сообщения:
    2.116
    Симпатии:
    157
    Путь к файлу проверь.
    Для примера, если путь такой {C:\apps\filename.*}, то если нет папки apps будет такая ошибка.
     
  5. Dimok-163rus

    Dimok-163rus Well-Known Member

    Репутация:
    0
    Регистрация:
    20 июн 2013
    Сообщения:
    89
    Симпатии:
    0
    файл ложится в документ, в свою очередь который лежит на сервере...хм
     
  6. savl

    savl Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    28 окт 2011
    Сообщения:
    2.116
    Симпатии:
    157
    Ошибка в одном из этих мест, если код агента не менялся по сравнению с кнопкой:
    Код:
    Call Word.documents.add(tmppth_str & "\" & Cstr(pth_str$)) 'Создаем новый документ на основе соответствующего шаблона
    
    wordDoc.saveas(tmppth_str + "\"+nm_doc$)
    
    'Добавляет в RTF-поле присоединенный файл или ссылку на него.
    Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, nm_doc$, tmppth_str + "\"+nm_doc$)
    
    
    '	Удаляем директорию
    Kill tmppth_str & "\" & Cstr(pth_str$)
    Kill tmppth_str + "\"+nm_doc$
    Rmdir tmppth_str
    То что документ в базе, а база на сервере - ничего не значит, агент все равно отрабатывает на клиентской машине.
    Изменяет документ в рамках открытого клиента, как только сохранил документ - документ изменился в базе.
     
  7. Dimok-163rus

    Dimok-163rus Well-Known Member

    Репутация:
    0
    Регистрация:
    20 июн 2013
    Сообщения:
    89
    Симпатии:
    0
    Пришлось объявить пару полей типа String:
    (Dim pth_str As string
    Dim tmppth_str As String, закоментил:
    ' dt_date$ = dt.DateOnly
    ' dt_time$ = dt.TimeOnly
    ' dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
    ' dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)
    во временной выгрузки на C, ругался на dt_date$...и т.д, писал что "Variable not declared"
    и убрал обработчик ошибок, на него тоже гнал )

    Код:
    Sub Initialize
    
    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession
    
    Dim pdoc As NotesDocument, childdoc As NotesDocument, tmpDoc As NotesDocument, profile As NotesDocument
    Dim dc As NotesDocumentCollection
    
    Dim db As NotesDatabase, sprdb As NotesDatabase
    
    Dim agent As NotesAgent	
    
    Set agent = sess.CurrentAgent
    
    Dim uidoc As NotesUIDocument
    
    Dim view As NotesView
    
    
    'Поля, необходимо которые выгрузить
    Dim Seria(0) As Variant 
    Dim Number_reg(0) As String
    Dim Data_reg_izm(0) As Variant
    Dim Osn_pogash(0) As Variant	
    Dim Dol_podp(0) As Variant	
    Dim Osn_podpis(0) As Variant
    Dim Podpisant(0) As Variant
    
    Set uidoc = ws.CurrentDocument
    Set pdoc = uidoc.Document	
    Set db = sess.CurrentDatabase
    
    'Профиль системы и база справочника
    Set profile = db.GetProfileDocument("ConfigPrf")
    If profile.pthRefer(0)="" Then
    MessageBox "В профиле конфигурации системы не указан путь к БД Справочники!",0 ,"Ошибка настройки системы"
    Exit Sub
    End If
    
    Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))
    
    'Продолжать?	
    Dim askme As Variant
    askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")	
    If askme=0 Then
    Exit Sub
    End If
    
    '-------------------------------------------------------------------------------------------------------------------------------------------
    Dim itm As NotesRichTextItem
    Set itm = pdoc.GetFirstItem("Sfakt")
    
    If Not itm Is Nothing Then
    
    Call pdoc.RemoveItem("Sfakt")
    pdoc.Flag_Close="1"
    Call pdoc.Save( True, False )
    
    End If
    '--------------------------------------------------------------------------------------------------------------------------------------
    Set childdoc = db.GetDocumentByUNID(pdoc.GetItemValue("ID_Rubl_obl")(0))	
    
    Dim coll1 As NotesDocumentCollection
    Dim dt1 As New NotesDateTime("")
    Dim doc1 As NotesDocument 'Справочный док
    Dim pth_str As string
    'По коду шаблона ищем в справочнике шаблонов нужную карточку шаблона
    pth_str$=""
    Set coll1 = sprdb.Search({Form = "TmpForm_Profile" & ShortName = "P002"},Nothing,0)
    '	Msgbox "Количество док-тов : " & coll1.Count 
    Dim rttmp As NotesRichTextItem
    If coll1.Count >0 Then
    Set doc1 = coll1.GetFirstDocument
    Set rttmp = doc1.GetFirstItem("TmpDoc")
    ForAll o In rttmp.EmbeddedObjects
    If Right(o.Name,4)=".dot" Then
    pth_str$ = o.Name
    GoTo ExtrMark
    End If
    End ForAll
    End If
    If pth_str$="" Then
    MessageBox "Невозможно перейти к генерации поручения: в справочнике шаблонов отсутствует шаблон поручения!",,"Внимание!"
    Exit Sub
    End If
    
    ExtrMark:	
    'Создаем каталог временной выгрузки на С
    Dim dt As New NotesDateTime( "" )
    Dim tmppth_str As String
    Call dt.SetNow
    '	dt_date$ = dt.DateOnly
    '	dt_time$ = dt.TimeOnly
    '	dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
    '	dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)
    
    tmppth_str = Environ$("TEMP") + "\TmpTpl_"
    '+dt_date$+"_"+dt_time$
    MkDir tmppth_str
    
    'Выгружаем шаблон в созданную директорию
    Dim object As NotesEmbeddedObject
    Set object = rttmp.GetEmbeddedObject(pth_str$ )
    Call object.ExtractFile (tmppth_str & "\" & CStr(pth_str$))
    
    '--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------	
    Dim Word As Variant
    Dim WordDoc As Variant
    'Новый объект Word
    'Создание объекта Word'a
    Set Word = CreateObject("Word.Application") 
    Call Word.documents.add(tmppth_str & "\" & CStr(pth_str$)) 'Создаем новый документ на основе соответствующего шаблона
    Set WordDoc = Word.activedocument
    
    'Присваивание полям-Word'a значений из полей notes-документа
    worddoc.FormFields(1).result = childdoc.Name(0)
    worddoc.FormFields(2).result = childdoc.Seria(0)
    worddoc.FormFields(3).result = childdoc.Number_reg(0)
    worddoc.FormFields(4).result = childdoc.Data_reg_izm(0)
    'worddoc.FormFields(5).result = childdoc.Вкладка "досрочное погашение"кол-во погаш.шт(0)
    'worddoc.FormFields(6).result = childdoc.Вкладка "доср.погашение"[301](0)
    worddoc.FormFields(7).result = childdoc.Osn_pogash(0)
    'worddoc.FormFields(8).result = childdoc.Вкладка "доср.погашение"Дата досрочн.погашения"(0)
    worddoc.FormFields(9).result = pdoc.Dol_podp(0)
    worddoc.FormFields(10).result = pdoc.Osn_podpis(0)
    worddoc.FormFields(11).result = pdoc.Podpisant(0)
    worddoc.FormFields(12).result = Today
    
    '	worddoc.saveas("File1") 'сохранение документа-Word'a с именем файла ""
    Dim nm_doc As String
    nm_doc$ = "File2.doc"
    WordDoc.saveas(tmppth_str + "\"+nm_doc$)
    
    WordDoc.close
    
    If pdoc.HasItem("Sfakt") Then
    Set rttmp = pdoc.GetFirstItem("Sfakt")
    Else
    Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
    End If
    
    'Добавляет в RTF-поле присоединенный файл или ссылку на него.
    Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, "nm_doc$", tmppth_str + "\"+nm_doc$)
    
    pdoc.Flag_Close="1"
    Call uidoc.FieldSetText("$KM", "6" )
    Call pdoc.Save( True, True )
    pdoc.SaveOptions = "0"
    Call ws.ViewRefresh
    Call uidoc.Close	(True)
    Call ws.EditDocument(True, pdoc)
    
    
    '	Удаляем директорию
    Kill tmppth_str & "\" & CStr(pth_str$)
    Kill tmppth_str + "\"+nm_doc$
    RmDir tmppth_str
    Exit Sub
    
    End Sub
    Код агента:

    Код:
    Sub Initialize
    
    Dim ws As New NotesUIWorkspace
    Dim sess As New NotesSession
    
    Dim pdoc As NotesDocument, childdoc As NotesDocument, tmpDoc As NotesDocument, profile As NotesDocument
    Dim dc As NotesDocumentCollection
    
    Dim db As NotesDatabase, sprdb As NotesDatabase
    
    Dim agent As NotesAgent	
    
    Set agent = sess.CurrentAgent
    
    Dim uidoc As NotesUIDocument
    
    Dim view As NotesView
    
    
    'Поля, необходимо которые выгрузить
    Dim Seria(0) As Variant 
    Dim Number_reg(0) As String
    Dim Data_reg_izm(0) As Variant
    Dim Osn_pogash(0) As Variant	
    Dim Dol_podp(0) As Variant	
    Dim Osn_podpis(0) As Variant
    Dim Podpisant(0) As Variant
    
    Set uidoc = ws.CurrentDocument
    Set pdoc = uidoc.Document	
    Set db = sess.CurrentDatabase
    
    'Профиль системы и база справочника
    Set profile = db.GetProfileDocument("ConfigPrf")
    If profile.pthRefer(0)="" Then
    MessageBox "В профиле конфигурации системы не указан путь к БД Справочники!",0 ,"Ошибка настройки системы"
    Exit Sub
    End If
    
    Set sprdb = sess.GetDatabase(db.Server, profile.pthRefer(0))
    
    'Продолжать?	
    Dim askme As Variant
    askme = ws.Prompt(PROMPT_YESNO, "Вы уверены?", "Сгенерировать документ?")	
    If askme=0 Then
    Exit Sub
    End If
    
    '-------------------------------------------------------------------------------------------------------------------------------------------
    Dim itm As NotesRichTextItem
    Set itm = pdoc.GetFirstItem("Sfakt")
    
    If Not itm Is Nothing Then
    
    Call pdoc.RemoveItem("Sfakt")
    pdoc.Flag_Close="1"
    Call pdoc.Save( True, False )
    
    End If
    '--------------------------------------------------------------------------------------------------------------------------------------
    Set childdoc = db.GetDocumentByUNID(pdoc.GetItemValue("ID_Rubl_obl")(0))	
    
    Dim coll1 As NotesDocumentCollection
    Dim dt1 As New NotesDateTime("")
    Dim doc1 As NotesDocument 'Справочный док
    Dim pth_str$
    'По коду шаблона ищем в справочнике шаблонов нужную карточку шаблона
    pth_str$=""
    Set coll1 = sprdb.Search({Form = "TmpForm_Profile" & ShortName = "P002"},Nothing,0)
    '	Msgbox "Количество док-тов : " & coll1.Count 
    Dim rttmp As NotesRichTextItem
    If coll1.Count >0 Then
    Set doc1 = coll1.GetFirstDocument
    Set rttmp = doc1.GetFirstItem("TmpDoc")
    ForAll o In rttmp.EmbeddedObjects
    If Right(o.Name,4)=".dot" Then
    pth_str$ = o.Name
    GoTo ExtrMark
    End If
    End ForAll
    End If
    If pth_str$="" Then
    MessageBox "Невозможно перейти к генерации поручения: в справочнике шаблонов отсутствует шаблон поручения!",,"Внимание!"
    Exit Sub
    End If
    
    ExtrMark:	
    'Создаем каталог временной выгрузки на С
    Dim dt As New NotesDateTime( "" )
    Dim tmppth_str As String, dt_date$,dt_time$
    Call dt.SetNow
    dt_date$ = dt.DateOnly
    dt_time$ = dt.TimeOnly
    dt_date$ = Left(dt_date$,2)+Right(Left(dt_date$,5),2)+Right(dt_date$,2)
    dt_time$ = Left(dt_time$,2)+Right(Left(dt_time$,5),2)+Right(dt_time$,2)
    
    tmppth_str = Environ$("TEMP") + "\TmpTpl_"+dt_date$+"_"+dt_time$
    MkDir tmppth_str
    
    'Выгружаем шаблон в созданную директорию
    Dim object As NotesEmbeddedObject
    Set object = rttmp.GetEmbeddedObject(pth_str$ )
    Call object.ExtractFile (tmppth_str & "\" & CStr(pth_str$))
    
    '--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------	
    Dim Word As Variant
    Dim WordDoc As Variant
    'Новый объект Word
    'Создание объекта Word'a
    Set Word = CreateObject("Word.Application") 
    Call Word.documents.add(tmppth_str & "\" & CStr(pth_str$)) 'Создаем новый документ на основе соответствующего шаблона
    Set WordDoc = Word.activedocument
    
    'Присваивание полям-Word'a значений из полей notes-документа
    worddoc.FormFields(1).result = childdoc.Name(0)
    worddoc.FormFields(2).result = childdoc.Seria(0)
    worddoc.FormFields(3).result = childdoc.Number_reg(0)
    worddoc.FormFields(4).result = childdoc.Data_reg_izm(0)
    'worddoc.FormFields(5).result = childdoc.Вкладка "досрочное погашение"кол-во погаш.шт(0)
    'worddoc.FormFields(6).result = childdoc.Вкладка "доср.погашение"[301](0)
    worddoc.FormFields(7).result = childdoc.Osn_pogash(0)
    'worddoc.FormFields(8).result = childdoc.Вкладка "доср.погашение"Дата досрочн.погашения"(0)
    worddoc.FormFields(9).result = pdoc.Dol_podp(0)
    worddoc.FormFields(10).result = pdoc.Osn_podpis(0)
    worddoc.FormFields(11).result = pdoc.Podpisant(0)
    worddoc.FormFields(12).result = Today
    
    '	worddoc.saveas("File1") 'сохранение документа-Word'a с именем файла ""
    Dim nm_doc$
    nm_doc$ = "File2.doc"
    WordDoc.saveas(tmppth_str + "\"+nm_doc$)
    
    WordDoc.close
    
    If pdoc.HasItem("Sfakt") Then
    Set rttmp = pdoc.GetFirstItem("Sfakt")
    Else
    Set rttmp = New NotesRichTextItem(pdoc, "Sfakt")
    End If
    
    'Добавляет в RTF-поле присоединенный файл или ссылку на него.
    Set object = rttmp.EmbedObject( EMBED_ATTACHMENT, "nm_doc$", tmppth_str + "\"+nm_doc$)
    
    pdoc.Flag_Close="1"
    Call uidoc.FieldSetText("$KM", "6" )
    Call pdoc.Save( True, True )
    pdoc.SaveOptions = "0"
    Call ws.ViewRefresh
    Call uidoc.Close	(True)
    Call ws.EditDocument(True, pdoc)
    
    
    '	Удаляем директорию
    Kill tmppth_str & "\" & CStr(pth_str$)
    Kill tmppth_str + "\"+nm_doc$
    RmDir tmppth_str
    Exit Sub
    
    End Sub
    объявление переменных отредактировал и расскомментил временную выгрузку на C.
    Теперь агент отрабатывает правильно, но в конце выдает ошибку, которая не влияет на нужный результат отработки агента
     

    Вложения:

    • Функцию Кнопки В Агент
      1.jpg
      Размер файла:
      257,1 КБ
      Просмотров:
      54
  8. Kizarek86

    Kizarek86 Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    20 июл 2007
    Сообщения:
    860
    Симпатии:
    6
    Добавьте уже обработчик ошибок или используйте дебагер, чтобы четко понимать в какой строке ошибка...
     
  9. Dimok-163rus

    Dimok-163rus Well-Known Member

    Репутация:
    0
    Регистрация:
    20 июн 2013
    Сообщения:
    89
    Симпатии:
    0
    буду признателен, если распишите как в

    IBM Lotus Domino Designer 8.5

    Выпуск 8.5.3 . рус.версии

    пользоваться дебагером :D
     
  10. savl

    savl Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    28 окт 2011
    Сообщения:
    2.116
    Симпатии:
    157
    Ищи сверху в меню. Сразу за "Действия", находится Tools (инструменты?) внутри ищи пункт "Отладчик LotusScript" там еще слева от него иконка будет. желтая с синей стрелкой.

    P.s. обработчик ошибок не гонит, просто иногда не так считает строки в LS агентах(надо переходить на Initialize и искать номер строки).
    Верни обработчик.
     
  11. Dimok-163rus

    Dimok-163rus Well-Known Member

    Репутация:
    0
    Регистрация:
    20 июн 2013
    Сообщения:
    89
    Симпатии:
    0

    вот такая баня у меня, я же итак в Initialize пишу


    разобрался с отладчиками
     

    Вложения:

  12. savl

    savl Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    28 окт 2011
    Сообщения:
    2.116
    Симпатии:
    157
    убираем эти 3 переменные.
    и Меняем на:
    Код:
    mesError:
    Msgbox "Error in line: " & erl & chr(10) & chr(13) & Error$
    exit Sub 
    end sub
     
  13. Dimok-163rus

    Dimok-163rus Well-Known Member

    Репутация:
    0
    Регистрация:
    20 июн 2013
    Сообщения:
    89
    Симпатии:
    0
    ага так и сделал :D
     
Загрузка...

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