Импорт содержимого элементов 2SXC - библиотеки гиперссылок - PullRequest
0 голосов
/ 22 февраля 2019

Я просмотрел базу данных наилучшим образом, но не могу найти способ импортировать файлы в Hyperlink-Library для каждого элемента контента.Я вижу, что 2sxc использует таблицу файлов и папок DNN, но я не вижу, как поле типа контента 2sxc ссылается на папку и файлы.

По сути, у меня есть около 400+ элементов контента для импорта и около 6000+связанные файлы, которые необходимо импортировать.

Я полагаю, что, вероятно, невозможно импортировать файлы непосредственно из файла XML, но возможно ли написать сценарий sql для связи файлов с элементом содержимого?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Благодаря @iJungleBoy я смог создать процесс, который может помочь автоматизировать импорт библиотек файлов в элементы содержимого 2sxc.

Импорт элементов содержимого следует инструкциям * 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.

После этого должны появиться все файлы в библиотеке для ваших элементов содержимого.

0 голосов
/ 22 февраля 2019

Есть способ, но это немного секрет:)

Связывание изображений с элементом (и правым полем) происходит автоматически, когда элементы находятся в папке, выделенной для этого поля в ADAM.,Схема ок.как этот [root root] / adam / [app-name] / [entity-guid22] / [field-name]

Создайте одну запись вручную и проверьте, что вы видите.Таким образом, вы можете в основном импортировать данные, используя импорт Excel / XML https://2sxc.org/en/Learn/Import-Export, и тогда вашей самой большой задачей будет создание guid22.Это более компактная форма guid, которая берет длинный guid и перекодирует его, используя безопасные для URL символы.

Theres команда в 2sxc, которая делает это, в основном ToSic.Eav.Identity.Mapper.GuidCompress(original guid)

см. Также https://github.com/2sic/eav-server/blob/05d79bcb80c109d1ceb8422875a6ff7faa34ff4f/ToSic.Eav.Core/Identity/Mapper.cs

...