Мне нужно прикрепить карточку профиля DMS к элементу sitecore во время публикации на основе набора критериев.
Как я могу это сделать?
Мне нужно прикрепить карточку профиля DMS к элементу sitecore во время публикации на основе набора критериев.
Как я могу это сделать?
Я удалил свой первоначальный ответ и вместо этого опубликовал это.
Это грубый и готовый, полностью непроверенный класс, представляющий собой процессор, который нужно добавить в конвейер publishItem
. (См. Перехватывать публикацию элементов с помощью Sitecore ASP.NET CMS)
Он основан на коде, найденном в проекте Sitecore Powershell, который обеспечивает аналогичный результат: nofollow">Console / PowerShellIntegrations / Commandlets / Analytics / SetAnalyticsProfileCardCommand.cs
Обратите внимание, что вам придется добавить логику, которая выбирает, какую карточку профиля использовать.
using Sitecore.Data;
using Sitecore.Data.Items;
using Sitecore.Publishing.Pipelines.PublishItem;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace SC7Test.Business.Processors
{
class SetProfileCard : PublishItemProcessor
{
public override void Process(PublishItemContext context)
{
var db = Sitecore.Configuration.Factory.GetDatabase("master");
var publishItem = db.GetItem(context.ItemId);
// Add your logic here.
var profileCardItem = db.GetItem("One of several profile card item ID's based on your selection logic");
var profileCardValue = profileCardItem["Profile Card Value"];
var doc = new XmlDocument();
doc.LoadXml(profileCardValue);
if (doc.DocumentElement != null && doc.GetElementsByTagName("profile").Count > 0 &&
doc.GetElementsByTagName("profile")[0] != null)
{
XmlNode xmlNode = doc.GetElementsByTagName("profile")[0];
if (xmlNode.Attributes != null)
{
XmlAttribute presetAttribute = xmlNode.Attributes["presets"] ?? doc.CreateAttribute("presets");
presetAttribute.Value = profileCardItem.Name.ToLower() + "|100||";
xmlNode.Attributes.Append(presetAttribute);
}
}
using (new EditContext(publishItem, false, false))
{
publishItem["__Tracking"] = doc.InnerXml;
}
}
}
}