1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

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

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

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

  1. LIGHT

    LIGHT Гость

    Репутация:
    0
    Суть агента:

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

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

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

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

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

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

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

    LIGHT Гость

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

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

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

    Репутация:
    0
    Регистрация:
    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 Гость

    Репутация:
    0
    На данный момен картина такая.

     
  6. Medevic

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

    Репутация:
    0
    Регистрация:
    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 Гость

    Репутация:
    0
    Врезал такой кусок, ругается на неверный тип, не подскажеш на какю мину я наступил?
    Код:
    			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

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

    LIGHT Гость

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

    Hedg Гость

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

    LIGHT Гость

    Репутация:
    0
    Нет там всего 1 колонка - Title
     
  12. Hedg

    Hedg Гость

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

    LIGHT Гость

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

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

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

    Ogion7 Гость

    Репутация:
    0
    достаточно отсортировать
     
  15. LIGHT

    LIGHT Гость

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

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

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

    LIGHT Гость

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

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

    Репутация:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    3.915
    Симпатии:
    1
    <!--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 Гость

    Репутация:
    0
    Код:
    db.AllDocuments
    Хм.. а если документов пару сотен тыщ?
     
  19. morpheus

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

    Репутация:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    3.915
    Симпатии:
    1
    Для: 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 Гость

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

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

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

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