레이블이 Referrer인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Referrer인 게시물을 표시합니다. 모든 게시물 표시

2016년 3월 25일 금요일

현재 아이템을 사용중인 모든 아이템 찾기

#사이트코어 #FindRelatedItems #Link

모든 페이지들은 적용되어진 템플릿에 의하여 페이지가 생성이 되고, 템플릿의 값이 어떻게 적용되었는지에 따라, 페이지의 적용된 값도 일괄적으로 업데이트가 된다.
간혹, 잘못 적용된 템플릿을 삭제해야하는 경우가 생기며, 그 템플릿을 삭제하기 위해서는 먼저 템플릿이 사용중인 아이템을 삭제 또는 템플릿 정보를 해당 아이템에서 삭제해야지만이 메인 템플릿 아이템을 삭제할수가 있다.

이번 포스트에서는 어느 아이템에서 해당 템플릿을 사용중인지 찾는 방법을 알아보도록 하겠다.


  1. CMS Link DB를 이용하여 찾는 법

    1. "Content Editor"로 이동 후, 삭제하고자 하는 아이템을 선택한다.
    2. 아이템 선택 후, 상위 매인 툴 박스에서 "Navigation" 탭을 선택한다.
    3. "Navigation" 패널에서 "Links" 버튼을 클릭하면, 선택되어진 아이테을 사용중인 아이템 목록들이 나온다.

  2. 코드를 작성하여 찾는 법

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public Item[] GetReferrers(string itemId)
    {          
        Item item = Sitecore.Data.Database.GetDatabase("master").GetItem(new Sitecore.Data.ID(itemId));
        // 모든 링크된 아이템의 정보를 가져온다
        ItemLink[] itemLinks = Globals.LinkDatabase.GetReferrers(item);
        if (itemLinks == null)
        {
            return null;
        }
        else
        {
            ArrayList items = new ArrayList(itemLinks.Length);
            foreach (ItemLink itemLink in itemLinks)
            {
                // 'Master' DB에 있는 정보를 비교한다.
                if (itemLink.SourceDatabaseName == "master")
                {
                    Item linkItem = Sitecore.Data.Database.GetDatabase("master").Items[itemLink.SourceItemID];
                    if (linkItem != null)
                    {
                        items.Add(linkItem);
                    }
                }
            }
            return (Item[])items.ToArray(typeof(Item));
        }
    }


  3. Powershell 스크립트를 이용하여 찾는 법
    1. 먼저, Sitecore PowerShell를 설치 한 후,
    2. "Content Editor" 또는 "Dashboard"에서 PowerShell Console를 실행시킨다.
    3. 아래의 코드를 PowerShell 스크립트 필디에 넣은 후, "Execute" 버턴을 실행한다.

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      $props = @{
          InfoTitle = "Referrers"
          InfoDescription = "현재 아이템을 사용중인 모든 아이템을 리스트하여라."
          PageSize = 25
      }
      
      function Get-ItemReferrers {
          $item = Get-Item -Path "/sitecore/your/template/item/path"
          $linkDb = [Sitecore.Globals]::LinkDatabase
          $links = $linkDb.GetReferrers($item)
          foreach($link in $links){
              $linkedItem = Get-Item -Path master:\ -ID $link.SourceItemID
              $linkedItem
          }
      }
      
      $items = Get-ItemReferrers
      $items | Show-ListView @props -Property @{Label="Name"; Expression={$_.DisplayName} },
                  @{Label="Updated"; Expression={$_.__Updated} },
                  @{Label="Updated by"; Expression={$_."__Updated by"} },
                  @{Label="Created"; Expression={$_.__Created} },
                  @{Label="Created by"; Expression={$_."__Created by"} },
                  @{Label="Path"; Expression={$_.ItemPath} }
      
      Close-Window