Хитрозамудренный агент.

Тема в разделе "Lotus - Программирование", создана пользователем LIGHT, 5 июн 2007.

  1. LIGHT

    LIGHT Гость

    Суть агента:

    Есть БД, назовем ее - "Задачи" в которой хранятся ссылки на документы в других разных базах.
    В этой базе "Задачи"есть форма - Memo на которой лежат следующие поля:
    SendTo (UserNoteName)
    SourseUNIDDoc (UNID - документа)
    From - (Название базы в которую ведет ссылка по русски)

    Юзер видет только свои документы по признаку что он является SendTo
    Он открывает документ и в нем есть ссылка на документ из другой БД.
    Он нажимет ссылку и знакомится с доком.

    Задача написать агент который будет делать следубщее:

    Юзер выделяет колекцию своих документов, и реплейсит поля X1; X2 в документах на которые ведут ссыки. Сложность в том что доки лежат в разных базах, но везде есть указаные поля.

    Вот за что бы зацепится???
     
  2. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Имя базы есть?
    Тогда:
    1. notesSession.GetDatabase
    2. notesDatabase.GetDocumentByUNID
    3. notesDocument.ReplaceItemValue
     
  3. LIGHT

    LIGHT Гость

    Ага только имя базы в буквальном смысле database title ;)
    Как с этим быть?

    Есть еще база "Связи" svazi.nsf в коротой есть список баз (title) и их коды реплик.
    Может как-то это зацепить?
    Только как???
     
  4. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Прописать нормальный путь. Можно в скрытое поле.
    Можно еще, наверное, через notesSession.GetDbDirectory, а потом notesDbDirectory.GetFirstDatabase и notesDbDirectory.GetNextDatabase.

    <!--QuoteBegin-LIGHT+5:06:2007, 12:25 -->
    <span class="vbquote">(LIGHT @ 5:06:2007, 12:25 )</span><!--QuoteEBegin-->Есть еще база "Связи" svazi.nsf в коротой есть список баз (title) и их коды реплик.
    Может как-то это зацепить?
    Только как???

    [snapback]68109" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Тогда можно попробовать:
    notesDbDirectory.OpenDatabaseByReplicaID

    Или notesDatabase.OpenByReplicaID.
     
  5. LIGHT

    LIGHT Гость

    На данный момен картина такая.

     
  6. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-LIGHT+5:06:2007, 12:37 -->
    <span class="vbquote">(LIGHT @ 5:06:2007, 12:37 )</span><!--QuoteEBegin-->Вот тут вопрос как в открытой теперь БД вытащить документ у которого поле Title = From1
    А дальше уже когда вытащин документ, в форме есть поля:
    ServerDB
    FileDB
    ReplicalID
    [snapback]68115" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Использовать notesView.GetDocumentByKey
     
  7. LIGHT

    LIGHT Гость

    Врезал такой кусок, ругается на неверный тип, не подскажеш на какю мину я наступил?
    Код (Text):
                Dim session2 As New NotesSession
    Dim db2 As NotesDatabase
    Dim view2 As NotesView
    Dim doc2 As NotesDocument
    key = From1
    Set db2 = session2.CurrentDatabase
    Set view2 = db2.GetView ("DBTitleLookup" ) 'Моя вьюшка
    Set doc2 = view2.GetDocumentByKey (key )
    If Not (doc2 Is Nothing) Then
    Messagebox "$" & doc2.GetItemValue ("Title")(0),, _
    "Title"
    Else
    Messagebox "DBTitleLookup " + key,, "Not found"
    End If
     
  8. Medevic

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

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: LIGHT
    Ты посмотри в дебаггере на какую строку ругается.
    Кстати, вторую сессию (Dim session2 As New NotesSession) не надо создавать. У тебя уже есть - s.
     
  9. LIGHT

    LIGHT Гость

    А что-то дебагер вообще молчит
    Но методом тыка вычисли на что он ругается.
    На Set doc2 = view2.GetDocumentByKey (key )
    При чем Messagebox key нормально выдает.
    Вьюшка DBTitleLookup - существует (это к стати алиас, но пробовал и назваине и алиас, один фиг)
     
  10. Hedg

    Hedg Гость

    Для: LIGHT
    Вьюшка категоризированна???
     
  11. LIGHT

    LIGHT Гость

    Нет там всего 1 колонка - Title
     
  12. Hedg

    Hedg Гость

    Для: LIGHT
    поробуй её категоризировать
     
  13. LIGHT

    LIGHT Гость

    Я кажись понял в чем дело.
    Смотрите:

    Нужно же прочитать в базе связей документ! у которого поле Title=From1
    Проще всего найти название Title во вьюшке DBTitleLookup
    А дальше открыть документ который постоен по форме Databese и на которой лежат поля Title File Replical

    Что-то запутался....
     
  14. Ogion7

    Ogion7 Гость

    достаточно отсортировать
     
  15. LIGHT

    LIGHT Гость

    Вроде прбедил, насамом деле была ошибка в коде.
    На данный момент я благополучно выдрал ReplicaID и Значение поля Address
    Но тут возник затык, поле Address много значное
    "Adress/Servers"
    "FileName.nsf"

    Как бы мне выдрать только последнее?

    Ой все вопрос снят!!!
     
  16. LIGHT

    LIGHT Гость

    Еще вопрос по теме.
    Как проще всего отыскать документ зная его UNID?
     
  17. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    <!--QuoteBegin-LIGHT+5:06:2007, 15:09 -->
    <span class="vbquote">(LIGHT @ 5:06:2007, 15:09 )</span><!--QuoteEBegin-->Как проще всего отыскать документ зная его UNID?
    [snapback]68169" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    ...
    Set db = s.CurrentDatabase
    Set dc = db.AllDocuments
    Set doc = dc.GetFirstDocument
    While Not(doc Is Nothing)
    If doc.IsResponse Then
    Set pdoc = _
    db.GetDocumentByUNID(doc.ParentDocumentUNID)
    ...
     
  18. LIGHT

    LIGHT Гость

    Код (Text):
    db.AllDocuments
    Хм.. а если документов пару сотен тыщ?
     
  19. morpheus

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

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Для: LIGHT
    Да Вы на это не сматрите, выше код я привел что бы было понятно что такое db - NotesDataBase

    Set db = s.CurrentDatabase
    ...
    Set pdoc = _
    db.GetDocumentByUNID(doc.ParentDocumentUNID)
    - Finds a document in a database, given the document universal ID (UNID).

    Syntax
    Set notesDocument = notesDatabase.GetDocumentByUNID( unid$ )
     
  20. LIGHT

    LIGHT Гость

    Понял, победил.
    Начались заморочки с реплейсами.
    К примеру есть много занчное поле
    Reviewer
    "User1NotesName"
    "User2NotesName"
    "User3NotesName"
    "User4NotesName"

    Среди них должен быть (не обязательно) SendTo (UserNoteName) т.е. User заненсенный в поле SendTo в самом первом документе (первый пост в этой ветке)
    Как мне удалить эту строку в много значном поле?

    Как бы логику понимаю сложность отыскать именно эту строку в многозначнике :)
     
Загрузка...

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