Configurando um workflow em todos os templates utilizando SPE

Recentemente eu tive que implementar um novo workflow em um projeto de Sitecore. Todos os templates existentes necessitariam utilizar o novo workflow. Eu até poderia ir manualmente em cada template e atualizar manualmente, mas como eu sou um desenvolvedor, normalmente quando eu tenho que realizar uma atividade repetitiva eu penso em formas de automatizá-la. Neste caso, como haviam alguns templates a serem atualizados, eu decidi escrever um script de powershell para atualizar todos.

O módulo Sitecore Powershell Extensions é otimo para automatizar atividades como essa, das quais normalmente necessitam de passos manuais e repetitivos. Se você é um desenvolvedor de Sitecore e ainda não utiliza, eu recomendo dar uma olhada. Esse módulo vem com várias funcionalidades interessantes como relatórios, integrações com o Editor de Conteúdo, Painel de controle, além de vir com muitos comandos que facilitam a construção de scripts para manipular os itens em Sitecore.

Script

Voltando ao cenário descrito no início do post, eu criei o seguinte script(ligeiramente adaptado para o fim do post):

$templates = Get-ChildItem -Path "/sitecore/templates/My Project Templates" -Recurse | Where-Object { $_.Name -match "__Standard Values" } | ForEach-Object{
       $_.__Workflow = "{A5BC37E7-ED96-4C1E-8590-A26E64DB55EA}"
}

O que esse script está fazendo é pegando todos os itens standard values que são descendentes do caminho “/sitecore/templates/My Project Templates”, que é o caminho onde os templates do meu projeto estavam. Depois ele percorre os resultados e configura o no campo workflow o GUID do workflow que eu havia criado, que nesse caso era “{A5BC37E7-ED96-4C1E-8590-A26E64DB55EA}”.

Simples certo? Bem é por isso que eu pessoalmente gosto de utilizar o módulo Sitecore Powershell Extensions sempre que eu posso, pois ele facilita muito as coisas. Se você tiver interesse, é possivel fazer o download diretamente daqui.  Você também pode ver o livro online que tem muitos exemplos interessantes e uma documentação bem completa sobre o módulo, além de ter o suporte da comunidade no canal do Slack #module-spe.

Same post in english here

Updating renderings properties using Sitecore Powershell Extensions

Have you ever needed to update a rendering property on several items in your Sitecore content tree and didn’t want to go through the process manually? Well recently I had, and if I had to do it manually one by one, it take a lot of time as I had several items I needed to perform such task. Whenever you face a situation like this, you might want to consider using the powershell extensions module.

By the way If you are working with Sitecore and you are not familiar with the powershell extensions module I highly recommend you start using it. It can save you a lot of time. You can download the module at the marketplace.

So in this scenario I wanted to update a rendering on all items of a specific template and set the caching “Vary By Data” property to checked on all of them.

Here is how you can easily do that by running this script:

$items = Get-ChildItem -Recurse | Where-Object {$_.TemplateID -match “{79A0F7AB-17C8-422C-B927-82A1EC666ABC}”} | ForEach-Object {

$renderingInstance = Get-Rendering -Item $_ -Rendering $rendering
if($renderingInstance){
$renderingInstance.VaryByData = 1
Set-Rendering -Item $_ -Instance $renderingInstance
}

}

 

So what this script is doing is pretty straight forward but in any case here is the explanation on what it does.

It is getting all descendants of the Sitecore Context, in this case sitecore\content\home and it is filtering for all descendants that have the TemplateID guid as “{79A0F7AB-17C8-422C-B927-82A1EC666ABC}”.
Next it will loop on the results and set to the renderingInstance variable the rendering. If it’s not null it sets the VaryByData property to 1(checked) and execute the Set-Rendering command.
At this point all renderings on the items will have been set to “Vary By Data” as checked as shown bellow:

Atualizando as propriedades dos renderings com Sitecore e Powershell Extensions

Voce já teve que atualizar uma propriedade em um rendering em vários itens da árvore de conteúdo e não queria atualizá-los manualmente? Eu recentemente tive que fazer isso e abaixou vou descrever como fazê-lo, utilizando o módulo Powershell Extensions.

Quando você tiver um cenário parecido com esse, eu recomendo você utilizar o módulo Powershell Extensions.

Se você trabalha com Sitecore e não conhece esse módulo, eu recomendo que começe a usar. Você pode ganhar bastante tempo utilizando ele. Você pode fazer o download do módulo na marketplace da Sitecore.

No cenário deste post, eu queria atualizar um rendering em todos os itens de um determinado template e setar a propriedade de cache “Vary By Data” para checado em todos os itens.

Para fazer isso basta rodar este script:

$items = Get-ChildItem -Recurse | Where-Object {$_.TemplateID -match “{79A0F7AB-17C8-422C-B927-82A1EC666ABC}”} | ForEach-Object {

$renderingInstance = Get-Rendering -Item $_ -Rendering $rendering
if($renderingInstance){
$renderingInstance.VaryByData = 1
Set-Rendering -Item $_ -Instance $renderingInstance
}

}

Caso você tenha alguma dúvida sobre o que ele está fazendo vou detalhar melhor.

Ele esta pegando todos os itens descendentes o item de contexto do Sitecore, que nesse caso é sitecore\content\home e está filtrando por todos os itens que sejam do template com o ID igual a  “{79A0F7AB-17C8-422C-B927-82A1EC666ABC}”.

Depois ele faz um loop em todos os resultados e pega o rendering de cada item no loop e armazena na variável renderingInstance. Se ela não for nula, ele seta a propriedade VaryByData com o valor 1(checado) e executa o comando Set-Rendering.

A essa altura todos os items que ele percorreu no loop terão a propriedade “Vary By Data” checada, conforme abaixo:

Sitecore Powershell Extensions: Ever wonder how to elevate your session without having to provide your credentials? Here is how

In today’s post we will review an interesting feature in Sitecore Powershell Extensions: How to elevate your session without having to provide your credentials. I’m using on today’s post SPE 4.4.1.29973 and Sitecore 8.2.

The idea for this post came when I was playing around with SPE and everytime I would run a script using ISE I would get prompted for my credentials like shown bellow:

I thought to myself “There has got to be a way to get rid of this popup while I’m still developing the script and want to run and test it”. And I found that actually there is. But this pop-up exists for a reason and you should consider it. But if you are just developing on your local and you know what you are doing keep reading 🙂

I’m logged in as admin(and yes “b” is still my password) so I’m already an admin with elevated privileges right? so what else should I do?

Well there is a section on the “Cognifide.PowerShell.config” config file which essentially guides this behavior:

<userAccountControl>
<gates>

<gate name=”Console” token=”Console”/>
<gate name=”ISE” token=”ISE”/>
<gate name=”ItemSave” token=”ItemSave”/>
</gates>
<tokens>

<token name=”Default” expiration=”00:00:00″ elevationAction=”Block”/>
<token name=”Console” expiration=”00:05:00″ elevationAction=”Password”/>
<token name=”ISE” expiration=”00:05:00″ elevationAction=”Password”/>
<token name=”ItemSave” expiration=”00:05:00″ elevationAction=”Password”/>
</tokens>
</userAccountControl>

 

You might be wondering what are gates and tokens. If you are have a look on this link.

So there are essentially two ways for you to elevate that privilege. One is to increase the expiration time on the ISE token, for example for a few hours or days. But you will have to provide your password at least once. Or you can essentially change to value of the attribute elevationAction.

In the code above it’s set to “Password” which means that you have to provide your password. The other values you can set are Block and Allow.

Block will block the execution of your code even if you provide your password showing you a message like this:

Allow will essentially achieve what you are looking for. You will be able to run scripts as much as you would like without providing your password.

Sitecore Powershell Extensions: Como elevar a sua sessão sem fornecer as credencias

No post de hoje nós vamos revisar uma funcionalidade interessate do módulo Sitecore Powershell Extensions: Como elevar a tua sessão sem fornecer as tuas credenciais. Para este post eu estou utilizando a versão  4.4.1.29973 do módulo e a versão 8.2 de Sitecore.

A idéia deste post veio quando eu estava desenvolvendo um script usando SPE e toda vez que eu queria rodar o script aparecia o pop-up pedindo pela minha senha, conforme mostra abaixo:

Eu pensei comigo mesmo “Deve haver alguma forma de não precisar fornecer as minhas credenciais toda vez que eu rodo o script, já que eu estou desenvolvendo e quero testar apenas”. E eu descobri que tem como.

Porém esse pop-up existe por um motivo e você deve ter isso em consideração. Mas se você estiver desenvolvendo no seu ambiente e você sabe o que está fazendo, continue lendo 🙂

Neste exemplo eu estou logado como admin o que já me daria permissões elevadas correto? O que mais eu preciso fazer?

 

Existe uma seção no arquivo de configuração “Cognifide.PowerShell.config” que essencialmente define esse comportamento:

<userAccountControl>
<gates>

<gate name=”Console” token=”Console”/>
<gate name=”ISE” token=”ISE”/>
<gate name=”ItemSave” token=”ItemSave”/>
</gates>
<tokens>

<token name=”Default” expiration=”00:00:00″ elevationAction=”Block”/>
<token name=”Console” expiration=”00:05:00″ elevationAction=”Password”/>
<token name=”ISE” expiration=”00:05:00″ elevationAction=”Password”/>
<token name=”ItemSave” expiration=”00:05:00″ elevationAction=”Password”/>
</tokens>
</userAccountControl>

Talvez você esteja se perguntando o que são gates e tokens. Se estiver, sugiro a leitura desse link.

Existem então essencialmente duas formas de elevar a sessão. Uma é aumentar o tempo de expiração do token ISE, por exemplo para algumas horas ou dias. Mas você terá que fornecer a sua senha pelo menos uma vez. Ou você pode essencialmente mudar o valor do atributo “elevationAction”.

No caso acima, o valor está definido como “Password” o que significa que você tem que fornecer uma senha. Os outros valores permitidos são Block e Allow.

Se você definir como Block, a execução do seu código será bloqueada, mesmo que forneça uma senha valida. Você vai receber a seguinte mensagem:

 

O que você deve usar nesse caso é Allow. Com isso você conseguirá rodar os scripts quantas vezes quiser sem precisar fornecer a sua senha a cada vez.

 

Sitecore powershell extension: como ler uma variável utilizando o comando Read-Variable

Outro dia eu estava utilizando o comando o módulo powershell extention e precisei utilizar o comando  “Read-Variable”, e eu estava tentando descobrir como utilizar os valores preenchidos pelos usuários nos formulários gerados. Então eu decidi escrever este post para ajudar a outros desenvolvedores, para que não percam miuito tempo tentando ver como fazer. Este era o script que eu utilizei:

$item = Get-Item master:\content\home

$result = Read-Variable -Parameters `
@{ Name = “someText”; Value=”Some Text”; Title=”Single Line Text”; Tooltip=”Tooltip for singleline”; Placeholder=”You see this when text box is empty”},
@{ Name = “item”; Title=”Start Item”; Root=”/sitecore/content/”} `
-Description “This Dialog shows less editors, it doesn’t need tabs as there is less of the edited variables” `
-Title “Initialise various variable types (without tabs)” -Width 500 -Height 480 -OkButtonName “Proceed” -CancelButtonName “Abort”

$result

Eis o que este script faz:

Ele está utilizando o comando Read-Variable para gerar um formulário com um campo de texto e um droplink, além dos botões OK e Cancelar.

A variável $result retornava o valor “ok” ou “cancel” dependendo da ação. Em relação ao valor do campo “someText” tudo o que você precisa fazer é utilizar o comando $Variable:someText. O mesmo vale para outras variáveis.
Espero que seja útil!

 

Sitecore powershell extension: reading the values from the variables when using Read-Variable command

The other day I was using the very handy Sitecore powershell module and I needed to use the”Read-Variable” command and I was trying to figure out how to actually use the values entered by the user when they fill in the form this command creates. So I decided to create this post to help others so they don’t have to spend too much time figuring it out.

So here is the script I had:

$item = Get-Item master:\content\home

$result = Read-Variable -Parameters `
@{ Name = “someText”; Value=”Some Text”; Title=”Single Line Text”; Tooltip=”Tooltip for singleline”; Placeholder=”You see this when text box is empty”},
@{ Name = “item”; Title=”Start Item”; Root=”/sitecore/content/”} `
-Description “This Dialog shows less editors, it doesn’t need tabs as there is less of the edited variables” `
-Title “Initialise various variable types (without tabs)” -Width 500 -Height 480 -OkButtonName “Proceed” -CancelButtonName “Abort”

$result

Breaking down the script:

It is using the Read-Variable command to generate a form with one text box and a droplink, and a confirm and cancel buttons.

The $result variable  would return ‘ok’ or ‘cancel’ depending on the action the user would take. So to read the value from the input ‘someText’ for example all you have to do is use $Variable:someText.  The same goes for other variables.

Hope this saves you some time!