2015년 9월 2일 수요일

Sitecore PowerShell Script

#HowTo #PowerShell

 이번에는 Sitecore PowerShell Script에 관한여 소개해보겠다.

페이지 템플릿 또는 아이템의 필드 템플릿 값을 변경해야할경우, 간혹 많이 아이템을 하나하나씩 들어가 업데이트 해야하는 경우가 있다. 이럴경우 많은 시간이 소비될 뿐아니라 페이지를 만들고 업데이트하는 과정에서 Best Practice라고 할수가 없다.

이럴경우, 두가지 옵션이 있는데, 첫번째는 템플릿의 Standard Value를 리셋하는 것이고, 두번째는 Sitecore PowerShell의 스크립트를 통하여 변경하고 싶은 아이템의 값을 모두 업데이트하는것이다. 첫번째의 경우 가장 간편하고 안전한 업데이트라고 할수있으나, 만약 템들릿이 많은 필드 타입을 가지고 있고, __Standard Value를 통하여 만들어진 아이템이 아니라면 곤란하다.

이럴경우 두번째 옵션을 선택하는데, 아래는 선택되어진 Context 아이템에 Workflow 필드를 없데이트 하는것이다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
######################################################################
##  1. 먼저 default workflow state 세팅한다                          ##
##  2. 스크립트를 실행하기전 반드시 아이템의 아이디가 정확한지 확인하다  ##
######################################################################

function SetWorkflow($item)
{
    ## Update only items assigned __Default workflow
    if ($item."__Default workflow" -eq "{A5BC37E7-ED96-4C1E-8590-A26E64DB55EA}") {
        $item.__Workflow = "{A5BC37E7-ED96-4C1E-8590-A26E64DB55EA}";
        $item."__Workflow state" = "{190B1C84-F1BE-47ED-AA41-F42193D9C8FC}";
    }
}

## Update correct workflow information.
get-item . -Language * | foreach-object { SetWorkFlow($_) }
get-childitem . -recurse -Language * | foreach-object { SetWorkFlow($_) }

## Show Updated Result
get-item . -Language * | Format-Table Id, Name, Language, __Workflow, "__Workflow state", "__Default workflow"
get-childitem . -recurse -Language * | Format-Table Id, Name, Language, __Workflow, "__Workflow state", "__Default workflow"


아래는 이런문제때문에 StackworkFlow에 질문하여 답변한 링크이다.
http://stackoverflow.com/questions/29263398/sitecore-workflow-is-not-working/29286256#29286256