При работе с DIRECTUM может возникать необходимость подготовки образа базы данных и не всегда нужна полная копия со всеми документами, задачами и т.д. Очистка базы - невероятно долгий и трудоёмкий процесс, если делать это вручную, для его автоматизации и было разработано специальное решение.
Решаемые задачи:
Три режима работы:
Наиболее часто используемый. При выборе данного режима пользователь в диалоге выбирает категории объектов системы (задачи, документы и записи справочников), которые необходимо удалить.
Если выбран пункт «Удаление записей справочника», то пользователь может занести в табличную часть справочники, записи которых не надо удалять.
В данном случае удалятся все записи из справочников, которые не были занесены в таблицу, а также удаляет историю изменений записей справочника. Если не нужно удалять только системные справочники, то пользователь может воспользоваться кнопкой, которая заполнит таблицу ими.
Удаление происходит в асинхронном режиме, с помощью запуска серверных событий. Как только удаление завершено, пользователю отправляется уведомление, в котором содержится информация о результатах работы
.
ПРИМЕЧАНИЕ. Для удаления каждой категории объектов разработаны отдельные сценарии на случай, если версия DIRECTUM не поддерживает прикладные диалоги.
В данном сценарии использования решения, объект из системы не удаляются. Изменяются только значения реквизитов справочника.
При выборе этого режима будет показано диалоговое окно, в котором пользователю потребуется указать записи каких справочников и какие реквизиты необходимо очистить, а также выбрать режим.
Если необходимо заменить все значения реквизита на любое другое нейтральное значение, например сумму договора на 0, то можно воспользоваться первым вариантов. Для этого необходимо выбрать реквизит справочника и новое значение. После выполнения действия все старые значения реквизита заменятся на новые.
Если необходимо убрать все значения из реквизита или убрать какое-нибудь определённой значение, то можно воспользоваться другим вариантом. Для этого также необходимо указать реквизит и его значение, но на этот раз значения просто очистятся и не заменятся на новые.
Иногда можно столкнуться с ситуацией, в которой необходимо удалить одну единственную запись справочника. Если на запись справочника ссылаются другие объекты системы, то удалить её будет проблематично, т.к. необходимо удалить связи между записями или удалить сами записи.
При удалении записи нет необходимости удалять и все связанные записи, а тем более записи, которые напрямую на связаны с удаляемой записью. Учитывая то, что такая цепочка может быть огромной, нанести вред системе и затрачиваемое время на выполнение этой операции, поэтому проще не удалять связанные записи, а только удалять связи между записями.
Как до, так и после удаления записи пользователь может просмотреть отчёт, который будет содержать полная информация о том какие объекты системы затронет или затронуло удаление.
Каких возможностей не хватает вам? Предлагаю обсудить в комментариях.
Обсудите реализацию с экспертом Directum
Комментарии (2)
Если образ базы данных готовится для обособленного использования, то может пригодиться также:
1) Корректировка настроек системы (данных dbo.xini, значений констант, настроек коннекторов,...);
2) Обезличивания персональных данных путём замены на случайные значения по шаблону с корректировкой истории.
Вот только делать я бы это рекомендовал напрямую через SQL, без использования серверных событий (именно потому, что долго + для развёрнутой из бэкапа копии БД не требуется подключать её к службам, активировать,...)
Как правило, для разработчика нужна обезличенная база, но с документами все версии у которых не содержат содержимого. Исключение - для шаблонов, макетов и обложек. "Пустые" документы нужны для тестирования/доработки карточек документов. Еще одна требуемая возможность - это обезличивание текстов задач (задачи нужны для тестирования их после перехода на новую версию и построения многих отчетов).
-- Сохранить во временной таблице макеты, шаблоны и обложки
declare @DocumentModelsCardTypeID int
declare @TemplatesCardTypeID int
select @DocumentModelsCardTypeID = TypeID from SBEDocTypes where Code = 'DocumentModels'
select @TemplatesCardTypeID = TypeID from SBEDocTypes where Code = 'ШАД'
select * into tmpSBEDocVer
from SBEDocVer
where (TypeID = @DocumentModelsCardTypeID)
or (TypeID = @TemplatesCardTypeID)
or EDocID in (select XRecID from SBEDoc where Name like 'Обложка папки%')
Это я к тому, что "Решение для очистки базы данных" актуально и решалась всяко разно и не один раз.
И еще, лучше для этих целей создать отдельное приложение, которое имело бы возможности (как написал Артем Сунцов) "готовить" копию базы к работе вне рабочей среды Заказчика (корректировка значений в dbo.xini, значений констант).
Авторизуйтесь, чтобы написать комментарий