Написание агента

Тема в разделе "Lotus - Программирование", создана пользователем kilcher, 16 янв 2009.

  1. kilcher

    kilcher Гость

    Здравствуйте!
    возникла проблема в написании агента :unsure:
    Этот агент должен просматривать все документы,которые проходят согласование. И если человек не согласовал какой то(в котором он в списке согласующих),то отправить ему письмо. Проблема в том,что в документе нет поля для тех кто не согласовал и согласовал. Люди проставляют отметку о согласовании,создавая новый документ "answer"(уже вью созданное по новому документу отображается в текущем).
    Т. е. получается надо просмотреть коллекцию докментов.в каждом из которых взять значение поля с id,затем по id найти уже документы "ответы" с полями содержащими имена тех кто согласовал.
    Вот такой кошмар! Для новых я уже создала три поля:должны согласовть,согласовали и не согласовал. Но вот старые придется обработать агентом,который пытаюсь написать ;) Вот код

    Sub Initialize

    Dim sess As New NotesSession
    Dim db As NotesDatabase
    Dim coll As NotesDocumentCollection,col As NotesDocumentCollection
    Dim doc As NotesDocument,doc1 As NotesDocument
    Dim bodytext As Variant
    Dim sss As String
    Dim newDoc As NotesDocument
    Dim rtitem As NotesRichTextItem
    Dim ord As Variant, ans As Variant
    Dim vDB As NotesView
    Dim answers() As String

    Set db = sess.CurrentDatabase
    Set coll = db.Search({Form = "Order"}, Nothing, 0)
    Set doc = coll.GetFirstDocument

    Set vDB= db.GetView("Answer")
    While Not doc Is Nothing

    ord = doc.GetItemValue( "order_id ") ' берем id
    Set col = vDB.GetAllDocumentsByKey(ord )'ищем по нему
    Set doc1= col.GetFirstDocument

    While Not doc1 Is Nothing
    ans = doc1.GetItemValue( "answer_name")'берем имя согласовавшего

    'Если подписал
    Redim Preserve answers(Lbound(answers) To Ubound(answers) + 1)'создаем список
    answers(Ubound( answers)) = doc.soglasovali'заносим его в поле согласовали



    Set doc1= col.GetNextDocument(doc1)
    Wend


    Set doc = coll.GetNextDocument(doc)
    Wend

    End Sub


    Пожалуйста помогите!!!!!
     
  2. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Ну не такой уж и кошмар. Нормально по-моему. :unsure:
    Можно на собаках написать. Гораздо проще будет.
    Что-то типа:
    Код (Text):
    @SetField("твое поле"; @Trim(@DbLookup("" : "NoCache"; ""; "Answer"; order_id; "answer_name"; [FailSilent])))
    Но лучше не надо пихать всё в один документ. Каждому согласовывающему по копии. И пусть согласовывает.
     
  3. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    +1 за "не кошмар"
     
  4. kilcher

    kilcher Гость

    Спасибо!!!!!!!!! чего я сразу не догадалась :unsure: Только я да это можно сказать не согласование,а просто ознакомление с документом. Вот еще надо теперь подумать как копии им рассылать ;)
     
  5. kilcher

    kilcher Гость

    Прошу о помощи все с тем же агентом. :lol: Пришлось писать скриптом конечно вычисления всех этих полей. Два я вычислила легко: кто должен согласовать answer1 и уже согласовал. А вот кто остался не вычисляется. В чем может быть ошибка?

    Set coll = db.Search({Form = "Order"}, Nothing, 0)
    Set doc = coll.GetFirstDocument
    Dim num As Integer


    While Not doc Is Nothing
    'обнуляем поля
    doc.answer1=""
    doc.soglasovali=""
    doc.ne_soglasovali=""

    Set item = doc.GetFirstItem( "answer1" )
    Set item1 = doc.GetFirstItem( "soglasovali" )
    'заполняем поле именами тех,кто должен проставить отметку

    Call item.AppendToTextList( doc.GetItemValue("order_dp") )
    Call item.AppendToTextList( doc.GetItemValue("order_mp") )
    Call item.AppendToTextList( doc.GetItemValue("member_name") )
    'если кто-то уже проставил независимость ищем документ "Answer"и берем от туда имя пользователя
    Set view = db.GetView("Answer" )
    Set dc = view.GetAllDocumentsByKey(doc.order_id, False)
    Set doc1= dc.GetFirstDocument

    While Not(doc1 Is Nothing)
    Call item1.AppendToTextList( doc1.GetItemValue("From") )

    'сравниваем значение полей кто должен проставить отметку и кто уже проставил.
    f1 = doc.GetFirstItem("answer1").Values
    f2 = doc.GetFirstItem("soglasovali").Values
    f3 = Fulltrim(Arrayreplace(f1, f2, ""))
    Call doc.ReplaceItemValue("ne_soglasovali", f3)
    doc.ComputeWithForm False, False
    doc.Save True, True
    Set doc1 = dc.GetNextDocument (doc1)
    Wend
     
  6. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Делай на собаках. Проще будет. :)
    Код (Text):
    @SetField("answer1"; @Unique(@Trim(order_dp : order_mp : ember_name)));
    @SetField("soglasovali"; @Trim(@Unique(@DbLookup("" : "NoCache"; ""; "Answer"; order_id; "From"; [FailSilent]))));
    @SetField("ne_soglasovali"; @Trim(@Replace(answer1; soglasovali; "")))
     
  7. kilcher

    kilcher Гость


    Спасибо! Я уже разобралась почему не работал агент. :)
    Я никогда не видела агента по рассписанию на собаках. На них разве можно коллекцию просмотреть доков?
     
  8. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Что значит коллекцию просмотреть доков?
     
  9. kilcher

    kilcher Гость

    Как взять коллекцию я представлю на собаках,а как переходить по документам? Ну что то типа GetNextDocument :)
    Или на собаках не так делается?
     
  10. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    На собаках формула применяется ко всем отобранным документам.
     
  11. kilcher

    kilcher Гость

    Здорово! :)
    Вот к чему ведет не знание :)
    Спасибо!!!!!!!
     
Загрузка...
Похожие Темы - Написание агента
  1. wellsun
    Ответов:
    0
    Просмотров:
    131
  2. vladis222
    Ответов:
    1
    Просмотров:
    627
  3. smailvolf
    Ответов:
    1
    Просмотров:
    1.039
  4. faissullin
    Ответов:
    0
    Просмотров:
    1.091
  5. IseLL
    Ответов:
    1
    Просмотров:
    998

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