• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Странности с Composedocument

  • Автор темы San4el
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

San4el

Добрый вечер!
Ай нид хелп:

Dim ws As New notesuiworkspace
dim uidoc As notesuidocument
Dim dopDb As New NotesDatabase("Сервер1", "Путь")
Call ws.SetTargetFrame( "Dop")
set uidoc = ws.ComposeDocument( dopDb.Server, dopDb.FilePath, "Имя_Формы")

Но документ создается по форме которая находится не в dopDb (на сервере1), а в ее реплике на другом сервере - сервер2 (это если предварительно на воркспейсе кликнуть мышкой на реплику на сервере2, а если на кликнуть на реплику на сервере1 то и док соответственно создается нормально по форме из базы на сервере1)

В дебагере следующее:
dopDb.Server = "Сервер1"
dopDb.FilePath = "Путь"
uidoc.document.ParentDataBase.Server = "Сервер2"
uidoc.document.ParentDataBase.FilePath = "Путь"

Как быть ? Может кто уже сталкивался?
 
A

Akupaka

а иконки реплик на раб.обл. в стеке или отдельно?..
если в стеке, попробуй снять Stack replica icons чтобы отдельно были...
мож поможет...
 
S

San4el

неа не помогает. Если в стеке то создается на сервере где галочка стоит, а если не в стеке, то на сервере той базы которая была последняя выделена.
 
A

Akupaka

хм... а если не устанавливать таргетфрейм?

а откуда код вызывается?
 
S

San4el

Не пробовал просто надо именно во фрейм выводить суть в следуюшем:
нажимаем в документе кнопку код которой я написал и сбоку открывается фрейм в который подгружается новый документ, в котором в свою очередь есть ембедед вьюв, в котором документы истории по главному документу ... Прошу прощения за тавтологию.
 
S

San4el

Представление с того же сервера что и форма
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Может сделать через notesUIWorkspace.EditDocument?
 
S

San4el

Тогда его надо сначала сохранить а мне это не надо.
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Зачем сохранять?

И где база открыта? Не на сервере2 случайно?
 
S

San4el

В создаваемом документе есть поле Computed when composed (ID главного документа), которое считается из переменной окружения, которая в свою очередь прописывается перед созданием вспомогательного документа и по этому ID во встроеный во вспомогательный документ вид подтягиваются доки (доки истории) относящиеся к главному документу, а если использовать notesUIWorkspace.EditDocument то это поле становится пустым и соответственно в вид подтягиваются все документы истории по всем основным документам.

'И где база открыта? Не на сервере2 случайно?' - не понял? какая именно?

Да и еще вопрос не в тему: как запретить пережод в режим редактирования двойным щелчком левой кнопки мыши?
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Можно перед открытием прописать нужное значение. Или попробовать NotesDocument.ComputeWithForm.

С которой работаешь. В которой пытаешься открыть документ.

Событие Querymodechange.
 
S

San4el

Ща попробую...
База открыта на Сервере1 на котором собственно и пытаюсь открыть документ, но он открывается на сервере2 ....
 
S

San4el

Код:
Dim sEnvironment As String
Dim sForm As String	
Dim sFrame As String
sEnvironment = "IntDoc_UNID"			' имя переменной окружения, через которую передадим UNID (в форме 
'вычисляется в поле)
sForm = "StatDisplay_SUEK_SED"		' название формы, по которой будет создан документ для отображения
sFrame = "Dop"				' название фрейма, в котором отобразится документ
' ==================

' передаем UNID документа, по которому нужно показать статистику
Dim ses As New NotesSession
Call ses.SetEnvironmentVar( sEnvironment, g_Doc.CustomID(0) )
Dim ws As New notesuiworkspace	
Call ws.SetTargetFrame( sFrame )

Dim tmpDb As NotesDatabase
Set tmpDb = g_Doc.ParentDatabase 'g_Doc - текущий документ (NotesDocument)
Dim s As String
s = tmpDb.FilePath 
s = Strleftback( s, "\" )
Dim dopDb As New NotesDatabase(tmpDb.Server , s + "\statistic.nsf") ' база лежит в той же папке на сервере что и текущая
Dim uidoc As NotesUIDocument
Dim dopserver As String
Dim doppath As String
dopserver = dopDb.Server
doppath = dopDb.FilePath
Set uidoc = ws.ComposeDocument( dopserver, doppath, sForm )
В дебагере все правильно кроме: uidoc.Document.ParentDatabase.Server ="Сервер2", хотя Dopserver = "Сервер1"
А если делать так:
Код:
Dim sForm As String	
Dim sFrame As String
sEnvironment = "IntDoc_UNID"			' имя переменной окружения, через которую передадим UNID (в форме 
'вычисляется в поле)
sForm = "StatDisplay_SUEK_SED"		' название формы, по которой будет создан документ для отображения
sFrame = "Dop"				' название фрейма, в котором отобразится документ
' ==================

' передаем UNID документа, по которому нужно показать статистику
Dim ses As New NotesSession
Call ses.SetEnvironmentVar( sEnvironment, g_Doc.CustomID(0) )
Dim ws As New notesuiworkspace	
Call ws.SetTargetFrame( sFrame )

Dim tmpDb As NotesDatabase
Set tmpDb = g_Doc.ParentDatabase 'g_Doc - текущий документ (NotesDocument)
Dim s As String
s = tmpDb.FilePath 
s = Strleftback( s, "\" )
Dim dopDb As New NotesDatabase(tmpDb.Server , s + "\statistic.nsf") ' база лежит в той же папке на сервере что и текущая
Dim uidoc As NotesUIDocument
Dim dopserver As String
Dim doppath As String
dopserver = dopDb.Server
doppath = dopDb.FilePath
Dim Dopdoc As NotesDocument 
Set dopdoc = dopdb.CreateDocument
dopdoc.ParentUNID = g_Doc.CustomID(0)
dopdoc.form = "Имя_формы"
Call ws.EditDocument(False, dopdoc)
то во фрейм почему-то подгружается вид, который встроен в форму...

Ничего не понимаю =)
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
33
Dim dopDb As New NotesDatabase(tmpDb.Server , s + "\statistic.nsf") ' база лежит в той же папке на сервере что и текущая

tmpDb.Server - тут все хорошо? у мну были проблемы...не определялся сервер, пропиши руками...и посмотри
 
S

San4el

Неа не помогает даже через NotesName сервер прописывал... Берет правильную базу (на текущем сервере), а документ создает в той на которую я последний раз кликал (или на которой галочка стоит если реплики в стеке)...
 
K

Kee_Keekkenen

Dim db As New NotesDatabase(server,dbPath)
Dim doc As New NotesDocument(db)
Call doc.ReplaceItemValue("Form","fa_Document")
Dim ui As NotesUIDocument
Set ui = ws.EditDocument(True,doc,False)
открывает независимо от активной бд в стеке
 
S

San4el

Теперь подгружает не форму а вид, который встроен в форму, но правда вид из правильной базы
 

Medevic

Что это ? :)
Green Team
10.12.2004
3 334
1
BIT
4
Похоже я был неправ и документ надо сохранять перед открытием в фрейме. Иначе у меня ошибку выдает.
 
S

San4el

Сохранять не обязательно если через ComposeDoument, но этот метод помоему странно работает...
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!