Установите карточку профиля DMS программно во время публикации в Sitecore.

Мне нужно прикрепить карточку профиля DMS к элементу sitecore во время публикации на основе набора критериев.

Как я могу это сделать?


person Jesper Hoff    schedule 26.05.2014    source источник


Ответы (1)


Я удалил свой первоначальный ответ и вместо этого опубликовал это.

Это грубый и готовый, полностью непроверенный класс, представляющий собой процессор, который нужно добавить в конвейер 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;
            }

        }
    }
}
person Martin Davies    schedule 26.05.2014
comment
Большое спасибо! Это решило это для меня. Я немного повозился с классом Sitecore.Analytics.Data.TrackingField, чтобы посмотреть, смогу ли я использовать существующий код вместо того, чтобы взламывать XML, но по какой-то причине его профили защищены от записи, поэтому ваш путь, кажется, один из них через :) - person Jesper Hoff; 27.05.2014