* 1004.* Расширяя его указания, я создал несколько сценариев MS SQL, чтобы помочь выполнить некоторые тяжелые работы.
По сути, нам нужно создать структуру каталогов для файлов в папке ADAM, и они должныбыть названы специально, чтобы они правильно ассоциировались с каждым элементом контента.Сценарии опираются на дополнительную таблицу, в которой хранится информация об импортируемых файлах, чтобы их можно было сопоставить с элементами содержимого, ранее импортированными в 2sxc.
Вот сценарий SQL, который можно изменять на основена ваши нужды:
-- Create function to return content items guid converted to base64
CREATE FUNCTION dbo.import2sxc_BinaryToBase64
(
@bin VARBINARY(MAX)
)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @Base64 VARCHAR(MAX)
SET @Base64 = CAST(N'' AS XML).value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))', 'VARCHAR(MAX)')
RETURN @Base64
END
GO
-- Create function to compress guid for 2sxc
CREATE FUNCTION dbo.import2sxc_GuidCompress
(
@guidStr VARCHAR(36)
)
RETURNS VARCHAR(22)
AS
BEGIN
declare @guid uniqueidentifier = @guidStr
RETURN Substring(Replace(Replace(dbo.import2sxc_BinaryToBase64(@guid), '+', '-'),'/', '_'), 1, 22)
END
GO
-- Define the app name
DECLARE @appName nvarchar(255) = 'MyAppName'
-- Define the name of the content type
DECLARE @contentType nvarchar(150) = 'MyContentType'
-- Set the path for the adam files for the app
DECLARE @adamPath nvarchar(max) = 'c:\path\to\Portals\x\adam'
-- For importing images, get the name of the field that holds the id of the record from the original system
DECLARE @idFieldname nvarchar(50) = 'OriginalId'
-- Get the attribute set id for the content item
DECLARE @attributeSetId int
SELECT @attributeSetId = AttributeSetID FROM dbo.ToSIC_EAV_AttributeSets WHERE Name = @contentType
-- Get the attribute id
DECLARE @attributeId int
SELECT @attributeId = a.AttributeID
FROM dbo.ToSIC_EAV_Attributes a
INNER JOIN dbo.ToSIC_EAV_AttributesInSets ais on a.AttributeID = ais.AttributeID
WHERE ais.AttributeSetID = @attributeSetId AND StaticName = @idFieldname
-- Get all the content items, along with the compressed guid for the folder name, and generate the commands to create the direcctories
SELECT v.Value as SourceId, EntityGUID, dbo.import2sxc_GuidCompress(EntityGUID) as FolderName, 'mkdir "' + @adamPath + '\' + @appName + '\' + dbo.import2sxc_GuidCompress(EntityGUID) + '\Photos"' as cmdMkdir
FROM ToSIC_EAV_Entities e
INNER JOIN ToSIC_EAV_Values v ON e.EntityID = v.EntityID AND v.AttributeID = @attributeId
WHERE AttributeSetID = @attributeSetId
-- Create command to move files into the new folders
SELECT 'copy "' + f.Filename + '" "' + @adamPath + '\' + @appName + '\' + dbo.import2sxc_GuidCompress(EntityGUID) + '\Photos"' as cmdMove
FROM ToSIC_EAV_Entities e
INNER JOIN ToSIC_EAV_Values v ON e.EntityID = v.EntityID AND v.AttributeID = @attributeId
INNER JOIN import2sxc_Files f on v.Value = f.OriginalId
WHERE AttributeSetID = @attributeSetId
DROP FUNCTION dbo.import2sxc_BinaryToBase64
DROP FUNCTION dbo.import2sxc_GuidCompress
После запуска сценария у вас будут столбцы с именами cmdMkdir и cmdMove, которые представляют собой сценарии командной строки, которые можно запускать для создания папок и перемещения файлов в них по мере необходимости.
Когда элементы содержимого были импортированы, и были запущены сценарии для создания папок и перемещения файлов, необходимо очистить кэш сервера в DNN, а также перейти к активам сайта (файловому менеджеру) в DNN иобновите папку и подпапки ADAM.
После этого должны появиться все файлы в библиотеке для ваших элементов содержимого.