У нас есть существующий PropertyType
с именем IsPublic
, который использует редактор свойств Umbraco.TrueFalse
.
Требования изменились, и теперь это значение должно быть представлено несколькими флажками, которые запускаются из Enum сЗначения Public
, Group1
, Group2
.
Это все работает, как и ожидалось, но с десятками тысяч документов мы хотим избавить наших редакторов контента от их ручного заполнения.
Сохраняя документ в Umbraco, я вижу, что он создаетзапись в таблице cmsPropertyData
со значением [ "Public", "Group1", "Group2" ]
в столбце dataNvarchar
.
Я написал скрипт для вставки строки в эту таблицу на основе значения исходного флага IsPublic
.
Однако после запуска этого при открытии документа в Umbraco изменения не отображаются.
Используемый для обновления скрипт:
DECLARE @HasPublicFlag NVARCHAR(50) = '[ "Public", "Group1", "Group2" ]'
DECLARE @NoPublicFlag NVARCHAR(50) = '[ "Group1", "Group2" ]'
DECLARE @feature INT = (SELECT nodeId FROM cmsContentType WHERE Alias = 'Feature')
--Existing IsPublic flag
DECLARE @featureIsPublic INT = (SELECT id FROM cmsPropertyType WHERE Alias = 'IsPublic' AND contentTypeId = @feature)
--New PropertyType
DECLARE @featureRoleRestriction INT = (SELECT id FROM cmsPropertyType WHERE Alias = 'documentRoleRestriction' AND contentTypeId = @page)
--Get feature document versions that are either newest version or published
;WITH FeatureDocumentsToUpdate AS
(
SELECT d.*, pd.dataInt
FROM cmsDocument d
JOIN cmsPropertyData pd ON pd.versionId = d.versionId
LEFT JOIN cmsPropertyData pd2 ON pd2.versionId = d.versionId AND pd2.propertytypeid = @featureRoleRestriction
WHERE (d.newest = 1 OR d.Published = 1) AND pd.propertytypeid = @featureIsPublic AND pd2.id IS NULL
)
--INSERT INTO cmsPropertyData based on value of existing flag
INSERT INTO cmsPropertyData(contentNodeId, versionId, propertytypeid, dataNvarchar)
SELECT s.nodeId, versionId, @featureRoleRestriction,
CASE WHEN s.dataInt = 0 THEN @NoPublicFlag ELSE @HasPublicFlag END AS NewValue
FROM FeatureDocumentsToUpdate s
Есть ли другая таблица(s) которые нужно обновить или есть ли лучший способ сделать это?