• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

  • Автор темы Автор темы LIGHT
  • Дата начала Дата начала
L

LIGHT

Суть агента:

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

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

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

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

Вот за что бы зацепится???
 
Имя базы есть?
Тогда:
1. notesSession.GetDatabase
2. notesDatabase.GetDocumentByUNID
3. notesDocument.ReplaceItemValue
 
Ага только имя базы в буквальном смысле database title ;)
Как с этим быть?

Есть еще база "Связи" svazi.nsf в коротой есть список баз (title) и их коды реплик.
Может как-то это зацепить?
Только как???
 
Прописать нормальный путь. Можно в скрытое поле.
Можно еще, наверное, через 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.
 
На данный момен картина такая.

Sub Click(Source As Button)

Dim s As NotesSession
Dim db As NotesDatabase
Dim uidoc As NotesUIDocument
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim w As NotesUIWorkspace
Dim createDate As Variant
Dim i As Variant
'***********************************************
Set s = New NotesSession
Set db = s.CurrentDatabase
Set dc = db.UnprocessedDocuments
Set doc = dc.GetFirstDocument
Set w = New NotesUIWorkspace

'**********************************************

Do Until doc Is Nothing 'Первый документ

Let From1=doc.From(0) 'Поле FORM
Let SendTo1=doc.SendTo(0) 'Поле SendTo
Let SUNID=doc.SourceUNIDDoc(0) 'Поле SendTo

Messagebox( "Документ " + SUNID + " в БД - " + From1 + " Изменен")

Dim s1 As New NotesSession
Dim db1 As NotesDatabase
Set db1 = s.GetDatabase("server", "svazi")
If Not db1.IsOpen Then
Messagebox "Неудалось открыть базу данных"
Else


Messagebox db1.Title,, "Title of svazi.nsf"

Вот тут вопрос как в открытой теперь БД вытащить документ у которого поле Title = From1
А дальше уже когда вытащин документ, в форме есть поля:
ServerDB
FileDB
ReplicalID


End If

Set doc = dc.GetNextDocument (doc)
Loop


End Sub
 
<!--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
 
Врезал такой кусок, ругается на неверный тип, не подскажеш на какю мину я наступил?
Код:
			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
 
Для: LIGHT
Ты посмотри в дебаггере на какую строку ругается.
Кстати, вторую сессию (Dim session2 As New NotesSession) не надо создавать. У тебя уже есть - s.
 
А что-то дебагер вообще молчит
Но методом тыка вычисли на что он ругается.
На Set doc2 = view2.GetDocumentByKey (key )
При чем Messagebox key нормально выдает.
Вьюшка DBTitleLookup - существует (это к стати алиас, но пробовал и назваине и алиас, один фиг)
 
Я кажись понял в чем дело.
Смотрите:

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

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

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

Ой все вопрос снят!!!
 
Еще вопрос по теме.
Как проще всего отыскать документ зная его UNID?
 
<!--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)
...
 
Код:
db.AllDocuments
Хм.. а если документов пару сотен тыщ?
 
Для: 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$ )
 
Понял, победил.
Начались заморочки с реплейсами.
К примеру есть много занчное поле
Reviewer
"User1NotesName"
"User2NotesName"
"User3NotesName"
"User4NotesName"

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

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

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab