Migrate Your Accelerator-based Storefront to Compo...

Visão geral

Migre sua loja baseada em acelerador para Composable Storefront

Se você leu os artigos «Cinco motivos para migrar para uma loja de javascript do projeto Spartacus» e «Começando com o Projeto Spartacus do SAP Commerce Cloud», pode estar querendo migrar para uma arquitetura de alto desempenho sem estado e agora se perguntando como se preparar para a migração. Neste artigo, discutiremos uma abordagem adequada para pequenas lojas, mas com um processo que também pode ajudar em migrações maiores, onde uma re-implementação completa é recomendada.

Migrar ou não?

Embora a recomendação seja usar a migração para Composable Storefront (também conhecida como Spartacus) como uma oportunidade para começar do zero e repensar a experiência da sua loja, você pode ter requisitos para migrar para Composable Storefront e manter a mesma experiência. Dependendo do número e do método de personalização da sua loja baseada em acelerador, você pode achar que tentar migrar sua experiência existente para Composable Storefront pode ser algo simples ou difícil. Se não tiver certeza, pode seguir os passos abaixo para fazer um exercício e identificar o número de mudanças sem necessariamente gastar tempo para implementá-las. Isso pode lhe dar uma ideia de quanto trabalho pode ser necessário para migrar em comparação com começar com uma abordagem do zero.

Como mencionado em «Começando com o Projeto Spartacus do SAP Commerce Cloud», você pode executar seus aceleradores e Composable Storefronts ao mesmo tempo para reduzir o risco, embora seja recomendado não fazer isso por um período prolongado. Manter duas lojas em duas pilhas tecnológicas diferentes pode tornar o desenvolvimento e os testes bastante difíceis, sem mencionar que você pode dar aos seus clientes uma experiência de usuário inconsistente dependendo da página da loja em que estão acessando.

Pré-requisitos

É recomendável que você inicie sua migração para um Composable Storefront após atualizar para o SAP Commerce 1905 ou posterior, pois a forma como as interfaces de programação de aplicativos (APIs) do Omni Commerce Connect (OCC) são instaladas foi simplificada (agora estão disponíveis como extensões em vez de AddOns).

Para começar, você também precisará do seguinte:

Configuração inicial

Revise o «O que há de novo no SAP Commerce Cloud, loja composable e roteiro para Composable Storefront» para garantir que você esteja ciente de quais recursos têm paridade, quais podem ter mudado e quais podem estar faltando.

Atualize sua loja existente para usar pelo menos o SAP Commerce 2011.

Quaisquer Addons OCC existentes foram convertidos em extensões regulares (se estiver usando o SAP Commerce 2005 ou posterior).

Você passou pelas etapas de «Construa e implemente seu primeiro projeto SAP Commerce Cloud». Você também pode revisar o conteúdo abordado na configuração do SAP Commerce Cloud para uso com Composable Storefront e garantir que tenha configurado e executado a construção do Composable Storefront a partir das bibliotecas.

Equipe de Front-End

A equipe de front-end construirá a interface do usuário da loja composta por layout e módulos Angular. As habilidades principais dos desenvolvedores serão:

Equipe de Back-End

A equipe de back-end construirá as APIs do OCC necessárias pela equipe de front-end. As habilidades principais dos desenvolvedores necessárias são:

Anatomia de um Composable Storefront

Antes de começar sua migração, você deve estar familiarizado com como um Composable Storefront funciona. Comece visitando a documentação do Composable Storefront e dê uma olhada no diretório de Módulos e Componentes. Ele se parecerá com isso:


Navegue pelos Módulos e Componentes e se familiarize com a funcionalidade oferecida pelo Composable Storefront. Preste atenção especial aos Módulos que fornecem uma estrutura padrão que define o mapeamento entre Componentes CMS padrão e Componentes Composable Storefront. No exemplo abaixo, o BannerComponent fornece mapeamentos para SimpleResponsiveBannerComponent, BannerComponent e SimpleBannerComponent.

Módulo de Banner


@NgModule({

imports: [CommonModule, RouterModule, GenericLinkModule, MediaModule],

providers: [

provideDefaultConfig({

cmsComponents: {

SimpleResponsiveBannerComponent: {

component: BannerComponent,

},

BannerComponent: {

component: BannerComponent,

},

SimpleBannerComponent: {

component: BannerComponent,

},

},

}),

],

declarations: [BannerComponent],

entryComponents: [BannerComponent],

exports: [BannerComponent],

})

export class BannerModule {}

Para ver quais endpoints de API estão disponíveis em sua instalação local, acesse a documentação do Swagger do OCC. Você pode precisar instalar extensões adicionais se um determinado endpoint estiver faltando.

Acelerador Storefront vs Composable Storefront

Você pode estar familiarizado com o acelerador padrão baseado em Spring-MVC no lado esquerdo da imagem abaixo, mas observe cuidadosamente a descrição do Composable Storefront no lado direito para entender as principais diferenças.

 

Acelerador Storefront

Na loja tradicional, o navegador faz solicitações ao servidor que recuperam a estrutura da página e executam controladores, fachadas e serviços para processar e recuperar as informações necessárias para renderizar a visualização.

A maioria do estado é mantida no lado do servidor, dentro da HttpSession, que pode ser replicada entre contêineres.

alex_alvarez_0-1709281543844.png

 

 

Composable Storefront

Na loja sem cabeça (headless), o front-end é carregado no navegador, e a estrutura da página e o layout são recuperados do servidor (a menos que tenha um layout estático). Os Componentes Composable Storefront (veja Módulos e Componentes acima) são usados para construir a página no lado do cliente, e eles executam Chamadas do OCC para o servidor (veja APIs do OCC acima) para recuperar os dados necessários para a renderização. A página inicial pode ser construída inicialmente no Servidor (usando uma tecnologia conhecida como Renderização do Lado do Servidor – SSR), para fins de desempenho e SEO.

O estado é mantido no lado do Cliente, dentro do Armazenamento Local / de Sessão do Navegador.

Durante a migração, você dividirá a funcionalidade do controlador do acelerador existente em Componentes Angular individuais do Composable Storefront (incluindo a lógica de visualização/modelo) e APIs do OCC, conforme indicado pelas linhas pontilhadas.

Em alguns casos, pode ser necessário modificar também os Facades e Serviços existentes.

Mudanças no Catálogo de Conteúdo também serão necessárias, a documentação do Composable Storefront dá uma boa visão geral das diferenças entre os dados de exemplo do acelerador e do Composable Storefront.

Por fim, você pode analisar uma chamada de exemplo para a página de Detalhes do Produto com a ajuda das Ferramentas de Desenvolvedor do Chrome, para ver como tudo se encaixa. Use a guia de Rede para ver as requisições geradas pelo Composable Storefront.

Ao analisar as chamadas acima com mais detalhes, utilizando a documentação da API Swagger como referência, você pode ver:

Chamada Parâmetros Propósito Controlador OCC
/occ/v2/electronics-spa/cms/pages ng=en&curr=USD Solicita a página de detalhes do produto incluindo todos os Slots e Componentes do WCMS.

Usando a lista de Componentes na resposta, o Composable Storefront usará os mapeamentos do CMSConfig (veja o exemplo do BannerModule acima) e instanciará um Componente Angular para cada Componente do CMS e construirá a página usando a estrutura fornecida pelos slots, no navegador do cliente.

de.hybris.platform.cmsocc.controllers.PageController
/sockjs-node/info info?t=1597322562030 Apenas usado durante o desenvolvimento, esse socket é usado para atualizar o aplicativo da web quando o backend reconstrói  
/occ/v2/electronics-spa/products/300938 300938?fields=name,purchasable,baseOptions(DEFAULT…iantOptions(DEFAULT),variantType&lang=en&curr=USD Retorna detalhes de um único produto de acordo com o código do produto 300938

                
de.hybris.platform.commercewebservices.core.v2.controller.ProductsController
/occ/v2/electronics-spa/cms/components components?fields=DEFAULT&productCode=300938&curre…nk%2CBlankVideotapesCategoryLink&lang=en&curr=USD Solicita uma lista dos Componentes do CMS fornecidos de.hybris.platform.cmsocc.controllers.ComponentController
/occ/v2/electronics-spa/languages languages?lang=en&curr=USD Obtém uma lista de idiomas disponíveis de.hybris.platform.commercewebservices.core.v2.controller.MiscsController
/occ/v2/electronics-spa/currencies currencies?lang=en&curr=USD Obtém uma lista de moedas disponíveis de.hybris.platform.commercewebservices.core.v2.controller.MiscsController
/occ/v2/electronics-spa/cms/components components?fields=DEFAULT&productCode=300938&curre…ink%2CFacebookLink%2CTwitterLink&lang=en&curr=USD Solicita Componentes adicionais do CMS de.hybris.platform.cmsocc.controllers.ComponentController
/occ/v2/electronics-spa/users/anonymous/consenttemplates consenttemplates?lang=en&curr=USD Busca a lista de consentimentos de.hybris.platform.commercewebservices.core.v2.controller.ConsentsController
/occ/v2/electronics-spa/cms/components components?fields=DEFAULT&productCode=300938&curre…eviewsTabComponent%2CdeliveryTab&lang=en&curr=USD Solicita Componentes adicionais do CMS de.hybris.platform.cmsocc.controllers.ComponentController
/occ/v2/electronics-spa/products/300938 300938?fields=code,name,summary,price(formattedVal…nfiguratorType,configurable,tags&lang=en&curr=USD Solicita campos adicionais para o código do produto 300938 de.hybris.platform.commercewebservices.core.v2.controller.ProductsController
/occ/v2/electronics-spa/products/300938/references

references?fields=DEFAULT%2Creferences(target(images(FULL)))

&referenceType=SIMILAR&lang=en&curr=USD

Solicita referências de produtos para o código do produto 300938 de.hybris.platform.commercewebservices.core.v2.controller.ProductsController
/occ/v2/electronics-spa/products/300938 300938?fields=classifications&lang=en&curr=USD Recupera classificações para o código do produto 300938 de.hybris.platform.commercewebservices.core.v2.controller.ProductsController
/occ/v2/electronics-spa/products/300938/reviews reviews?lang=en&curr=USD Recupera avaliações de clientes para este produto de.hybris.platform.commercewebservices.core.v2.controller.ProductsController

Usando o Plugin do Chrome Augury, você pode ver a hierarquia de componentes resultante após a página ser construída no navegador.

Iniciando a Migração

Agora que você entende como o Composable Storefront funciona em um nível técnico, está pronto para prosseguir com a migração.

Passo 1 – Faça um Inventário dos seus Componentes e Páginas do CMS

É importante fazer um inventário das páginas e componentes usados em sua loja atual, como na tabela abaixo. Para cada página, liste os controladores e Componentes do CMS personalizados que são usados, e para cada componente, descubra quais dados ele precisa exibir ou processar. Algumas informações necessárias podem não ser visíveis à primeira vista, como caixas de seleção ou janelas pop-up.

Você pode filtrar as requisições para /pagescontentslotscomponents no SmartEdit enquanto edita uma página específica em sua loja existente para recuperar os detalhes do componente.

Componentes usados na Página de Detalhes do Produto do Acelerador

0: {componentId: "SiteLogoComponent",…}

1: {componentId: "HomepageNavLink",…}

2: {componentId: "OrderComponent",…}

3: {componentId: "MiniCart",…}

4: {componentId: "ElectronicsCategoryNavComponent",…}

5: {componentId: "breadcrumbComponent",…}

6: {componentId: "TabPanelContainer",…}

7: {componentId: "FooterNavigationComponent",…}

8: {componentId: "MyAccountComponent",…}

9: {componentId: "MyCompanyComponent",…}

10: {componentId: "SearchBox",…}

11: {componentId: "VariantSelector",…}

12: {componentId: "AddToCart",…}

13: {componentId: "Similar",…}

14: {componentId: "CookieNotificationComponent",…}

15: {componentId: "AnonymousConsentManagementComponent",…}

16: {componentId: "AssistedServiceComponent",…}

17: {componentId: "ProfileTagScriptComponent",…}

18: {componentId: "PersonalizationScriptComponent",…}

19: {componentId: "BundleCarouselComponent",…}

Pode ser útil fazer capturas de tela de sua loja e anotar os componentes, como abaixo:

 

O Composable Storefront suporta quase todos os componentes responsivos de CMS B2C out-of-the-box, então você só precisará se concentrar em seus componentes personalizados, bem como aqueles provenientes de complementos de terceiros ou extensões de marketplace não cobertas na biblioteca padrão. Agrupe e classifique-os de acordo com a área funcional, utilizando um inventário de componentes como o abaixo. Esteja ciente de que, ao contrário da abordagem da Página do Acelerador, tudo precisa ser um componente no Composable Storefront, então talvez seja necessário componentizar partes de um layout de Página de Servidor Jakarta (JSP) existente.

As consultas a seguir fornecem uma visão geral dos Componentes, Modelos de Página e Páginas usados em sua loja:

Consultas Úteis de Pesquisa Flexível

// Lista de Componentes

selecione

{ct.code},

{c.id},

{ct.extensionName},

count(*) as cnt

de {

AbstractCMSComponent como acc

junte-se ao ComposedType como ct em {ct.pk} = {acc.itemtype}

junte-se ao CatalogVersion como cv em {cv.pk} = {acc.catalogversion}

junte-se a um catálogo como c em {cv.catalog} = {c.pk}

}

onde {c.id} LIKE '%ContentCatalog' e {cv.version} = 'Online'

agrupar por {ct.code}, {cv.version}, {c.id},{ct.extensionName}

ordenar por cnt desc

// Modelos de Página

selecione

{ct.code},

{c.id},

{pt.name},

{pt.frontendTemplateName}

de {

PageTemplate como pt

junte-se ao ComposedType como ct em {ct.pk} = {pt.itemtype}

junte-se ao CatalogVersion como cv em {cv.pk} = {pt.catalogversion}

junte-se a um catálogo como c em {cv.catalog} = {c.pk}

}

onde {c.id} LIKE '%ContentCatalog' e {cv.version} = 'Online'

ordenar por {ct.code}

// Páginas

selecione

{ct:code},

{c:id},

{ap:name[de]},

{ap:uid}

de {

AbstractPage como ap

junte-se ao ComposedType como ct em {ct.pk} = {ap.itemtype}

junte-se ao CatalogVersion como cv em {cv.pk} = {ap.catalogversion}

junte-se a um catálogo como c em {cv.catalog} = {c.pk}

}

onde {c.id} LIKE '%ContentCatalog' e {cv.version} = 'Online'

ordenar por {ct.code}

// Páginas, Componentes e Slots

selecione

{c.id},

{cv.version},

{p.uid} as "Página",

{pt.uid} as "Modelo",

{s4p.position} as "Posição atribuída ao modelo",

{st.uid} as "id do slot de conteúdo 4t",

{st.active} as "slot de conteúdo 4t ativo",

{sn.templatePOS} as "pos",

{sn.name} as "posição disponível no modelo",

{comp.uid},

{compt.code},

{comp.visible}

de {

AbstractPage como p

junte-se ao CatalogVersion como cv em {cv.pk} = {p.catalogVersion}

junte-se a um catálogo como c em {c.pk} = {cv.catalog}

junte-se ao PageTemplate como pt em {pt.pk} = {p.masterTemplate}

junte-se a ContentSlotForPage como s4p em {s4p.page} = {p.pk}

junte-se a ContentSlot como st em {st.pk} = {s4p.contentSlot}

à esquerda junte-se a ContentSlotName como sn em {sn.template} = {pt.pk} e {sn.name} = {s4p.position}

junte-se a ElementsForSlot como e2s em {st.pk} = {e2s.source}

junte-se a AbstractCMSComponent como comp em {comp.pk} = {e2s.target}

junte-se ao ComposedType como compt em {compt.pk} = {comp.itemtype}

} onde

{cv.version} = 'Online' e {c.id} like '%ContentCatalog'

ordenar por {cv.version},{c.id},{p.uid},{sn.templatePOS},{comp.uid}


// Modelos, componentes e slots

selecione

{c.id},

{cv.version},

{p.uid},

{pt.uid},

{s4t.position} as "posição atribuída ao modelo",

{st.uid} as "id do slot de conteúdo 4t",

{st.active} as "slot de conteúdo 4t ativo",

{s4t.allowOverwrite} as "permitir sobrescrita do modelo",

{sn.templatePOS} as "pos",

{sn.name} as "posição disponível no modelo",

{comp.uid},

{compt.code},

{comp.visible}

de {

AbstractPage como p

junte-se ao CatalogVersion como cv em {cv.pk} = {p.catalogVersion}

junte-se a um catálogo como c em {c.pk} = {cv.catalog}

junte-se ao PageTemplate como pt em {pt.pk} = {p.masterTemplate}

junte-se a ContentSlotForTemplate como s4t em {s4t.pageTemplate} = {pt.pk}

junte-se a ContentSlot como st em {st.pk} = {s4t.contentSlot}

à esquerda junte-se a ContentSlotName como sn em {sn.template} = {pt.pk} e {sn.name} = {s4t.position}

junte-se a ElementsForSlot como e2s em {st.pk} = {e2s.source}

junte-se a AbstractCMSComponent como comp em {comp.pk} = {e2s.target}

junte-se ao ComposedType como compt em {compt.pk} = {comp.itemtype}

} onde

{cv.version} = 'Online' e {c.id} like '%ContentCatalog'

ordenar por {cv.version},{c.id},{p.uid},{sn.templatePOS},{comp.uid}

 

Inventário de Componentes

ID Página Componente Implementação Renderizar no SSR Aninhado Dados Necessários Observações Captura de Tela do Componente
10.1 PDP FinancingWidgetComponent FinancingWidgetController Sim Não Usuário, Carrinho, Preferências de Financiamento Layout Personalizado  
10.2 PDP PersonalizedRecommendationsComponent PersonalizedRecommendationsController Não Não Lista de Recomendações O Motor de Recomendações pode ser consultado diretamente  
10.3 PLP LastPurchases.jsp JSP Sim Não Compras Anteriores Novo Componente necessário  

No acelerador padrão, um PageController (baseado em AbstractPageController) prepara o contexto necessário para renderizar uma página. No Composable Storefront, a maior parte desse trabalho já é realizado pelo framework, mas é uma boa ideia verificar manualmente a lógica que pode precisar ser movida para uma extensão personalizada do OCC ou um componente individual.

Passo 2 – Realizar uma Análise de Lacunas

Para cada componente, identifique se existe uma API correspondente do OCC que forneça os dados necessários (e o Serviço Injetável correspondente), caso contrário, descreva as Extensões do OCC que serão necessárias. Além disso, defina uma prioridade de desenvolvimento (ou importância) para cada componente.

Análise de Lacunas do Componente

 

ID Prioridade Página Componente Descrição Dados Necessários OCC Existente OCC Ausente
10.1 A PDP FinancingWidgetComponent Calcula as opções de financiamento do produto Cliente, Carrinho, Preferências de Financiamento Carrinho, Usuários Preferências de Financiamento
10.2 B PDP PersonalizedRecommendationsComponent Usando análises, recomenda os produtos mais bem avaliados Lista de Recomendações N/A Recomendações
10.3 B PLP LastPurchases.jsp Exibe as últimas 3 compras online Pedidos Anteriores Pedidos  

 

Passo 3 – Iniciar a Implementação da API

Usando uma abordagem API First, crie Extensões do OCC ausentes e defina as interfaces com base na semântica dos serviços do OCC existentes. Comece com implementações vazias (ou simuladas) pois isso permitirá que a equipe de front-end comece a trabalhar em paralelo no próximo passo.

Utilize o Swagger CodeGen para gerar automaticamente o código do cliente Typescript Angular necessário no front-end. Acrescente campos faltantes nos DTOs conforme necessário.

Passo 4 – Implemente as Páginas e Componentes do CMS

Crie uma estrutura básica de sistema de gerenciamento de conteúdo da web (WCMS) que duplique a sua loja atual e lance a sua aplicação Composable Storefront. Abra a guia Console nas Ferramentas de Desenvolvedor do Chrome e você verá um aviso para cada Componente do CMS que não tem um Componente Angular correspondente, também haverá um aviso para os Slots do CMS disponíveis.

Verifique se essa informação corresponde ao seu Inventário de Componentes do CMS.

Storefront Componível

No storefront sem cabeçalho, o front-end é carregado no navegador, e a estrutura e layout da página são recuperados do servidor (a menos que tenha um layout estático). Os Componentes do Composable Storefront (veja Módulos e Componentes acima) são usados para construir a página no lado do cliente, e eles executam Chamadas OCC para o servidor (veja APIs OCC acima) para recuperar os dados necessários para renderização. A página inicial pode, no entanto, ser construída inicialmente no Servidor (usando uma tecnologia conhecida como Renderização do Lado do Servidor – SSR), por questões de desempenho e SEO. O estado é mantido no lado do Cliente.

Prossiga para reimplementar os novos componentes e páginas do CMS em Angular. Use o comando de esquema de Componente do CMS add-cms-component para gerar classes esqueleto (veja também: Criando Páginas e Componentes e Criando uma nova página no Spartacus) e adicione sua lógica personalizada.

Conclusão

Este artigo forneceu uma introdução mais técnica ao Composable Storefront e às técnicas necessárias para migrar um storefront de acelerador existente. Uma migração pode envolver uma quantidade significativa de reengenharia, mas existem benefícios tangíveis de desempenho e manutenção que o tornam valioso. A preparação cuidadosa é fundamental para uma migração bem-sucedida.

Se tiver alguma dúvida, não hesite em entrar em contato pelo e-mail sapcx-services@sap.com. Se tiver dúvidas técnicas enquanto desenvolve no Composable Storefront, encorajamos você a postar sua pergunta no StackOverflow com a tag spartacus-storefront.

FONTE

Por Staff

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *