Передать параметры агенту

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

  1. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Вопросы эти я уже поднимал, вроде все было ясно, но как дошло до практической реализации - заперся.
    В общем, есть у меня Поручение, на которое юзер должен составить Отчет. При этом данные отчета должны быть занесены в Поручение, а сам Отчет - убит. Делаю это при помощи агента.
    Итак, есть Отчет, у которого на Postsave лежит код:
    Код (Text):
    Dim agent As NotesAgent
    Dim doc As NotesDocument

    Set doc = Source.Document  
    Set agent = doc.ParentDatabase.GetAgent("SaveReport")
    agent.Run doc.NoteID
    Source.Close
    Затем есть собственно агент:
    Код (Text):
    Sub Initialize
    Dim session As New NotesSession
    Dim report As NotesDocument, order As NotesDocument
    Dim db As NotesDatabase
    Dim agent As NotesAgent
    Dim theLog As NotesLog

    Set theLog = New NotesLog("MyApp")
    theLog.OpenAgentLog

    theLog.LogAction "Hello"
    theLog.LogAction "Параметровый док: " & agent.ParameterDocID

    Set agent = session.CurrentAgent
    Set db = session.CurrentDatabase
    Set report = db.GetDocumentByID(agent.ParameterDocID)
    Set order = db.GetDocumentByUNID(report.ParentDocumentUNID)

    theLog.LogAction report.ReportText(0)

    order.ReplaceItemValue "ReportText", report.GetItemValue("ReportText")
    order.ReplaceItemValue "ReportDetails", report.GetItemValue("ReportDetails")
    order.Save True, False
    End Sub
    На форме самого Поручения есть действие "Ввести отчет", которое просто создает документ по форме Отчет (она - ответ-на-ответ).
    Думал, что по выполнении этой манипуляции в Поручение попадут нужные данные, ан нет - ничего не происходит. Более того, создается впечатление, что после строки theLog.LogAction "Hello" агент вообще не выполняется (в логе, во всяк, ничего нет). Что я здесь делаю не так, подскажите...
    Отдельное спасибо тем, кто подскажет, как половчее грохнуть Отчет после сохранения и закрытия. Source.Document.Remove True в Postsave не прокатывает: нельзя убивать документы, открытые с помощью NotesUIDocument.
     
  2. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-LuMee+11:12:2006, 16:09 -->
    <span class="vbquote">(LuMee @ 11:12:2006, 16:09 )</span><!--QuoteEBegin-->theLog.LogAction "Параметровый док: " & agent.ParameterDocID

    Set agent = session.CurrentAgent
    [snapback]50431" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Ничего странного не видишь? :)
     
  3. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-LuMee+11:12:2006, 15:09 -->
    <span class="vbquote">(LuMee @ 11:12:2006, 15:09 )</span><!--QuoteEBegin-->Отдельное спасибо тем, кто подскажет, как половчее грохнуть Отчет после сохранения и закрытия. Source.Document.Remove True в Postsave не прокатывает: нельзя убивать документы, открытые с помощью NotesUIDocument.
    [snapback]50431" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    а может и не грохать его? у меня форма отбора полей для отчета- это личный профиль... по выходу затираем выбранные поля и все... кажный раз показываем один и тот же документ
     
  4. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Тьфу, это я только что подправил. раньше эта строчка внизу лежала (после инициализации) - тоже не работало :)
     
  5. Fossil Code

    Fossil Code Гость

    Прошу простить, но не понимаю: зачем здесь агент, скрипты и все эти сложности? Что Вам мешает по кнопке "Ввести отчет" вызвать @DialogBox("Report";"Ввод отчета")? В результате поле ReportText в поручении получит значение, которое пользователь введет в ReportText в отчете. И никаких мук по поводу взаимодействия УИ и бэкэнда. Или что-то все-таки недосказано?

    P.S. Если в документе присутствует поле SaveOptions, равное "0", то документ не будет сохранен в базу, а закроется и сгинет без следа.
     
  6. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Во-первых, в Отчете присутствет Richtext-поле, которое не дружит с диалогами (или диалоги с ним).
    Во-вторых, у юзера нет прав на редактирование Поручения, поэтому данные заносятся агентом на стороне сервера (здесь у меня Run вместо RunOnServer только в качестве отладки)
     
  7. Fossil Code

    Fossil Code Гость

    Понятно. А насчет агента -- Вы точно хотите возиться с Агент Логом? Почему не просто "принт" и все в общесистемном логе? В смысле, в целях отладки.

    А сам подход, уж извините, представляется не вполне верным по нескольким причинам:

    1) Логическое противоречие: если уж нет прав на документ, то по определению не следует в него вносить ничего, что создано тем, у кого нет прав на изменение этого документа.
    2) Документарные соображения: к бумажному приказу-распоряжению отчеты, представляющие собой отдельные документы, подшиваются. Т.е. принцип "карте -- место" имеет место быть и облегчать жизнь.
    3) Возможности расширения: а если исполнителей много, или поручение многоэтапное, или потом захочется выставлять оценку "Выполнено/Хорошо/...." и т.п.?

    Вывод: Пусть отчет остается ответным документом. Тем более, что отчетов и исполнителей может быть много. А заодно и разрабатывать станет много легче. Если, конечно, не поздно переигрывать архитектурные решения.
     
  8. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Вроде разобрался - с ЮНИДами перемудрил. Сейчас работает. Без убийства документа тоже удалось обойтись - спасибо за идею с профилем :)

    Агент Лог - это так, для себя лично, в промышленной версии будет нормальный лог.

    Насчет подхода:
    1. Дело в том, что Поручение содержит как доступные юзеру поля (текст отчета), так и недоступные (всякая служебная информация). Дабы он чего не напортил, отчет создается вот таким хитрозадым образом
    2. Здесь скажу лишь, что Поручение - не совсем верный термин, скорее - Контрольная Карточка, куда как раз и должен быть вписан отчет. Прошу прощения, если ввел в заблуждение :D
    3. На каждое поручение у меня строго один исполнитель, отчет опять же должен быть строго один, а оценку можно опять же можно в карточке ставить.
     
Загрузка...

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