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:

Advertisements

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.

 

Problema ao autenticar no Sitecore Commerce: problema e solução!

Recentemente eu trabalhei em um setup do Sitecore Commerce 8.2.1 e segui os passos do guia de instalação que você pode ler aqui.  A instalação foi concluída sem nenhum problema, mas quando comecei a testar o site eu me deparei com um erro ao tentar autenticar no site. O domínio do usuário que eu estava testando era o CommerceUsers. Eu tinha o mesmo problema, por exemplo, se eu tentasse alterar a senha do usuário no Gerenciador de Segurança do Sitecore(Security Manager). A mensagem de erro que eu recebia era:

 

The requested profile could not be retrieved because the key name provided does not exist or is not an indexed property.  The profile type is ‘UserObject’.  The key name provided is ‘GeneralInfo.ExternalID’.

 

A causa desse problema estava relacionada com a execução do comando de powershell InitializeCSSite que não deveria ter importado o perfil mas não o fez. Este é o primeiro passo que deve ser executado quando se esta na seção “Set up a Commerce Server site” do guia referido, como você pode ver aqui.

Para resolver esse problema eu tive que importar o arquivo de schema profile.xml manualmente seguindo as instruções contidas neste link.

O arquivo profile.xml é parte integrante do pacote de instalação do Storefront e fica localizado dentro da pasta website no caminho:

Website\SitecoreCommerce\Data\Profiles\Profiles.xml

Espero que ajude!

Ocorreu um problema ao instalar o Sitecore Commerce Server. Qual era e o que fiz para resolvê-lo

No post de hoje eu vou mostrar um erro interessante que eu tive ao reinstalar o Sitecore Commerce Server. Para a sua referência eu segui a documentação oficial de instalação do Sitecore Commerce, disponível aqui.

Vamos ao problema:

Eu havia instalado previamente o Sitecore Commerce e por razões que não interessam ao tema deste post eu decidi deletar a instância existente do Sitecore e reinstalá-la. E foi o que eu fiz. Eu fiz o setup do Sitecore e quando cheguei no passo de instalar os pacotes do Sitecore, mais especificamente o pacote Sitecore.Reference.Storefront.Powered.by.SitecoreCommerce.10.0.xxx.update eu tive o seguinte erro:

 

“Cannot open database “CFSolutionStorefrontSite_productcatalog” requested by the login. The login failed for user ‘DESKTOP-I0Q0N04\CSFndRuntimeUser’.”

A mensagem diz que o login falhou para o usuário DESKTOP-I0Q0N04\ CSFndRuntimeUser no banco de dados CFSolutionStorefrontSite_productcatalog.

E comecei a revisar as permissões do usuário CSFndRuntimeUser  que era um usuário administrador na instância do Windows que eu estava utilizando. Eu conseguia autenticar no SQL Server utilizando esse usuario. Como eu estava conseguindo fazer isso ficou claro que o problema era outro.

Enquanto eu investigava eu notei que quando você instala o Sitecore Commerce Server ele instala o banco de dados MSCS_Admin no Sql Server. Eu percebi também que a tabela Sites tinha dados com o nome do site que eu havia instalado anteriormente. Como eu estava utilizando o mesmo nome eu achei que poderia ter algo a ver. Para ver isso no sql server é so abrir o banco MSCS_Admin e rodar a query:

SELECT TOP 1000 *   FROM [MSCS_Admin].[dbo].[Sites]

Quando eu vi esse registro no banco eu decidi deletar o banco MSCS_Admin, já que era uma instância local e eu poderia fazer isso sem problemas, e instalar novamente o Sitecore Commerce Server. Após realizar isso e chegar no passo de instalar o pacote mencionado acima o problema foi solucionado.  Se deletar o banco não é uma opção para você, bom você ja sabe onde olhar 🙂 e por isso decidi escrever esse post para ajudar aqueles que possam estar meio perdidos com esse erro já que ele não ajuda muito a entender qual é o problema.

 

Reinstalling Sitecore Commerce Server caused an issue. What was it and how I fixed it.

In today’s post I will share with you an interesting issue I ran into while reinstalling Sitecore Commerce Server and what I did to address it. For your reference I have been following the official Sitecore Commerce installation guideline.

So here is my scenario:

I had previously installed Sitecore Commerce and for reasons that don’t really matter for this post I deleted the existing Sitecore instance and decided to reinstall it again.

And so I did. I setup Sitecore and when I got to the step of Installing the Sitecore update packages, more specifically the package Sitecore.Reference.Storefront.Powered.by.SitecoreCommerce.10.0.xxx.update

I got the following error message:

“Cannot open database “CFSolutionStorefrontSite_productcatalog” requested by the login. The login failed for user ‘DESKTOP-I0Q0N04\CSFndRuntimeUser’.”

And so I started double checking permissions for the CSFndRuntimeUser user which by the way, was an administrator on the Windows instance. I was able to authenticate on SQL Server using this same user. With that in mind I thought that this user should not have any sort of permissions issues so I knew was missing something.

As I kept investigating it I noticed that when you install Sitecore Commerce Server it will install on SQL Server the database MSCS_Admin. And looking further I noticed that on the Sites table there was the name of the Site I was reinstalling there(remember I am reinstalling an instance so I’m using the same name). To check that just open Sql Server Management Studio and run the following query on the MSCS_Admin database:

SELECT TOP 1000 *   FROM [MSCS_Admin].[dbo].[Sites]

When I saw that record I decided to delete the MSCS_Admin database altogether since this was a local installation and I could do that and reinstall Sitecore Commerce Server.
After deleting it, reinstalling Sitecore Commerce Server and trying again the installation of the update package I mentioned earlier it got rid of this error. If deleting it is not an option you know where to look for 🙂
So I decided to write this post as the error message I was getting was somewhat misleading so hoping to save whoever reads this some time 🙂

O comando Initialize-CSSite não funcionou ao instalar o Sitecore Commerce. O que era e como resolvi

Recentemente eu instalei uma instância do Sitecore Commerce utilizando Sitecore 8.2 update 1 utilizando a documentação oficial. Quando eu estava na seção de setar o Commerce Server eu segui as instruções abaixo:

“Open a PowerShell window and navigate to your Sitecore website directory. Run the Initialize-CSSite command.”

Em uma tradução livre diz “Abra o Powershell e navegue até a pasta website do Sitecore do seu website e rode o comando Initialize-CSSSite”.

E foi o que eu fiz, porém eu tive o seguinte erro, que eu inclusive postei no forum da Sitecore StackExchange: “A operação não pode ser executada porque essa instância do Commerce Server não foi configurada. Por favor rode o comando CSConfig.exe para configurar o Commerce Server”. Se voce estiver rodando o Windows em inglês a mensagem será “The operation cannot be performed because this Commerce Server instance has not been configured. Please run CSConfig.exe to configure Commerce Server”. Ao tentar rodar o comando CSConfig eu tive outra mensagem de erro “The term ‘CSConfig.exe’ is not recognized as the name of a cmdlet, function, script file, or operable program.”, que em linhas gerais quer dizer que o CSConfig não é um comando reconhecido do prompt de comando.

O fato de o comando CSConfig não ser reconhecido era uma indicação de que algo de errado havia acontecido na instalação do Commerce Server.

Após revisar os passos  que eu havia seguido, eu tentei desinstalar e instalar novamente o Commerce Server. Desta vez eu executei o instalador como administrador e notei que, no passo “Staging Service” do instalador, se eu selecionasse  qualquer outro usuário que aquele que eu estava logado e clicasse no botão ok, o instalador mostraria uma mensagem de que havia terminado(o que não parecia estar correto). Quando eu tentei instalar selecionando o usuário administrador padrão(pré-selecionado), o instalador mostrava a mensagem de progresso e depois de alguns segundos mostrava que havia terminado com sucesso.

Após isso, eu consegui rodar o comando Initialize-CSSite e continuar com a instalação do commerce server.

 

Initialize-CSSite command not working while installing Sitecore Commerce. What was it and how I fixed it

Recently I have set a Sitecore Commerce instance on Sitecore 8.2 update 1 following this guideline. When I got to the section of setting up the Commerce Server I ran into this instruction that suggests the following:

“Open a PowerShell window and navigate to your Sitecore website directory. Run the Initialize-CSSite command.”

And so I did it and got the following error which I posted at Sitecore StackExchange: “The operation cannot be performed because this Commerce Server instance has not been configured. Please run CSConfig.exe to configure Commerce Server”. When I ran the CSConfig.exe command I got another error “The term ‘CSConfig.exe’ is not recognized as the name of a cmdlet, function, script file, or operable program.”

The CSConfig not being recognized was an indication that something went wrong on the installation of the Commercer Server.

After troubleshooting I revisited the steps I had taken so far and tried uninstalling Commerce Server and installing it again. This time I installed with elevated privileges and noted that on the wizard step “Staging Service” if I selected any other users, even administrator users and clicked the ok button the installer would say installation complete(weird I know but that’s what I saw). When I tried again and this time selected the default account which was the one I logged into Windows the wizard would continue and displaying messages indicating progress. After a few seconds it would complete successfully.

After that I was able to run the Initialize-CSSSite command and resume with the installation of the commerce instance.

 

Sitecore 8: O atribute Hostname retorna vazio mesmo contendo um valor na configuração do site. O que pode ser?

Recentemente eu trabalhei em um projeto de Sitecore onde eu estava criando uma lista de sites dinamicamente assim:

sites = SiteManager.GetSites().Select(s => new SiteInfo(s.Properties)).ToList();

em mode de debug eu conseguia ver os valores do atributo hostname definidos corretamente para a configuração do site em questão. Mas ao construir o objeto ele não carregava o valor do hostname.

Eu verifiquei a pagina showconfig e vi a seguinte definição para o site website:

 

<site name="website" enableTracking="true" virtualFolder="/" physicalFolder="/" rootPath="/sitecore/content/brands/clientname" startItem="/home" database="web" domain="extranet" allowDebug="true" cacheHtml="true" htmlCacheSize="50MB" registryCacheSize="0" viewStateCacheSize="0" xslCacheSize="25MB" filteredItemsCacheSize="10MB" enablePreview="true" enableWebEdit="true" enableDebugger="true" disableClientData="false" cacheRenderingParameters="true" renderingParametersCacheSize="10MB" language="en" patch:source="Client.Brands.ClientName.Project.ClientName.config" itemwebapi.mode="Off" itemwebapi.access="ReadOnly" itemwebapi.allowanonymousaccess="false" enableItemLanguageFallback="false" enableFieldLanguageFallback="false" hostname="clientname.dev.local|local.clientname.com"/>

Conforme respondido aqui, eu precisei mudar o atributo hostname para usar a letra maiúscula N assim: hostName, porque os atributos das definições dos sites respeitam maiúsculo e minúsculo. Apos realizar essa mudança ele começou a carregar corretamente o valor do atributo hostname. Você pode ler mais sobre os atributos das definições de sites aqui