SharePoint / sp-dev-docs

SharePoint & Viva Connections Developer Documentation
https://docs.microsoft.com/en-us/sharepoint/dev/
Creative Commons Attribution 4.0 International
1.24k stars 1k forks source link

ListView Command Set extension suddently stopped working - only loads when page is refreshed with Ctrl+F5 #9896

Open JLRishe opened 2 weeks ago

JLRishe commented 2 weeks ago

Target SharePoint environment

SharePoint Online

What SharePoint development model, framework, SDK or API is this about?

💥 SharePoint Framework

Developer environment

None

What browser(s) / client(s) have you tested

Additional environment details

Describe the bug / error

I am the maintainer of a SPFx package that is used in a few dozen customer tenants and contains a List View Command Set extension, a Field Customizer extension, and a web part.

Two days ago, one of my customers who has been using this package for about this year reported that the List View Command Set button had suddenly stopped displaying on multiple list pages (possibly all of the list pages where it is in use).

I have met with him to troubleshoot and observed the following:

What can I do to troubleshoot or remedy this issue?

Console when Command Set fails to load

Not loading console markup

Console when Command Set loads

Loading console markup

Network requests when Command Set fails to load

image

Network request when Command Set loads

Loading requests

Steps to reproduce

Currently I only know this to reproduce in my customer's environment.

  1. Navigate to a list page that has the Command Set extension configured
  2. View the command bar

Expected behavior

The Command Set button should display.

Marker4 commented 1 week ago

I am seeing the same thing with a Command Set Extension that was developed with SPFX 1.13.1. This is a project that was working fine for years. But with the new SharePoint List UI that the tenant recently got, the buttons are no longer visible.

I tried to troubleshoot by creating a new Command Set HelloWorld Extension using the MS Learn example and spfx 1.13.1: https://learn.microsoft.com/en-us/sharepoint/dev/spfx/extensions/get-started/building-simple-cmdset-with-dialog-api

When I try to gulp serve or gulp bundle, this error is thrown: AppData\Roaming\nvm\v14.15.4\node_modules\gulp-cli\bin\gulp.js at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15) at Function.Module._load (internal/modules/cjs/loader.js:725:27) at Module.require (internal/modules/cjs/loader.js:952:19) at require (internal/modules/cjs/helpers.js:88:18) at Object. (C:--\command-extension\node_modules\@azure\logger\dist\commonjs\log.js:7:19) at Module._compile (internal/modules/cjs/loader.js:1063:30) at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10) at Module.load (internal/modules/cjs/loader.js:928:32) at Function.Module._load (internal/modules/cjs/loader.js:769:14) at Module.require (internal/modules/cjs/loader.js:952:19) { code: 'MODULE_NOT_FOUND',

If I update to spfx 1.19.0 and npm 18.19.1 to create the MS Learn Example, I am able to package and deploy without an issue. The Command Set buttons appear as expected.

Can someone run a similar test with spfx 1.13.1?

gerkevgarderen commented 1 week ago

We are seeing the same issue since the forced rollout of the new Lists experience. However, even Ctrl + F5 does not consistently allow the Command Sets to load, only some of multiple tries succeed.

Same as your description we're seeing that other extensions, deployed in the same app package, are loading successfully. Even initialization logs of Command Set extensions do not show up in the console at all.

Really hope there will be a quick fix/rollback for this. It's very frustrating there's nothing we can do to rollback or fix the issue, especially since it's clear from earlier issues that there have been many lingering issues with the new Lists experience.

SPJS commented 1 week ago

I see the same behavior where the Command Set Extension does not load until you do a hard refresh.

Turning off Sync under Microsoft Lists (Waffle icon in top left corner > Lists > Hover over the list and click ... > Turn off Sync) fixes the issue, but from what I can see this setting is personal and there is no method to turn this off on a list for all users.

It doesn't seem to be the same setting that you can find in List settings > Advanced settings > Offline Client Availability > Allow items from this list to be downloaded to offline clients. From what I can see, turning off this setting does not make any difference.

Please fix!

Alexander

reedpamsft commented 1 week ago

Thanks folks. We are aware of and working on an issue where command sets don't load when a list is syncing. As mentioned in this thread, the workaround for now is to stop syncing on the list.

Marker4 commented 1 week ago

Can someone provide more information on this workaround? I don't see the ability to turn off syncing as described for MS Lists.

We are using SharePoint Online. Both lists have "Allow items from this list to be downloaded to offline clients?" set to "No" which has made no difference on our end. Hard Refresh (Ctrl + F5) is also not working to get the Command Sets to display.

While it is great that there is a workaround that is working for some people, it does not appear to be working for all. It is not working on my client's tenant.

Please test with a Command Set created with SPFX 1.13.1

SPJS commented 1 week ago

If you click the Waffle icon (the 9 dots icon) in the top left corner of your SharePoint site you should see a "Lists" icon. Click it and you should see your list under "Recent lists". Hover over the list, click the ... icon and click "Stop syncing".

Alexander

Marker4 commented 1 week ago

@SPJS I did try to follow your prior instructions. I'm just not seeing it on either site I am looking at: MSListSettingsExample

keraaj1980 commented 1 week ago

@SPJS I did try to follow your prior instructions. I'm just not seeing it on either site I am looking at: MSListSettingsExample

Same here. I dont see the option to "Stop syncing".

keraaj1980 commented 1 week ago

Thanks folks. We are aware of and working on an issue where command sets don't load when a list is syncing. As mentioned in this thread, the workaround for now is to stop syncing on the list.

Workaround is not working for everyone. Please fix!

gerkevgarderen commented 1 week ago

@SPJS I did try to follow your prior instructions. I'm just not seeing it on either site I am looking at:

Same here; 'Stop Syncing" is available for some lists, but for the lists where we have CommandSets deployed, this option is not available.

It doesn't seem to be the same setting that you can find in List settings > Advanced settings > Offline Client Availability > Allow items from this list to be downloaded to offline clients. From what I can see, turning off this setting does not make any difference.

The value of this setting also does not impact the issue for us. I have checked sites where this was already on 'Off' for a longer time, but no luck. Sites with the setting "On" in many cases still don't show the Stop Syncing. All of the sites do not consistently load CommandSets (Ctrl+F5 sometimes causes it to render, still not consistently).

Seems to me like it's not necessarily related to the Syncing.

reedpamsft commented 1 week ago

@gerkevgarderen there is another issue reported in a different thread where certain deprecated API's are not currently supported in the new UI, so you might be seeing that.

keraaj1980 commented 1 week ago

@gerkevgarderen there is another issue reported in a different thread where certain deprecated API's are not currently supported in the new UI, so you might be seeing that.

@reedpamsft - Do you have any updates on the fix? The workaround doesn't seem to work on my end,

SPJS commented 1 week ago

@Marker4 @keraaj1980 @gerkevgarderen I found an older article (from 2022 - link) mentioning that different “complex” field types like lookups or managed metadata will stop syncing of that list. Microsoft has most likely changed the functionality since that article, but I assume it might be something like that preventing you from finding the “stop syncing” option.

Alexander

keraaj1980 commented 1 week ago

@Marker4 @keraaj1980 @gerkevgarderen I found an older article (from 2022 - link) mentioning that different “complex” field types like lookups or managed metadata will stop syncing of that list. Microsoft has most likely changed the functionality since that article, but I assume it might be something like that preventing you from finding the “stop syncing” option.

Alexander

Thanks for sharing the link, @SPJS!

I don't have a managed metadata column or a lookup column on one of the lists and I still don't see the option to "stop sync" option.

keraaj1980 commented 1 week ago

@reedpamsft - Do you have any updates?

Marker4 commented 1 week ago

@Marker4 @keraaj1980 @gerkevgarderen I found an older article (from 2022 - link) mentioning that different “complex” field types like lookups or managed metadata will stop syncing of that list. Microsoft has most likely changed the functionality since that article, but I assume it might be something like that preventing you from finding the “stop syncing” option.

Alexander

Just to double check this, I created a new blank list in SharePoint with just a Title field. No "Stop Sync" MSListSettingsExampleBlankList

gerkevgarderen commented 1 week ago

@gerkevgarderen there is another issue reported in a different thread where certain deprecated API's are not currently supported in the new UI, so you might be seeing that.

@reedpamsft Thanks for the reply! The deprecated APIs is about #9898 for example right? We have deployed fixes for the deprecated API, which works well in development. However, this only helps if the extension is being loaded. The issue now is that in many cases it doesn't load the CommandSet extensions at all, while other types of extensions deployed in the same package function fine. Sometimes it works after Ctrl + F5, but even that works half of the time at best.

This might be due to syncing, but as mentioned above, we do not have the option to Stop Syncing for our affected lists. Possibly related to what @SPJS found (thanks for that!):

@Marker4 @keraaj1980 @gerkevgarderen I found an older article (from 2022 - link) mentioning that different “complex” field types like lookups or managed metadata will stop syncing of that list. Microsoft has most likely changed the functionality since that article, but I assume it might be something like that preventing you from finding the “stop syncing” option.

Alexander

keraaj1980 commented 1 week ago

Not sure if they rolled back the update? The list view has reverted back to the old look and the command set buttons have started appearing now.

Marker4 commented 1 week ago

Not sure if they rolled back the update? The list view has reverted back to the old look and the command set buttons have started appearing now.

I just did a hard refresh/clear cache and I am seeing the same thing in both lists with an issue. The old UI is back with the Views as a dropdown instead of tabs. The Command Set buttons are also back.

reedpamsft commented 1 week ago

@gerkevgarderen @keraaj1980 @Marker4 yes, we rolled back the new UI based on the two issues being experienced (no command customizers when a list is syncing, and lack of support for the deprecated onListViewUpdated event).

henningeiben commented 1 week ago

@reedpamsft: is there any release-note on the deprecation of onListViewUpdated? What I noticed is, that in commandbar-extensions the IListViewCommandSetExecuteEventParameters has a property selectedRows which was undefined in the new modern UI experience. In issue 9514 there was a proposed workaround - is this the official recommended future solution to use this.context.listView.selectedRows instead of event.selectedRows?

This property also exists in IListViewCommandSetListViewUpdatedParameters which is the parameter for the forementioned onListViewUpdated method - is here also this.context.listView.selectedRows proposed solution?

VesaJuvonen commented 1 week ago

@reedpamsft and @henningeiben - just to follow up on this also from my side.

I don't think the deprecated code (onListViewUpdated) was never communicated externally, which seems to now cause challenges worldwide, given the millions of users for these extensions. Let's align on this internally @reedpamsft - so that we can work on the plan here. Typically any deprecation which would cause customer and partner code to break - have been communicated clearly with minimum 12 months heads up. This is required to avoid any breaking changes for deployed extensibility worldwide.

We'll work on a clear messaging this internally at Microsoft - Let's continue internal alignment on this @reedpamsft using internal channels and update the ecosystem as we have clear plan going forward. Thanks for jumping in here 👏

for the specific issues - the new UI changes have been rolled back as mentioned in the discussion.

henningeiben commented 1 week ago

@VesaJuvonen : I don't want to be a nitpicker, but the update did not only affected the onListViewUpdated method of SPFx extensions, but also the onExecute methode, which receives a parameter of type IListViewCommandSetExecuteEventParameters. This type has a property named selectedRows, which was undefined in the new modern UI ... either this was not intended or this needs to be migrated as well.

Can you confirm this?

VesaJuvonen commented 1 week ago

@henningeiben - no worries on the keeping us honest and you are 100% correct. All of those would be breaking changes for the public codebase. We will revisit this change and messaging internally in Microsoft. Right now the change has been reverted and you should be back to the normal situation which has worked for years. We will work alignment internally.

buettiB commented 1 week ago

What I experience today is: List are in old layout if our App is on the site and they are in new layout if I delete the app. This is according to what I found at: https://app.cloudscout.one/evergreen-item/mc600726/

Users in affected tenants will see Lists feature updates as described in this blog post. These improvements will reach all Lists, except those that have been configured with the following features: SharePoint Framework extensions PowerApps forms Approvals The Playlist template Lists that are using these features will not receive the new user experience with this feature rollout. Future rollouts will bring support for Lists that are using these features.

svkcode commented 1 week ago

@reedpamsft to add to your list of things that did not work in the new UI, I noticed that after implementing the workaround, the commands showed up only in the command bar and not in the context menu, as pointed out in here: https://github.com/SharePoint/sp-dev-docs/issues/9905

And thanks for reverting back to the old UI!

reedpamsft commented 1 week ago

@svkcode thanks! That is on the list.

reedpamsft commented 1 week ago

@buettiB right. We had been rolling out the new UI for lists with command customizers, but given the scope of the issues reported here we suspended that rollout. Since the issue was only with command customizers, lists without command customizers should continue to see the new UI.

AKCprcrn commented 6 days ago

I'm still experiencing this issue even after the rollback. Have to press ctrl+F5 each time I want to see the list customizer. Some users report ctrl+F5 doesn't help anymore.

reedpamsft commented 6 days ago

@AKCprcrn are you seeing the new UI (with views in tabs across the top) or the old one (with the views as a dropdown)?

JonEOffice commented 6 days ago

@reedpamsft just for your info, last week (thursday) we had all users get the new version of the list, but now with our custom buttons being loading. We had the issue that we were using event.selectedrow so the selected buttons didn't show up. But the other buttons were showing up and working. This was rather unexpected and strange to suddenly get the new UI. CTRL+F5 and the fix in regards with adding stuff to the end of the URL didn't work anymore to get it back to the old version. Today we are all back into the old UI again. So my guess is there was a hickup last thursday.

reedpamsft commented 6 days ago

Thanks for confirming, @JonEOffice . We did indeed start rollout of support for command customizers in the new UI, but halted once it became clear that there was a large class of customizers which needed a particular event and data object which the new UI missed.

AKCprcrn commented 5 days ago

@AKCprcrn are you seeing the new UI (with views in tabs across the top) or the old one (with the views as a dropdown)?

No, it's an old UI, with views in a dropdown at the right top. When its failing to load, I'm getting these and similar messages in the console output:

All Entries.aspx:59  A preload for '***-command-set_9fc6d66485a74ded547e.js' is found, but is not used because the request credentials mode does not match. Consider taking a look at crossorigin attribute.

All Entries.aspx:59  A preload for '***/ControlStrings_en-us_b4cd8c7b74220c708c8044df7f813da4.js' is found, but is not used due to an unknown reason.

Access to fetch at '***/ControlStrings_en-us_b4cd8c7b74220c708c8044df7f813da4.js' from origin '***' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

The FetchEvent for "***/ControlStrings_en-us_b4cd8c7b74220c708c8044df7f813da4.js" resulted in a network error response: the promise was rejected.
SPJS commented 5 days ago

I'm seeing the "Old UI" on a list, but when refreshing the page the command set buttons in the banner disappears - still showing the Old UI and the command set does not load. If I do a hard refresh (Ctrl + Shift + r) it reappears.

If I disable sync (Waffle icon in the top left corner > Lists > Hover over the list in recent lists > Click ... > Stop sync) it works every time and does not disappear on reload of the page.

Checking /_vti_pvt/service.cnf shows this version: vti_encoding:SR|utf8-nl vti_extenderversion:SR|16.0.0.25221

When the command set does not load I see this in the developer console in Chrome: image

Alexander

reedpamsft commented 5 days ago

@SPJS thanks for letting me know. For now, I think you'll need to turn off sync. The sync team is working on a solution for this issue.

reedpamsft commented 5 days ago

@AKCprcrn thanks for the details. This seems like a new issue.