Вопрос По Embedded View

Тема в разделе "Lotus - Программирование", создана пользователем kostenn37, 11 мар 2013.

  1. kostenn37

    kostenn37 New Member

    Регистрация:
    11 мар 2013
    Сообщения:
    3
    Симпатии:
    0
    Есть база данных на ней форма, в форме этот Embedded view. В базе он это находится в разделе shared elements/subform. Как узнать с какой БД взят или на какую ссылается этот view? Можно ли какнибудь поменять БД источник?
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    View находится на подформе, вот в ней надо смотреть.
    2 варианта:
    1. Вьюха из этой же базы
    2. Если из другой, то в дизайнере изменить (перевыбрать)
     
  3. kostenn37

    kostenn37 New Member

    Регистрация:
    11 мар 2013
    Сообщения:
    3
    Симпатии:
    0
    В том то и дело нельзя её перевыбирать, это вроде как рабочая конфигурация. Просто глючная до ужаса. Доков нет, приходится самому ковырятся.
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Вот источник иначе не поменять. Есть конечно варианты с xml, но они карежат само представление порой.
     
  5. kostenn37

    kostenn37 New Member

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

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    если вид вставлен копи пасте, то в разделе источники видов можно увидеть другие виды этой базы, ну а потом по списку видов уже искать из какой он базы вставлен
     
  7. DamirAstana

    DamirAstana Member

    Регистрация:
    26 май 2014
    Сообщения:
    9
    Симпатии:
    0
    Всем привет. Вопрос такой, можно ли программно сделать так, чтобы в форме документа выбирался источник для embedded view с другой базы? Например, сейчас я сам выбрал, что с такой то базы там отображать представление, но в будущем, вдруг придется менять базу, не хочется вручную перевыбирать представление.
     
  8. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
  9. ty3uk

    ty3uk Well-Known Member

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

    Вложения:

    • emb.png
      emb.png
      Размер файла:
      5,4 КБ
      Просмотров:
      42
  10. DamirAstana

    DamirAstana Member

    Регистрация:
    26 май 2014
    Сообщения:
    9
    Симпатии:
    0
    Эх, не ожидал что все так плачевно)))) Попробую сделать. А пример кода как работать с DXL есть?
     
  11. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    а то что привёл savl там код закрыт?
     
  12. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    Ty3uK
    Нет, полностью открыт: форма, вьюха, 2 агента - всё богатство.
     
  13. ty3uk

    ty3uk Well-Known Member

    Регистрация:
    31 мар 2008
    Сообщения:
    169
    Симпатии:
    0
    ну если хочется разбираться... тут вырезка из моего кода с "ускорителями"
    Код (LotusScript):
    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
     
Загрузка...
Похожие Темы - Вопрос По Embedded
  1. ApplePen
    Ответов:
    0
    Просмотров:
    56
  2. gURaBA_N
    Ответов:
    3
    Просмотров:
    91
  3. kartaman
    Ответов:
    0
    Просмотров:
    126
  4. Peter
    Ответов:
    4
    Просмотров:
    519
  5. di0d_
    Ответов:
    1
    Просмотров:
    433

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