• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Вопрос По Embedded View

  • Автор темы kostenn37
  • Дата начала
K

kostenn37

Есть база данных на ней форма, в форме этот Embedded view. В базе он это находится в разделе shared elements/subform. Как узнать с какой БД взят или на какую ссылается этот view? Можно ли какнибудь поменять БД источник?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
View находится на подформе, вот в ней надо смотреть.
2 варианта:
1. Вьюха из этой же базы
2. Если из другой, то в дизайнере изменить (перевыбрать)
 
K

kostenn37

View находится на подформе, вот в ней надо смотреть.
2 варианта:
1. Вьюха из этой же базы
2. Если из другой, то в дизайнере изменить (перевыбрать)
В том то и дело нельзя её перевыбирать, это вроде как рабочая конфигурация. Просто глючная до ужаса. Доков нет, приходится самому ковырятся.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
Вот источник иначе не поменять. Есть конечно варианты с xml, но они карежат само представление порой.
 
K

kostenn37

Я "Edit with DXL" выбрал там только алиас. Это походу и есть XML. Впрочем идея с заменой view подойдет, после некоторой подготовки и тестирования в песочнице.
Спасибо за ответы.
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
если вид вставлен копи пасте, то в разделе источники видов можно увидеть другие виды этой базы, ну а потом по списку видов уже искать из какой он базы вставлен
 
D

DamirAstana

Всем привет. Вопрос такой, можно ли программно сделать так, чтобы в форме документа выбирался источник для embedded view с другой базы? Например, сейчас я сам выбрал, что с такой то базы там отображать представление, но в будущем, вдруг придется менять базу, не хочется вручную перевыбирать представление.
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
Я скачал теперь не мучаюсь =)
 
T

ty3uk

ну я несколько по другому делаю. Приходиться писать много баз в которых встроенные представления на другие базы. При накате на клиента, всё "слетает" (ну как слетает, встроенное представление, по replicaID привязано к изначальной "базе источнику"). Решил достаточно просто, нашёл где-то инфу по тому как работать с DXL и на примере того кода, сделал у себя репарсер. При этом, все эмбеды выношу в отдельные подформы, потом, скриптом прелапачиваю DXL подформ, подменяя replicaid базы на нужный. После этого, главное, не забыть подписать подформы (т.к. цифровая подпись, у них, слетает).
При этом, подформы с эмбедами у меня имеют специальные названия. По названию между первым подчёркиванием и @-кой (см картинку) у меня находиться названия поля в профиле базы в котором храниться путь до базы из которой взято представление. Крайне удобно. Код написал ещё лет 5-ть назад (есть подозрение что на основе кода, который выше приведён).
Вообще рекомендую ознакомиться с DXL, очень полезная штука. Сильно пригождается, когда в дизайне надо, к примеру, переправить под 100-ню шаредных колонок (стиль поменять, клиент захотел шрифт "тахому"), ещё некоторое кол-во представлений и т.д. Также пригождается, когда надо "перепрыгнуть через голову", к примеру, сформировать RT поле с кнопками, табличками, ссылками и т.д. (ну это пригождается в таких моментах, когда нет возможности ХПагесы использовать, там, конечно, всё намного легче) :rolleyes:
 

Вложения

  • emb.png
    emb.png
    3,4 КБ · Просмотры: 204
D

DamirAstana

ну я несколько по другому делаю. Приходиться писать много баз в которых встроенные представления на другие базы. При накате на клиента, всё "слетает" (ну как слетает, встроенное представление, по replicaID привязано к изначальной "базе источнику"). Решил достаточно просто, нашёл где-то инфу по тому как работать с DXL и на примере того кода, сделал у себя репарсер. При этом, все эмбеды выношу в отдельные подформы, потом, скриптом прелапачиваю DXL подформ, подменяя replicaid базы на нужный. После этого, главное, не забыть подписать подформы (т.к. цифровая подпись, у них, слетает).
При этом, подформы с эмбедами у меня имеют специальные названия. По названию между первым подчёркиванием и @-кой (см картинку) у меня находиться названия поля в профиле базы в котором храниться путь до базы из которой взято представление. Крайне удобно. Код написал ещё лет 5-ть назад (есть подозрение что на основе кода, который выше приведён).
Вообще рекомендую ознакомиться с DXL, очень полезная штука. Сильно пригождается, когда в дизайне надо, к примеру, переправить под 100-ню шаредных колонок (стиль поменять, клиент захотел шрифт "тахому"), ещё некоторое кол-во представлений и т.д. Также пригождается, когда надо "перепрыгнуть через голову", к примеру, сформировать RT поле с кнопками, табличками, ссылками и т.д. (ну это пригождается в таких моментах, когда нет возможности ХПагесы использовать, там, конечно, всё намного легче) :rolleyes:
Эх, не ожидал что все так плачевно)))) Попробую сделать. А пример кода как работать с DXL есть?
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
180
Ty3uK
Нет, полностью открыт: форма, вьюха, 2 агента - всё богатство.
 
T

ty3uk

ну если хочется разбираться... тут вырезка из моего кода с "ускорителями"
Код:
Sub MAUX_rebuildView
''подфункция для MakeEmbView
On Error GoTo errline

' с помощью этого класса получим коллекцию подформ в текущей БД	
Dim subformCollection As NotesNoteCollection

' с помощью этих классов выполним конвейерную обработку DXL
Dim exporter As NotesDXLExporter
Dim xml As NotesDOMParser
Dim importer As NotesDXLImporter

' создаем экземпляр NotesNoteCollection в текущей базе
Set subformCollection=CUR.DB.CreateNoteCollection(False)
' отбираем в коллекцию только подформы
subformCollection.SelectSubforms=True
' генерируем коллекцию
Call subformCollection.BuildCollection

' если вдруг подформ в БД не оказалось - выходим
If subformCollection.Count=0 Then Exit Sub

' сначала объявляем парсер, чтобы при объявлении экспортера сразу его указать в качестве
' приёмника
Set xml=CUR.SES.CreateDOMParser
' после того, как DXL будет отпарсен, приступаем к поиску и замене нужного нам 
' параметра
On Event PostDOMParse From xml Call MAUX_postParse
' создаем экспортер, на входе - коллекция подформ, на выходе - парсер
Set exporter=CUR.SES.CreateDXLExporter(subformCollection,xml)
' создаем импортер, на входе - парсер, на выходе - текущая база
Set importer=CUR.SES.CreateDXLImporter(xml,CUR.DB)
' при импорте элементов дизайна - заменять уже существующие, а если не существует - 
' игнорировать
importer.DesignImportOption = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE

' поехали!
Call exporter.Process
Exit Sub
errline:
call er_error("",Nothing)
End 1	
End Sub




Sub MAUX_postParse(xml As NotesDOMParser)
''подфункция для MakeEmbView
On Error GoTo errline

' корень экспортированного DXL
Dim root As NotesDOMDocumentNode
' ориентироваться будем на несколько подформ
Dim subFormNodeList As NotesDOMNodeList
Dim subFormNode As NotesDOMElementNode
' этот элемент будет представлять внедренное представление
Dim embViewNode As NotesDOMElementNode

Dim SUBFORM_NAME As String
Dim zz_db_name As String
Dim t_var As Variant
Dim i As Integer

' получаем корень
Set root=xml.Document
' и ищем все подформы
Set subFormNodeList=root.GetElementsByTagName("subform")

For i=1 To subFormNodeList.NumberOfEntries
' перебираем по очереди каждую
Set subFormNode=subFormNodeList.GetItem(i)
' выясням ее имя
SUBFORM_NAME$=subFormNode.GetAttribute("name")

' если имя подформы совпадает с шаблоном - обрабатываем ее

zz_db_name=StrLeft(SUBFORM_NAME$,"@")
zz_db_name=StrRight(zz_db_name,"$$EmbView_")
If zz_db_name<>"" Then
t_var=CUR.PROFILE.Getitemvalue(zz_db_name)
If t_var(0)<>"" Then
Set MAUX_VIEW_target=New NotesDatabase("","")
If MAUX_VIEW_target.Open(CUR.SRV,t_var(0)) Then 
Set embViewNode=subFormNode.getElementsByTagName("embeddedview").getItem(1)
' и устанавливаем нужное значение для аттрибута database
Call embViewNode.SetAttribute("database",MAUX_VIEW_target.ReplicaID)
End If					
End If
End If


Next

'парсер не умеет автоматически подавать на выход, поэтому нужно его об этом попросить
Call xml.Serialize
Exit Sub
errline:
call er_error("",Nothing)
End 1
End Sub
 
Мы в соцсетях:

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