Introduction đ
Mon Ă©quipe et moi avons rĂ©cemment rencontrĂ© un problĂšme alors que nous travaillions sur un projet Sitecore XM Cloud qui sâest avĂ©rĂ© assez intĂ©ressant.  Le problĂšme Ă©tait liĂ© au fait que les images publiĂ©es sur Experience Edge ne se chargeaient pas comme prĂ©vu dans certains rendus.  Les requĂȘtes GET pour ces images dans Experience Edge renverraient un 404 code dâĂ©tat plutĂŽt que le code attendu 200.  Ce problĂšme ne semblait se produire que pour les images rĂ©cemment mises Ă  jour et les nouvelles images rĂ©cemment publiĂ©es sur Experience Edge.  De plus (et cela prĂȘte Ă  confusion), des images plus anciennes et existantes (qui nâĂ©taient pas rĂ©cemment publiĂ©) toujours chargĂ© comme prĂ©vu.
Pour le contexte, notre solution XM Cloud propose une application principale Next.js hébergée sur Vercel en utilisant la version Next.js 12.2.5 et @sitecore-jss/sitecore-jss-nextjs version 21.0.0.  Notre solution utilise exclusivement la langue anglaise (en).
EnquĂȘte đ
AprĂšs avoir exclu les Ă©lĂ©ments typiques comme sâassurer que tout a Ă©tĂ© publiĂ© (et republiĂ©), vĂ©rifier les associations aux Ă©lĂ©ments de source de donnĂ©es, vĂ©rifier la rĂ©ponse GraphQL du service de mise en page et mĂȘme vider le cache Experience Edge, nous avons choisi dâouvrir un ticket avec Sitecore. Je voulais voir si dâautres membres de la communautĂ© Sitecore avaient vĂ©cu quelque chose de similaire, jâai donc posĂ© une question dans la communautĂ© Sitecore Slack et jâai finalement créé un message correspondant. question sur Ăchange de pile Sitecore.
Pendant que le ticket Sitecore mijotait, notre Ă©quipe a continuĂ© Ă dĂ©panner les URL des images. LâURL provenant du service de mise en page ressemblait Ă ceci (Ă titre dâexemple) :
https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?h=495&iar=0&w=692&sc_lang=en  â
(200)
Dâaccord, cool ;  cette URL a Ă©tĂ© rĂ©solue lors de la navigation directe.  En regardant le balisage rendu sur les pages problĂ©matiques, il a Ă©tĂ© notĂ© que seuls les composants utilisant des images rĂ©actives (rĂ©fĂ©rence) a exposĂ© le problĂšme.  Le Image composant (du @sitecore-jss/sitecore-jss-nextjs forfait) comprend une propriĂ©tĂ©, srcSet, pour prendre en charge les images rĂ©actives.  Le rendu <img> la balise ressemblait Ă  ceci :
<img ... width="692" height="495" class="img-responsive" loading="lazy" srcset="https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?mw=991 991w" src="https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?h=495&iar=0&w=692&sc_lang=en">
Le src LâURL de lâattribut a Ă©tĂ© rĂ©solue comme prĂ©vu.  Cependant, le srcset Attribut dâURL associĂ© au 991 largeur nâa pas  rĂ©soudre comme prĂ©vu :
https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?mw=991  â(404)
Fait intĂ©ressant, aprĂšs avoir ajoutĂ© manuellement le sc_lang paramĂštre Ă  lâURL, il a fait  rĂ©soudre comme prĂ©vu :
https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?mw=991&sc_lang=en â
(200)
Pourquoi serait sc_lang ĂȘtre obligĂ© de rĂ©cupĂ©rer des images alors que cela ne lâĂ©tait pas auparavant ?  Eh bien, le support Sitecore avait une rĂ©ponse : une correction de bug affectant versionnĂ© des Ă©lĂ©ments multimĂ©dias ont rĂ©cemment Ă©tĂ© dĂ©ployĂ©s sur Experience Edge.  En regardant le journal des modifications de XM Cloud (ici), JE pense ce Ă©tait la mise Ă  jour spĂ©cifique ;  cependant, je nâen suis pas sĂ»r car il y a plusieurs entrĂ©es apparemment adjacentes dans le journal des modifications.
Si
languageEmbeddingest réglé sur jamais dans leurlbuilder.configdéposer,mediaItemles entités renvoient désormais lesc_langparamÚtre.
Le changement tel quâexpliquĂ© par le support Sitecore :
[In Experience Edge] Lorsquâun Ă©lĂ©ment multimĂ©dia est publiĂ©, un
MediaItemlâentitĂ© est gĂ©nĂ©rĂ©e par la mĂ©thode suivante sur CM :Sitecore.ExperienceEdge.Connector.EntityGenerator.MediaDeliveryEntityGenerator.GenerateMediaEntity(...)Ce
MediaItemlâentitĂ© comporte plusieurs champs contenant des URL et des chemins dâaccĂšs aux mĂ©dias.Pour les Ă©lĂ©ments multimĂ©dias versionnĂ©s, chacun de ces champs doit contenir le
sc_langparamĂštre.
Sortie nette : Depuis environ 2 mois, si vous le souhaitez versionnĂ© images publiĂ©es sur Experience Edge pour se charger correctement, vous avoir  pour inclure le sc_lang paramĂštre.  Experience Edge nâest pas par dĂ©faut en et nâinclut pas de solution de secours dans le cas contraire, si sc_lang nâest pas prĂ©sent, vous obtiendrez un 404.
Ce changement, associé au fait que le Image composant dans le @sitecore-jss/sitecore-jss-nextjs emballer se déshabille  le sc_lang paramÚtre lors de la résolution des différents srcset Les URL signifiaient que nos images versionnées utilisées comme images réactives ne se chargeaient pas correctement sur le front-end.
CâĂ©tait en quelque sorte une tempĂȘte parfaite compte tenu des Ă©lĂ©ments suivants :
- Le correctif Experience Edge pour les éléments multimédias versionnés a probablement été publié fin février.
 - Notre Ă©quipe de dĂ©veloppement et les auteurs de contenu nâavaient pas mis Ă jour, ajoutĂ© ou publiĂ© des Ă©lĂ©ments multimĂ©dias depuis un certain temps, le problĂšme nâa donc pas Ă©tĂ© immĂ©diatement remarquĂ©. En dâautres termes, peu dâimages versionnĂ©es ont Ă©tĂ© publiĂ©es sur Experience Edge.
 - Le 
ImageComposantssrcSetla propriĂ©tĂ© Ă©tait utilisĂ©e, ce qui transformait en consĂ©quence lâURL provenant du service de mise en page, mais, ce faisant, supprimait le (maintenant requis)sc_langparamĂštre. đ 
La solution â
Forts de la connaissance quâĂ  lâavenir, les images versionnĂ©es publiĂ©es sur Experience Edge exiger le sc_lang paramĂštre, jâai commencĂ© Ă  implĂ©menter un correctif pour nos rendus en utilisant le srcSet propriĂ©tĂ© du Image composant.  Jâai fini par crĂ©er une petite fonction dâassistance pour faire abstraction de lâanalyse de la chaĂźne de requĂȘte et de lâinclusion conditionnelle du sc_lang paramĂštre dans le tableau passĂ© dans le srcSet propriĂ©tĂ© (comme recommandĂ© par le support Sitecore).  La fonction dâassistance ressemblait Ă  ceci :
export const buildSrcSetParams = (imageSizeParameters: ImageSizeParameters[] | undefined, image: ImageField): ImageSizeParameters[] | undefined => {
  let retVal = imageSizeParameters;
  if (!image?.value?.src) {
    return retVal;
  }
  const queryParams = new URLSearchParams(image.value.src.split('?')[1]);
  const scLangParam = queryParams.get('sc_lang');
  if (retVal && scLangParam) {
    // add sc_lang parameter
    retVal = retVal.map((isp) => ({
      ...isp,
      sc_lang: scLangParam,
    }));
  }
  return retVal;
};
Auparavant, le Image les composants ressemblaient à ceci :
<Image field={props?.fields?.Image} srcSet={ [ { mw: 991 } ] } ... />
En utilisant la nouvelle fonction dâassistance, ils ressemblaient Ă ceci :
<Image field={props?.fields?.Image} srcSet={buildSrcSetParams([ { mw: 991 } ], props?.fields?.Image) } ... />
Maintenant, au lieu du srcset URL résolue en :
https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?mw=991  â(404)
Il a résolu de :
https://edge.sitecorecloud.io/<tenant>/media/foo.jpg?mw=991&sc_lang=en  â
(200)
PensĂ©es finales đ
De toute Ă©vidence, devoir apporter, tester et dĂ©ployer une modification de code en production en rĂ©ponse Ă  un correctif de bogue Experience Edge nâĂ©tait pas gĂ©nial.  On peut soutenir que Experience Edge reviendrait Ă  une langue par dĂ©faut configurable (par exemple en) ou vers une image non versionnĂ©e, si disponible.
Depuis le 17/04/2024, le support Sitecore a confirmé que ce scénario était reproductible en utilisant la version
21.6.0de la@sitecore-jss/sitecore-jss-nextjspackage et que lâĂ©quipe produit examinerait plus en dĂ©tail.
Le 23/04/2024, le support Sitecore a reconnu ce problÚme comme un bug et a émis un numéro de référence : JSS-1902.
Les produits SaaS de Sitecore tels que XM Cloud et Experience Edge Ă©voluent et sâamĂ©liorent constamment, ce qui est formidable ; en fait, câest un argument de vente majeur lorsquâil sâagit dâadopter XM Cloud. IdĂ©alement, notre Ă©quipe aurait eu connaissance ou aurait Ă©tĂ© informĂ©e de ce changement radical Ă lâavance. Comment aurions-nous fait cela ? Je ne suis pas sĂ»r, sauf peut-ĂȘtre en suivant dâun peu plus prĂšs le journal des modifications de XM Cloud đ .
Source link

