2017년 4월 14일 금요일

코드를 이용한 아이템 Publish 옵션 살펴보기

이번에는 프로그램 코드로 아이템을 페블리쉬하는 방법에 대하여 소개하겠다.

사이트코어는 Sitecore Publishing API를 이용하여, 다양한 Publishing 모드를 제공한다. 이번에는 각각의 Publishing 모드가 어떤 상황에서 적절히 쓰여야할지 알아보도록 하겠다.
  1. 새로운 "Publisher" 오브젝트를 이용하여 아이템을 Publish하는 방법

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    Sitecore.Publishing.PublishOptions publishOptions =
      new Sitecore.Publishing.PublishOptions(item.Database,
                                             Database.GetDatabase("web"),
                                             Sitecore.Publishing.PublishMode.SingleItem,
                                             item.Language,
                                             System.DateTime.Now);
    Sitecore.Publishing.Publisher publisher = new Sitecore.Publishing.Publisher(publishOptions);
    publisher.Options.RootItem = item;
    publisher.Options.Deep = true;
    var publishResult = publisher.PublishWithResult();
    
    • 장점
      • 프로세스가 끝나자마, 아이템을 즉시 Publish한다.
      • "PublishWithResult()" 메써드를 사용하여 Publish가 성공적으로 끝났는지 혹시 실패되었는지 확인할수가 있다.
    • 단점
      • "Job Manager"를 사용하지 않으므로써, 퍼블리쉬 진행상황을 "Job Viewer"를 통하여 확인할 수가 없다.
    • 언제 적절하게 사용되어질수 있나?
      • 코드에서 마스터 데이타베이스에 새로운 아이템을 생성하거나 기존 아이템을 수정하고, 즉시 아이템을 Publish해야하는 상활일 경우.
  2. "PublishPipeline"을 사용하는 방법

    1
    2
    PublishContext publishContext = PublishManager.CreatePublishContext(publishOptions);
    var publishResult = PublishPipeline.Run(publishContext);
    
    • 장점
      • Pipeline에서 곧바로 publishing을 진행하기 때문에 이전 옵션보다 신속하다
    • 단점
      • 사용하는데 있어서 복잡하다
      • 메뉴얼 세팅없이는 진행상황을 보고하지 않는다.
      • 대부분의 Sitecore Configuration을 일일히 체크한다.
    • 언제 적절하게 사용되어질수 있나?
      • 개인적으로 이 방범은 추천하지 않는다. 왜냐하면 페블리쉬된 아이템을 Versioning 하는데에 문제가 생길수가 있다.
  3. "Publishing Queue"를 이용하는 방법

    1
    Sitecore.Publishing.PublishManager.AddToPublishQueue(item, ItemUpdateType.Created);
    
    • 장점
      • "PublishingQueue table"에 publishing 목록을 신속하게 추가할수가있다.
      • 중복되어진 목록은 "Incremental Publish" 모드를 통하여 자동으로 제외한다.
    • 단점
      • 만약 Content Editor에서 아이템을 퍼블리쉬할 경우, Incremental Publish 옵션을 선택해야지만 Queue에 목록되어진 아이템이 퍼블리쉬 될수가 있다.
    • 언제 적절하게 사용되어질수 있나?
      • 많은 아이템의 업데이트가 자주가 일어날 경우, 이 옵션이 사용되어질수있다.
      • 개인적으로 이 옵션을 메인 publishing 모드로 사용할 경우, 기존의 메뉴얼 퍼블리쉬 기능은 숨겨두고, Publishing Agent를 통하여 아이템을 퍼블리쉬할수 있도록 사용자에게 권하는것이 좋다.
      • *현재 진행되고 있는 프로젝트에서 Workflow와 데이타소스들을 일괄적으로 업데이트하고 퍼블리쉬하는데 있어서 이 옵션이 사용되었다.
  4. "PublishManager"를 사용하여 Publish 하는 방법

    1
    2
    3
    4
    Database master = Sitecore.Configuration.Factory.GetDatabase("master");
    Database[] targetDBs = new Database[] { Sitecore.Configuration.Factory.GetDatabase("web") };
    Language[] languages = new Language[] { Sitecore.Data.Managers.LanguageManager.GetLanguage("en") };
    Sitecore.Publishing.PublishManager.PublishSmart(master, targetDBs, languages);
    • 장점
      • Sitecore UI를 통하여 아이테을 퍼블리쉬할시, 사용되는 기본 기능이다.
      • Sitecore 로그에 퍼블리쉬 상황을 등록할수가 있으며, 그 등록 기능은 "JobManager"를 통하여 작동된다.
    • 단점
      • 비동기적으로 퍼블리쉬를 수행하여 신속하지만, 프로그램 코더에서는 현지 진행되고 있는 아이템이 잘 퍼블리쉬되고있는지 또는 아닌지를 모니터해야한다.




2017년 4월 13일 목요일

RichText Editor 태그 변경 수정하기 - Telerik's RadEditor

사이트코어에서 에디터툴로 사용되고 있는 Telerik's RadEditor를 수정하고 있는중 Jason's 블로그에서 좋은 정보를 찾았다.

RichText Editor의 에디터를 오픈하고 HTML탭에서 <b> 와 <i> 태그를 사용하면, 수정된 HTML을 저장하는 중 <b>와 <i> 태그를 <strong>, 그리고 <em> 태그로 변경을 한다.

Front-End 개발자와 프로젝트를 진행하는 중 디자이너들은 Bootstrap 아이콘을 <b>와 <i> 태그를 사용하여야 하며, RichText Editor의 필터링에 의해 많은 제약을 받는다.

아래의 코드를 <b> 와 <i>태그의 변경을 예외로 설정 할수가 있다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class RichTextEditorCustomConfiguration: Sitecore.Shell.Controls.RichTextEditor.EditorConfiguration
{
    /// <summary>
    /// Initializes a new instance of the <see cref="RichTextEditorCustomConfiguration"/> class.
    /// </summary>
    /// <param name="profile">The profile.</param>
    public RichTextEditorCustomConfiguration(Item profile)
        : base(profile)
    {
    }

    /// <summary>
    /// Setup editor filters. 
    /// </summary>
    protected override void SetupFilters()
    {
        //Disable the automatic conversion of <i> and <b> tags to <em> and <strong> for icon-* classes 
        this.Editor.DisableFilter(EditorFilters.FixUlBoldItalic);
        this.Editor.DisableFilter(EditorFilters.MozEmStrong);
        this.Editor.EnableFilter(EditorFilters.IndentHTMLContent);
        base.SetupFilters();
    }
}

아래의 .config파일을 /App_Config/Include/ 폴더에 저장하면 된다.

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <settings>
      <setting name="HtmlEditor.DefaultConfigurationType" value="MyProject.RichTextEditorCustomConfiguration, MyProject"/>
    </settings>
  </sitecore>
</configuration>