2016년 12월 23일 금요일

Sitecore 8.2의 xEditor 새로운 기능

사이트코어는 이번 8.2 버전에서 xEditor에 새로운 기능 몇몇을 추가하였다. 중요하며 아주 유용한 기능을 살펴보겠다.
  1. xEditor에서 어떤 페이지에서 선택되어진 렌더링 아이템을 사용하고 있는지 알수있다.



  2. 이전 버전에서는 오직 페이지 아이템만이 Workflow의 기능을 xEditor에서 사용할수 있었지만, 8.2부터는 렌더링 아이템에 적용되어진 Workflow를 개별적으로 사용할 수가 있다.



  3. "Presentation" 탬을 통하여, "Shared Layout" 과 "Final Layout"을 비교할수 있으며, 해당 페이지와 연관된 페이지 또는 아이템의 목록을 볼 수가 있다.



  4. "Versions" 탭을 통하여, 현재 페이지에 새로운 버전을 추가하거나 다른 버전으로 Roll-Back을 할 수가 있다.




2016년 12월 2일 금요일

사이트코어 xEditor에 휴지통 버튼 만들기

사이트코어 사용자 제한 설정에 있어서, 관리자 및 플랫폼 Provider는 사용자가 Content Editor 또는 xEditor 를 제한적으로 사용하도록 설정할수있다.

하나의 예를 들면, 사이트코어 사용자가 컨텐츠 관리(수정)을 하는데 있어서, 아이템을 삭제하고 또 다시 복구해야하는 경우가 간혹 생기는데, 이럴 경우 사용자는 Content Editor 또는 Dashboard로 이동 후, Recycle Bin (휴지통) 팝업 창을 열어야한다. 이런 불편함을 덜기 위하여, 이번 포스팅에서는 xEditor에 Recycle Bin 버턴을 만들어 xEditor에서 바로 Recycle Bin 창을 오픈할 수 있도록 해보겠다.

먼저, 대부분의 사이트코어 버턴은 'Sitecore.Shell.Framework.Commands.Command' 클래스를 통하여 명령어가 실행된다. 새로운 Visual Studio 클래스 프로젝트를 생성하여 'OpenRecycleBin' 이라는 클래스를 만들어 준다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
namespace MySitecore.Commands
{
    // Recycle Bin Command
    public class OpenRecycleBin : Sitecore.Shell.Framework.Commands.Command
    {
        public override void Execute(Sitecore.Shell.Framework.Commands.CommandContext context)
        {
            Sitecore.Shell.Framework.Windows.RunShortcut(Sitecore.Data.ID.Parse("{A2CF861E-77AB-4317-A72B-2F33D942520E}"));
        }
    }
}

'RunShortcut' method에서 아이템 ID는 아래의 사진처럼 'core' 데이타베이스의 Shortcut 아이템 ID 이다.



해당 프로젝트를 Build/Compile 한 후, 'MySitecore.Commands.dll' 파일을 Sitecore의 bin 폴더에 저장한 후, '/Website/App_Config/' 폴더에서 'Commands.config' 파일에 새로운 Command를 아래처럼 추가한다.


<command name="contenteditor:openrecyclebin" type="MySitecore.Commands.openrecyclebin, MySitecore.Commands"/>

이젠, 마지막으로 'Core' 데이타베이스에서 xEditor 상단 툴바에 들어가 버턴을 만들어 보기로 하자.

사이트코어 CMS에서 'Core' DB로 변경 후, 원하는 섹션에 새로운 버튼 아이템을 만든다. 저의 경우 선택한 경로는 "Advanced" 탭의 제일 마지막 버턴으로 정하였다.



My New Item 이라는 Chunk 아이템 (/sitecore/templates/System/Ribbon/Chunk) 아래, 'Recycle  Bin' 이라는 Large Button을 만들고, 가장 중요한 'Click' 필드에 사진처럼 기존에 만들었던 명령어 ('contenteditor:openrecyclebin')를 넣어준다.

이 모든것이 완료되고 나면, xEditor에서 새롭게 만들어진 Recycle Bin 버턴을 볼수 있다.





2016년 11월 29일 화요일

Sitecore 패키지 설치 에러

최근 Sitecore Package Wizard를 통하여 패키지를 만든 후, Install 하는 과정에서 "The File exists" 라는 오류가 발생하였다.

There was an Exception that occured on sitecore page:/sitecore/shell/applications/tools/installer/installationwizard

Exception: Exception of type 'System.Web.HttpUnhandledException' was thrown.

Stack:
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)


Inner Exception:
Message: The file exists.
Stack:
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Path.InternalGetTempFileName(Boolean checkHost)
at Sitecore.Install.Zip.PackageReader.Populate(ISink`1 sink)
at Sitecore.Shell.Applications.Install.Dialogs.InstallPackage.InstallPackageForm.LoadPackage()
at Sitecore.Shell.Applications.Install.Dialogs.InstallPackage.InstallPackageForm.ActivePageChanging(String page, String& newpage)
at Sitecore.Web.UI.Pages.WizardForm.set_Active(String value)


URL Scope:
No params found

Form Scope:
=
__PARAMETERS=
__EVENTTARGET=NextButton
__EVENTARGUMENT=
__SOURCE=NextButton
__EVENTTYPE=click

패키지를 업로드 한 후, "Next" 버튼을 누른면 오류가 발생하며, 문제의 원인은 "C:\Windows\Temp" 부터 발생한다. "Temp" 폴더에 65,000개 이상의 파일이 존재할경우 이런 오류가 생기면, 불필요한 파일을 삭제하면 문제는 해결된다.

이런 문제가 지속적으로 발생한다면, 윈도우 스케쥴러를 통하여 주기적으로 해당폴더의 파일을 자동적으로 삭제 할 수가 있다.


2016년 9월 28일 수요일

Sitecore Query.MaxItems - 제한된 Query 늘이기

이전에 Dynamic Placeholder를 사용하는법에 대하여 포스트를 한적이 있다.
Placeholder는 컨텐츠를 제한되어진 범위내에 사용할수있도록 해주어, 사용자가 컨텐츠를 손쉽게 업데이트할수 있도록 유용하게 쓰인다.

하지만, 큰 프로젝트를 작업하는데 있어서 많은 Placeholder Setting Item이 필요하고, 이것을 일일히 템플릿 Layout에 적용할때는 상당한 시간이 걸린다. Sitecore는 Query Performance를 최소화하기 위하여 한번에 Sitecore Query API를 리딩할수있는 아이템을 수 (Query.MaxItems)를 "100"으로 제한해두며, 해당 정보는 Placeholder Cache에 저장한다. 이로 인하여, Placeholder Setting Item의 수가 100 이상이면, 해당 Request는 Placeholder Cache에 저장하지 않는다.

sitecore.config 파일에서 `<setting name="Query.MaxItems" value="100"/>`의 value 값을 변경하면 쉽게 문제를 해결할수가 있다.

해당 Placeholder에 렌더링 아이템을 추가해 놓았지만, 등록된 아이템을 볼수가 없다.


Value 값을 "1000"으로 업데이트 한 후, 등록되어진 아이템을 Placeholder에서 볼수가 있다.


1
<setting name="Query.MaxItems" value="1000"/>


Rendering Item 정보 가져오기

새로운 Rendering 아이템을 만들다 보면, 페이지 아이템에 적용되어져있는 Control을 찾아야 하는경우가 있다. 이럴경우 Fast Query 또는 LINQ를 통하여 레이아웃에 적용되어진 모든 Rendering 아이템 정보를 가져올수가 있다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 현재 페이지에 적용되어진 모든 렌더링 아이템 가져오기
IEnumerable<RenderingReference> renderings = Context.Item.Visualization.GetRenderings(Context.Device, false);
               
// 해당 렌더링 아이템 아이디를 사용하고 있는 모든 렌더링 아이템 정보 가져오기
renderings = renderings.Where(x => x.RenderingID == RenderingContext.Current.Rendering.RenderingItem.ID);
               
// 해당 Placeholder에 사용되고 있는 모든 렌더링 아이템정보 가져오기
renderings = renderings.Where(x => x.Placeholder.TrimStart('/') == RenderingContext.Current.Rendering.Placeholder.TrimStart('/'));

// 현재 렌더링아이템의 인덱스 값 가져오기
var index = renderings.ToList().FindIndex(x => new Guid(x.UniqueId) == RenderingContext.Current.Rendering.UniqueId);


2016년 9월 5일 월요일

사이트코어 - Chrome Extension - URL Replacement for Sitecore

사이트코어를 사용하다보면, 현재 Publish 되어진 사이트(페이지) 사이트코어 페이지 아이템을 비교해야할 경우가 생긴다. 그럴경우, Content Editor Quick Info 섹션을 통하여 아이템 경로를 확인한 후, 새로운 또는 윈도우를 오픈하여 해야 해당 페이지 아이템을 라이브 URL 경로르 입력해야한다

물론
, 사이트코어의 .config 파일 설정을 통하여 "Preview"  클릭하였을시 "Web" DB 포인팅하도록 할수는 있지만, Front-End Developer 입장에서는 시스템 또는 사이트코어 관리자에게 설정을 요청하여야 한다. 물론, 설정하는 것에는 어려움이 없으나, .config 파일의 설정은 사이트코어 시스템 전체에 적용이 되므로, 결정을 내리는데 있어서는 약간 까다로운(?) 부분이 있다.

이런
불편함을 덜어내기 위하여 최근에 "URL Replacement"라는 Chrome Extension 만들었다. 사용법 설명은YouTube 또는 Option 설정페이지에 있으므로, 참고할 있다.


Chrome Extension - URL Replacement


2016년 7월 31일 일요일

사이트코어에 새로운 아이콘 추가하기

#Icon #NewIcon #사이트코어 #아이콘

 이번에는 Sitecore 아이콘에 대하여 설명하여 보겠다.

사이트코어에서 아이템의 타입을 쉬게 표시하기 위하여, 아이콘을 사용한다. Content Editor 상단의 툴바에서 "Configuration" 탭을 선택하면, Icon 메뉴가 있다. Icon 메뉴를 선택하면 최근 사용한 Icon 목록과 카테코리별로 나눠져있는 Icon리스트를 볼수있다.

  • Applications 
  • Business 
  • Controls 
  • Core 1 
  • Core 2 
  • Core 3 
  • Database 
  • Flags 
  • Imaging
  • Multimedia
  • Network 
  • Other 
  • People 
  • Software 
  • Word Processing

사이트코어는 기본적으로 .config 파일에서 "UseZippedIcons"을 "true" 세팅이 되어져있어, "/WebSite/Sitecore/Shell/Themes/Standard" ZIP file 형식으로 카테고리별로 저장이 되어있다. 만약, 새로운 아이템을 추가하고 싶다면 해당 카테고리를 unzip 하고, 새로운 아이콘을 사이즈별로 저장을 한다.

  • 16x16
  • 24x24
  • 32x32
  • 48x48
  • 128x128
기본적인 아이콘의 경로는 "/ZipFileName/Size/IconName.png" 이다.

2016년 6월 8일 수요일

EXM - 새로 추가되어진 리스트의 잠겨진 상태

#Sitecore #사이트코어 #EXM

Sitecore에서 EXM (Email Experience Manager)를 통하여 이메일 캠페인을 만들수가 있다. EXM를 설치 후, 새로운 컨택트 리스트를 추가하다보면 아래처럼 "현재 리스트가 잠겨져있어, 모든정보가 업데이트될때까지 현재 리스트를 사용할수 없습니다." 라고 메세지가 나온다. 현재 추가된 리스트를 보면 "Status"란에 "Building"이라는 상태를 볼수있는데, 이것은 Sitecore가 새로운 리스트를 데이타베이스에 만들고 있다는 것이고, 약 15분에서 30분 (시스템 및 네트워크에 따라 틀림) 기다리다보면, 자동적으로 "Building" 상태가 없어진것을 볼수가 있다.

Sitecore EXM - All lists are locked

- Sitecore 8.0에서 EXM 3.0버전으로 테스트함.

Hyperlink Manager의 URL경로 가져오기

#사이트코어 #RichTextEditor #Telerik

RichText 에디터를 사용하다보면, Telerik을 통하여 Hyperlink를 설정할수가 있다. 이 경우, 해당 URL 필드에 미디어 파일을 선택할수가 있는데, 미디어를 선택하고 나면, 아이템의 Physical file경로가 아닌 "/~/media/[ShortID].ashx"로 변경된다. 물론, 이 세팅은 .config 파일에서 변경이 가능하지만, 시스템적으로 고유의 ID를 통하여 파일을 렌더링하는것이 더 효율적이다라고 할수있다.

GetMediaURI 과 GetItemURL 메서드를 이용하여, 파일의 경로를 찾아낼수있지만, 추가적으로 선택된어진 아이템의 "/~/media/" + item.ID.ToShortID() + ".ashx" 형식으로 정보를 가져와야하므로, 번거로움이 있다. 이럴경우, `MediaUrlOptions()`를 통하여 URL필드의 값을 쉽게 가져올수가 있다.


var mPath = new MediaUrlOptions();

// UseItemPath는 아이템을 경로를 통하여 나타낼것인지, 
// 아니면 아이디를 통하여 나타낼것인지 미리 설정을 할수가 있다.
mPath.UseItemPath = false;

var url = Sitecore.Resources.Media.MediaManager.GetMediaUrl(imageField.MediaItem, mPath);

2016년 5월 20일 금요일

Placeholder Setting 없이 다이나믹한 Placeholder 사용하기

#사이트코어 #Placeholder #Dynamic

템플릿을 만들고 "__Standard Values" 아이템을 만들어 레이아웃 및 컨트롤을 정의해놓으면, 손 쉽게 페이지를 만들고 설정할수가 있다.

페이지 View (.cshtml)에는 이미 정해진 Placeholder Key 값이 있고, 여기에 Assign이 된 렌더링 아이템들만이 Dynamic하게 사용되어질수 있는데, 하나 추가적으로 세팅해야 할것은 템플릿 또는 페이지 레이아웃의 Placeholder Settings에 꼭 이 Key 값을 추가해야지 Placeholder가 수정되어질수있다. 여기 "Placeholder Setting" 리스트를 추가하지 않으면, 페이지에 등록된 Placeholder는 사용할수가없다. 

만약, 한 페이지에 다양하고 많은 Placeholder값이 필요하다면, 이것을 하나하나 추가하기는 쉽지가 않을뿐더러, 새로운 Placeholder를 추가해야한다면 또 레이아웃을 수정 해야하므로 번거로움이 많다.

사이트 .config 파일에서 이것을 쉽게 Disable 할수가 있다.

"Sitecore.ExperienceEditor.config" 파일에서 "WebEdit.PlaceholdersEditableWithoutSettings"을 "true"로 변경하면, Placeholder Settings 없이 다이나믹한 Placeholder를 사용할수가 있다.


<!-- 
    WEB EDIT PLACEHOLDERS EDITABLE WITHOUT SETTINGS Indicates 
    whether placeholders should be editable in the Page Editor 
    if placeholder settings are not specified. 
    Default value: false 
--> 

<setting name="WebEdit.PlaceholdersEditableWithoutSettings" value="true" />

2016년 5월 17일 화요일

사이트코어 CMS 버전 호환성 표

#사이트코어 #호환성 #Compatibility


CMS
6.0
CMS
6.1
CMS
6.2
CMS
6.3
CMS
6.4
CMS
6.5
CMS
6.6
CMS
7.0
CMS
7.1
CMS
7.2
XP
7.5
XP
8.0
XP
8.1
Sitecore Azure [8]
Sitecore Azure 1.0.0-1.0.1------------
Sitecore Azure 1.0.2-1.0.3-----------
Sitecore Azure 1.0.4-1.1.0----------
Sitecore Azure 2.0.0 [1]-----------
Sitecore Azure 3.0------------
Sitecore Azure 3.1------------
Sitecore Azure 7.2-----------
Sitecore Azure 7.5------------
Sitecore Azure 8.0------------
Sitecore Azure 8.1------------[20]
Sitecore Rocks [14]
Sitecore Rocks
Sitecore App Center
Click Tracking 1.0----------
Google AdSense 1.0----------
Google Analytics 1.0----------
Sitecore Tag Management 1.0 [15]-----------
Email Delivery 2.0--[11][11][11]
SPAM Check 1.2-----
Email Preview 1.2-----
Sitecore® IP Geolocation Service 0.9----[7]--------
Sitecore® IP Geolocation Service 1.0-----[7][7]------
Sitecore® IP Geolocation Service 1.1----------
Sitecore® IP Geolocation Service 1.2-----------
Sitecore® IP Geolocation Service [19]------------
Page Preview 1.2-----
Sitecore Campaign Creator [19]
Campaign Creator 1.0-----------[18]-
E-Commerce Services
SEFE 1.1 [2]-----------
SES 1.2------------
SES 2.0 [3]------------
SES 2.1------------
SES 2.2----------
SES 7.5 [17]------------
SES 8.0 [17]------------
SharePoint Integration Framework
SharePoint Integration Framework 1.0---------
SharePoint Integration Framework 1.1------[4]-----
SharePoint Integration Framework 1.2------[4]---
SharePoint Integration Framework 2.0--------
SharePoint Integration Framework 2.1------------
Sitecore Foundry
Foundry 4.0------------
Foundry 4.1------------
Active Directory
Active Directory 1.0.0------
Active Directory 1.0.2------
Active Directory 1.0.3------
Active Directory 1.0.4-----------
Active Directory 1.1---------
Active Directory 1.2---------
Adaptive Print Studio
Adaptive Print Studio 1.0-----------
Adaptive Print Studio 1.1----------
Adaptive Print Studio 1.2----[7]------
Adaptive Print Studio 1.3-----[7]-----
Adaptive Print Studio 1.4 [7]--------
Print Experience Manager
Online Document Generator 1.0 [7]-----------
Rendition Builder 1.0 [7]-----------
PXM Core 8.0--------[7]
Online Document Generator 8.0------------
Rendition builder 8.0-------
Coveo for Sitecore
Coveo for Sitecore 3.0-------
Design Importer
Design Importer 1.0-----------
Design Importer 2.0-----------
Dynamics CRM Campaign Integration
CRM Security Provider----------
Dynamics CRM Integration 1.x-------
Dynamics CRM Integration 2.0 [7]---
Dynamics CRM Integration 2.1---------
Dynamics CRM Integration 2.0: Integration for WFFM [7]--------
Dynamics CRM Integration 2.1: Integration for WFFM----------
Dynamics CRM Integration 2.2: Integration for WFFM------------
ECM/EXM
E-mail Campaign Manager 1.0------------
E-mail Campaign Manager 1.1------------
E-mail Campaign Manager 1.2------------
E-mail Campaign Manager 1.3----------
E-mail Campaign Manager 2.0 [5]------[7]----
E-mail Campaign Manager 2.1 [5]---------
E-mail Campaign Manager 2.2------------
Email Experience Manager 3.0------------
Email Experience Manager 3.1-----------✓ [7]-
Email Experience Manager 3.2------------[7]
Engagement Intelligence
Engagement Intelligence Datamart----------
TARGIT for Engagement Intelligence----------
Insite for Sitecore
SEEE 3.0-3.1--------
Insite for Sitecore 3.2--------
Insite for Sitecore 3.3------------
Komfo Connector
Komfo Connector 1.0------------
Federated Experience Manager [16]
Federated Experience Manager 1.2------------
Federated Experience Manager 1.3------------
Federated Experience Manager 1.4------------
SEO Toolkit
SEO Toolkit 1.1---------
SEO Toolkit 1.2------------
SEO Toolkit 1.3-----[7]----
Sitecore Item Web API [9]
Sitecore Item Web API 1.0-----[7]-----
Sitecore Item Web API 1.2----------
Sitecore Media Framework, Ooyala and Brightcove Connect
Ooyala Connect 1.0------------
Ooyala Connect 1.1-----------
Brightcove Video Cloud Connect 6.4------------
Brightcove Video Cloud Connect 6.5------------
Brightcove Video Cloud Connect 6.6------------
Brightcove Video Cloud Connect 7.0-------[10]-----
Media Framework 1.0-------[7]-----
Media Framework 1.1-------[7]-----
Media Framework 1.2------------
Media Framework 1.3-------[7]-----
Media Framework 1.4-----------
Media Framework 2.0------------
Media Framework 2.1-----------
Sitecore Social Connected [16]
Social Connected 1.1------------
Social Connected 1.2-----------
Social Connected 1.3 [6]-----------
Social Connected 2.0-------[7]-----
Social Connected 2.1--------[12][13]---
Social Connected 3.0------------
Social Starter Kit
Social Starter Kit 6.1-----------
Social Starter Kit 7.0----------
Social Starter Kit 7.6-----------
Social Starter Kit 8.0---------
WFFM
Web Forms for Marketers 1.x-----------
Web Forms for Marketers 2.0-----------
Web Forms for Marketers 2.1--[7]---------
Web Forms for Marketers 2.2------------
Web Forms for Marketers 2.3----------
Web Forms for Marketers 2.4--------[7][7]---
Web Forms for Marketers 2.5----------[7]--
Web Forms for Marketers 8.0-----------[7]-
Web Forms for Marketers 8.1------------[7]


Legend: “-” – not supported; “✓” – supported.

출처: https://kb.sitecore.net/articles/541788