пятница, 18 сентября 2009 г.

Замена стандартных карточек

Карточки в DocsVision состоят из двух сущностей: данных, структура которых описана схемой, и программного компонента, который реализует логику. Программный компонент вызывается при открытии карточки по clsid - идентификатору класса.
Если просуммировать эти факты, то возникает вопрос - можно ли подменить программный компонент стандартной карточки, которая поставляется, например, в Делопроизводстве? Ответ - да. Например, можно заменить справочник Контрагентов, реализовав свою собственную логику и интерфейс, оставив стандартную схему, что не приведет к нарушению работоспособности других карточек Делопроизводства.


 Так может выглядеть вариант справочника Контрагентов

Есть одна сложность. Как я уже описал, компонент вызывается по clsid, который находится в схеме карточки. При создании своего справочника нужно clsid его компонента записать в схему справочника Контрагентов и загрузить на сервер. Но XML схема, кроме сервера находится в компоненте библиотеки (*.dll) - и там произвести замену нельзя.
В этом случае лучше поступить так - заменить clsid своего справочника на clsid оригинального справочника Контрагентов. В этом случае, при открытии будет показываться разработанный вами компонент.

5 комментариев:

  1. Так всеже до конца не ясно, как сделать такую подмену. Допустим, я разработал компонент (пустую форму для теста). Где мне нужно подменить clsid, чтобы вместо справочника контрагентов появлялась моя форма.
    Аналогичный вопрос, можно ли заменить представление папки своим компонентом???

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

    ОтветитьУдалить
  3. Обманул, надо заменить не в схеме карточки, а как раз наоборот в вашем компоненте...
    В VisualStudio 2005,2008,2010 это можно сделать в свойствах проекта (не помню точно где)

    ОтветитьУдалить
  4. Т.е. в ОС будет существовать два компонента с одинаковым clsid?

    ОтветитьУдалить
  5. Ненужный компонент необходимо будет разрегистрировать через regsvr32 /u

    ОтветитьУдалить