Вопрос По Embedded View

kostenn37

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

savl

Well-Known Member
Lotus team
28.10.2011
2 126
163
#2
View находится на подформе, вот в ней надо смотреть.
2 варианта:
1. Вьюха из этой же базы
2. Если из другой, то в дизайнере изменить (перевыбрать)
 

kostenn37

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

savl

Well-Known Member
Lotus team
28.10.2011
2 126
163
#4
Вот источник иначе не поменять. Есть конечно варианты с xml, но они карежат само представление порой.
 

kostenn37

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

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 223
24
#6
если вид вставлен копи пасте, то в разделе источники видов можно увидеть другие виды этой базы, ну а потом по списку видов уже искать из какой он базы вставлен
 
26.05.2014
9
0
#7
Всем привет. Вопрос такой, можно ли программно сделать так, чтобы в форме документа выбирался источник для embedded view с другой базы? Например, сейчас я сам выбрал, что с такой то базы там отображать представление, но в будущем, вдруг придется менять базу, не хочется вручную перевыбирать представление.
 

ty3uk

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

Вложения

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

savl

Well-Known Member
Lotus team
28.10.2011
2 126
163
#12
Ty3uK
Нет, полностью открыт: форма, вьюха, 2 агента - всё богатство.
 

ty3uk

Well-Known Member
31.03.2008
170
0
#13
ну если хочется разбираться... тут вырезка из моего кода с "ускорителями"
Код:
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