Перенос файлов с TS 3.x на bpm'online 7.x

Добрый день!

Сталкивался ли кто-нибудь в миграции данных с TS 3.X на bpm'online 7.x с вопросом переносов файлов? Удалось это реализовать в более-менее автоматическом режиме?

Спасибо

Нравится

10 комментариев

Здравствуйте.
Файлы и в той и в той системе хранятся в виде больших бинарных объектов. Процесс переноса не автоматизировали. Каждый случай рассматривается отдельно. Здесь можно абстрагироваться от продукта, в принципе. Есть две базы данных, содержащие некие сущности, которые нужно перенести. Возможно, в некоторой степени, поможет автоматизировать процесс утилита bdForge или аналогичная.

Понятно, что при доработках, да и без них есть нюансы. Но не каждый же раз изобретать велосипед для переноса tbl_Files?

Владимир, на текущий момент, такого инструмента в природе не существует и изобретение "велосипеда" не гарантируется в виду его незначительной востребованности.

Как я понимаю, в 3.X все файлы хранились в tbl_Files, а в bpm'online есть таблица File на каждую сущность (например, ContactFile).
А при этом есть еще таблица File. Что в ней записано?

В таблице, File bpm'online 7.x, не хранится ни какой информации (это наследие от bpm'online 5.x). Для Контактов файлы хранятся в таблице ContactFile, для Контрагентов в таблице AccountFile и т.д.

Пример простого переноса файлов из детали Файлы раздела Контакты (TS) в раздел Контакты ( bpm'online 7.x):

DECLARE @SupervisorBPMID UNIQUEIDENTIFIER = '410006E1-CA4E-4502-A9EC-E54D922D2C00';
DECLARE @SupervisorTSID UNIQUEIDENTIFIER = 'FFC4AABA-4882-41FC-8AC0-FC54D6DCFE93';
 
INSERT INTO [BPMonline_760_SalesOmnichannel_DemoInternal_Tereshchuk].[dbo].[ContactFile]
	([ContactId]
      ,[ProcessListeners]
      ,[Id]
      ,[CreatedOn]
      ,[CreatedById]
      ,[ModifiedOn]
      ,[ModifiedById]
      ,[Name]
      ,[Notes]
      --,[LockedById]
      --,[LockedOn]
      ,[Data]
      ,[TypeId]
      ,[Version]
      ,[Size]) 
SELECT 
	@SupervisorBPMID, 
	0, 
	NEWID(), 
	[CreatedOn], 
	@SupervisorBPMID/*CreatedByID*/, 
	[ModifiedOn], 
	@SupervisorBPMID/*ModifiedByID*/,
	[Link],
	ISNULL([Description], ''), 
	[FileData],
	case [ItemTypeID] 
		when '{39A5B367-4A7A-473E-8F74-26977CB6DB67}' then '529BC2F8-0EE0-DF11-971B-001D60E938C6'	-- Файл -> Файл
		when '{94A8A85B-7EAF-405C-900A-58DC0301EDC2}' then '539BC2F8-0EE0-DF11-971B-001D60E938C6'	-- Ссылка -> Ссылка
		when '{6D180D71-36C5-4278-8224-505B06559FD5}' then null										-- URL -> 
		when '{B48F1491-1460-4A18-A4A3-B13FD6EE5624}' then '549BC2F8-0EE0-DF11-971B-001D60E938C6'	-- Ссылка на папку -> Ссылка на объект
	end, 
	[Revision],
	[FileSize] 
FROM [TS_3.4.0.130_XRM_SD_Softkey_RUS].[dbo].[tbl_Files] WHERE [ID] IN (SELECT [FileID] FROM tbl_FileInContact WHERE [ContactID] = @SupervisorTSID)

Важно!
1. Идентификаторы пользователей Контактов TS, должны совпадать с идентификаторами пользователей Контактов bpm'online 7.x (в моем примере идентификаторы Supervisor не совпадают, и по этой причине привожу явно)
2. Любой импорт лучше выполнять через шлюзовые таблицы
3. В TS есть перечисление enm_FileTypes, а в bpm'online 7.x это таблица FileType, в запросе необходимо явно приводить типы (в моем примере это сделано через case)

Спасибо огромное за помощь!

И еще вопрос про опыт. Если перенос делать через Excel, то можно ли сохранить ID записей, чтобы использовать их для связывания?
А то однофамильцы, к которым надо привязать средства связи встречаются сплошь и рядом

Да, можно. Для этого необходимо вывести поле ID в раздел

Может быть, можно еще и связывать объекты (например, адрес с котнтактов) не по Имени-Фамилии контакта, а по его ID?

Да, можно. Для этого необходимо вывести поле ID записи и ID контакта в раздел

Показать все комментарии