pnpframework icon indicating copy to clipboard operation
pnpframework copied to clipboard

Modernization - ScriptEditorWebPart from SP2013 doesn't get mapped to correct zone

Open jimmywim opened this issue 1 year ago • 0 comments

Source: SP2013 Classic Publishing Target: SPO Runtime platform: .NET

Overall question - does ZoneId just not get populated for some web parts when coming from SP2013 & SP2016 due to lack of properties in the CSOM?

I know the PublishingPageOnPremises.cs class tries to plug this gap by calling web services to fetch other properties, but it seems zoneid is always missing from ScriptEditorWebPart

I have a page layout mapping with defined zone mappings.

Some web parts got into the correct zone as defined in a custom layout mapping, but ScriptEditorWebParts (where we have custom transformation being done to turn them into SPFX equivalents, depending on the content of the Script Editor - the classic site had custom script within ScriptEditorWebPart, each following a set schema to create web parts, it was basically a proto-SPFX).

All ScriptEditorWebParts are going into a one column zone created before the custom layout created by the LayoutTransformator.

When debugging the custom LayoutTransformator, it seems the zoneid is always null for ScriptEditors.

Digging deeper, it seems that web parts exported from the source using the "v3" schema do not have zoneid exported, but web parts exported with the "v2" schema do.

Custom LayoutTransformator:

        public void Transform(Tuple<PageLayout, List<WebPartEntity>> pageData)
        {
            page.AddSection(PnPCore.CanvasSectionTemplate.OneColumn, 1);
            page.AddSection(PnPCore.CanvasSectionTemplate.TwoColumnLeft, 2);
            page.AddSection(PnPCore.CanvasSectionTemplate.TwoColumnLeft, 3);
            page.AddSection(PnPCore.CanvasSectionTemplate.ThreeColumn, 4);
            page.AddSection(PnPCore.CanvasSectionTemplate.OneColumn, 5);
            page.AddSection(PnPCore.CanvasSectionTemplate.ThreeColumn, 6);
            page.AddSection(PnPCore.CanvasSectionTemplate.TwoColumnLeft, 7);
            page.AddSection(PnPCore.CanvasSectionTemplate.TwoColumnRight, 8);
            page.AddSection(PnPCore.CanvasSectionTemplate.OneColumn, 9);
            page.AddSection(PnPCore.CanvasSectionTemplate.ThreeColumn, 10);
            page.AddSection(PnPCore.CanvasSectionTemplate.ThreeColumn, 11);
        }

WebPartZones mapping in the page layout mapping (yes, it's a horrible layout):

      <WebPartZones>
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone1" Row="1" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone1a" Row="2" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone1b" Row="2" Column="2" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone1c" Row="3" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone1d" Row="3" Column="2" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone1e" Row="4" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone1f" Row="4" Column="2" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone1h" Row="4" Column="3" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone2" Row="5" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone3" Row="6" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone4" Row="6" Column="2" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone5" Row="6" Column="3" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone6" Row="7" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone7" Row="7" Column="2" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone8" Row="8" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone9" Row="8" Column="2" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone10" Row="9" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone11" Row="10" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone12" Row="10" Column="2" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone13" Row="11" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone14" Row="11" Column="2" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone15" Row="11" Column="3" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone16" Row="12" Column="1" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone17" Row="12" Column="2" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone18" Row="12" Column="3" />
        <WebPartZone ZoneIndex="0" ZoneId="wpzZone19" Row="12" Column="4" />
      </WebPartZones>

EDIT: Updated to include SP2016 as I was able to reproduce here also.

jimmywim avatar Oct 09 '23 13:10 jimmywim