Thursday, June 20, 2019

Redeploy your SPFx Extension to SharePoint

One of the charms of SPFx Extensions is that they apply tenant-wide: they can be configured for immediate utilization in all modern site collections in your tenant. On SharePoint foundational level this works via the concept of good-old CustomAction that is injected into the context of each modern site collection. In the SPFx Extension package the CustomAction is configured as Feature deployment. Via the parameter 'skipFeatureDeployment' in the package-solution.json (see 'Tenant-scoped solution deployment for SharePoint Framework solutions') you can configure the SPFx Extension to be immediate available across all the sites in the tenant when the solution package is installed to the tenant app catalog, without need to explicit activate the CustomAction feature in each individual site.
This works out fine on the initial deployment of your SPFx extension: the deployed SPFx header automatically is included and active on each site.
On initial deploy, SPFx Extension included once in each modern site
However, in case of need for redeployment, you must be aware of a current glitch: the SPFx Extension gets multiplied per each re-deployment. The cause of this is in how the (semi)immediate and tenant-wide application of the CustomAction is applied. The CustomAction is not injected in the scope of each individual site (Web.UserCustomActions does not include the CustomAction of the SPFx Extension); but is injected as Tenant Wide Extensions. In case of "skipFeatureDeployment": true in the package-solution.json file, on upload / install of the .sppkg file in the tenant App Catalog the administrator is asked to set the 'Make this solution available to all sites in the organization' checkbox. If set, a row is added in the list 'Tenant Wide Extensions' in the App Catalog site. And on re-upload / redeploy, the checked setting is applied again, resulting in duplicate entries for the same SPFx Extension in the Tenant Wide Extensions list. This results that the CustomAction is applied multiple times per each site, and therefore that the SPFx Extension is included multiple times in each site...
As side-effect of re-deploy, SPFx Extension is multiplied in 'Tenant Wide Extensions' list
Result is that the SPFx Extension is included multiple times per each site
Correcting this faulty situation is simple once you know how-to (thanks to Vesa Vujonen for fast response on support question raised): just remove the duplicate entries from the Tenant Wide Extensions list. Mind you, it can take some elapse time before the effect of this is structural applied accross all the WFE's involved in serving the sites of one's tenant.
Fix by removing the duplicate rows in Tenant Wide Extensions
Then the SPFx Extension again included once, and referring to latest package version

Saturday, June 15, 2019

How-to remain in control of Live Events scheduling

See previous post, in the production of a Stream Live Events are 3 different roles involved:
  • Organizer
  • Producer
  • Presenter
The organizer is the person that can schedule / create new Live Events, and becomes the owner of them. Although there is no limitation stated on the amount of Live Events running in parallel, it makes perfect sense to govern this. You don't want to risk that the webcast experience of the CEO Townhall is hampered because too many other Live Events are running within same or overlapping timeslot. In order to avoid wildspread of Live Events, Stream supports via admin settings that the authorization to create Live Events is restricted to specific identified persons only / not for everyone in your organization.
The person creating / scheduling a Live Event, automatically also becomes the owner. However, in the differentiation of the webcast roles; the organizer should not need to be involved in any of the production aspects on the actual moment of the event. To achieve that, the person that will act as the producer of a specific event, must also be made the owner of the scheduled Live Event. As owner, the producer can pick up the scheduled Live Event, set it in edit mode, and then start and stop the event from the Stream webapplication.
Organizer creates / schedules (on request of Producer) a new Live Event
Organizer assigns / shares ownership of the scheduled Live Event to the Producer
On scheduled datetime of webcast, the Producer looks up the scheduled Live Event in Stream web application
On scheduled date of webcast, the Producer starts Setup of the Live Event
On scheduled date of webcast, the Producer is in-control to start the actual broadcasting once the production encoder sends the stream input signal

Friday, June 14, 2019

Plug-In outside producer in Stream Live Events

In a broadcast execution via Stream Live Events, the following roles are involved:
  • Organizer
  • Producer
  • Presenter
(source: Get started with Microsoft Teams Live Events). The person within the Organizer role schedules the live event, and requires the proper authorization in your tenant for that. But next the system design of Stream Live Events allows that for the production part you can delegate to outside your company infra. The plug-in interface for this is the unique RTMP(S) ingress endpoint address of the scheduled Live Event. This endpoint is accessible on the public internet. The producer can configure the encoder on the production / event location to stream as input of the Live Event for broadcasting within your Office 365 tenant. The ultimate production control remains with the authorized owner(s) of the Stream Live Event: to start the actual broadcasting once the received stream input is ok for sending to the audience, and stop the Live Event once the event / presenter is finished (and also when in unlikely case that the producer produces a live recording that is inappropriate or non-compliant with your business policy).

Wednesday, May 8, 2019

Opt-In Modern List Experience on Communication Site obstructs upgrade SPFx app via UI

An approach to upgrade a deployed 'App for SharePoint' is to open the site that contains the AppCatalog (either tenant, or site collection with own app catalog) in a browser, go to 'Site Contents', and double click the App. In the 'About' dialog it will then present the option to upgrade. When the site is in Modern List experience, this approach is hampered: also the 'Site Contents' view is then within Modern View; and the available options there for any App are limited to 'Monitor' and 'Remove'. Microsoft is aware of the issue, and for now advises to apply a workaround: in the Modern 'Site Contents' view, click in the lower-left corner on 'Return to classic SharePoint'. This results that on the fly the 'Site Contents' view is rendered in classic mode, and the approach to upgrade App are available for usage. However, it turns out this workaround is only available for Modern Team sites, but not for Modern Communication Sites. Direct cause is that Communication Sites by Microsoft Design do not have the 'Left Navigation' (see Modern SharePoint Sites navigation options). And by Microsoft Design flaw this lack of left navigation is propagated into application and listview pages, including 'Site Contents' (Communication Site - Left Navigation Missing in Lists / Libraries). This leaves as only workaround for Communication Site to support upgrade of (SPFx) Apps interactive through the SharePoint UI, is “Opt out of the Modern list and library experience” for that site; at least for the moment when you need to upgrade any of the (SPFx) Apps in the (site) app catalog.
Note that the non-UI approach of upgrade via PowerShell (Update-SPAppInstance)is not hampered by the Modern List Experience.

Tuesday, May 7, 2019

Beware: Co-Authoring in SharePoint stored Excel sheet conflicts with column-filtering

For the scenario that multiple persons must be enabled to simultaneous maintain their records in a shared data container, at first consideration the usage of Excel file stored in SharePoint Online appears a valid option. Thanks the Co-Authoring capability available in Excel Online and Excel Client. This setup may fit the usage scenario, unless the users want to make use of filtering in the Excel sheet to easily find the records one needs to maintain. The motivation that this breaks the scenario is that column-filtering is not limited to the operational view state within the clients, but is itself part of the saved state of the Excel file. This results that the filter applied by user A in his/her client context with the Excel file, via AutoSave almost immediately is propagated into the shared saved state of the Excel file, and next influences the application view state of user B that also has the sheet opened. This non-isolated behavior of applying a column filter kills the usability of the Excel viewing and editing in co-authoring mode. In case the data to manage is flat of structure, and without need for Excel macros, a better option is administer the data records in a SharePoint list, and educate the business to maintain their own records in that list in quick edit mode combined with column-filtering. Contrary to Excel editing, the full client context of working with a SharePoint list is isolated to only the list view; and not persistent in the data.
Note: this behavior is already requested for change on uservoice: Filtering Needs to Work in Co-Authoring. But apparent a difficult capability to deliver: the idea submission originates of 2017, the response by Microsoft development team is nearly 2 years later. However, that acknowledgement and moreover its recent date does give trust that Microsoft will now fix it in foreseeable time.

Friday, April 26, 2019

Weighing of customizing options for Questions & Feedback capability with Stream Live Events

In "Options considered for extending Stream Live Events with live chat/questions capability" I enumerated multiple options for enriching the Stream Live Events experience with Questions & Feedback capability. In below overview, I enlist pros and cons weighing of the diverse options.
OptionProsCons
Via Yammer
  • Existing / available IT building block within Office 365 suite;
  • Low-code solution: only a bit of JavaScript needed for correct visual embedding in the landings page;
  • Access can be limited to selected audience;
  • Live feed visible of questions, also the ones raised by others;
  • Possible to respond on questions / feedback of others;
  • Chat-like experience
  • Separated information container from the webcast;
  • Authorization to be done 2x (Stream and Yammer), with risk of inconsistency / out-sync
  • Not every webcast visitor is an active Yammer user;
  • On authorizing account to the Yammer channel, one receives a notification email; while the context is totally unclear, and the Yammer channel should not even be open for submitting questions & feedback;
  • Questions and Feedback of others are visible to all;
  • Yammer channel remains afterwards, Need to remove all access to avoid unwanted visits after the webcast;
  • Not simple to capture / archive the questions & feedback
Via MS Forms + MS Flow + SharePoint Online List;
Forms embedded on page via MS Forms webpart
  • Existing / available IT building blocks within Office 365 suite;
  • Fully No-Code solution;
  • Access limited to the webcast authorized audience;
  • Included in same data container as webcast, sufficient to authorize once;
  • Access after live event can be removed via SharePoint permission handling;
  • No need for additional Yammer accounts / affinity;
  • Possible to add classification in the questions, eg from dropdown select a topic area. In the capture list, possible to group on the topics;
  • Easy to get a dump of the feedback, eg in Excel; and then decide whether to delete the list or simple make it inaccessible;
  • Modern look, responsive behavior
  • No live feed for webcast visitors on total of submitted questions / feedback;
  • Limited styling capability;
  • Placeholder per question is always “Enter your answer” / not possible to change that;
  • The usage experience after submit input is aimed at “survey scenario” (“your response was submitted”);
Variant of above:
Forms embedded on page via iframe construct
  • Same list as above;
  • and in addition it is possible to preserve the style heading and hide the message at bottom
  • Same list as above, with exception of message at bottom;
  • After submit input, out-of-context the submitter is confronted with ‘promotional’ message that one can create your own form / survey. The user cannot relate this message.
SharePoint List + default / classic NewForm
  • Existing / available IT building block;
  • Fully No-Code solution;
  • Embedded NewForm can be embedded without LeftNavigation + Header in ‘dialog-mode’ (put “&IsDlg=1” on URL);
  • Access limited to the webcast authorized audience;
  • Included in same data container as webcast, sufficient to authorize once;
  • Access after live event can be removed via SharePoint permission handling;
  • No need for additional Yammer accounts / affinity;
  • Possible to add classification in the questions, eg from dropdown select a topic area. In the capture list, possible to group on the topics;
  • Easy to get a dump of the feedback, eg in Excel; and then decide whether to delete the list or simple make it inaccessible;
  • UI-look not optimized for user-experience of ‘Questions & Feedback’ capability;
    • Toolbar in top, including actions not relevant in this context
    • Cancel button in bottom; also irrelevant in this context
  • Width of NewForm is that large that it requires 2-column page layout ( 2:1 layout results in horizontal scrollbar); which results that the available screen estate for webcast is reduced, and that in the layout the webcast UI is not allowed more significance above the Questions & Feedback UI;
  • Customization of the default NewForm needed to only show the multiline ‘Question’ input field;
  • After submit of a new item, the iframe loads the list view iso returning to (empty) NewForm;
SharePoint List + customized NewForm via PowerApps
  • Existing / available IT building blocks within Office 365 suite;
  • Low-code solution: only a bit of JavaScript needed for correct visual embedding in the landings page;
  • Access limited to the webcast authorized audience;
  • Included in same data container as webcast, sufficient to authorize once;
  • Access after live event can be removed via SharePoint permission handling;
  • No need for additional Yammer accounts / affinity;
  • Possible to add classification in the questions, eg from dropdown select a topic area. In the capture list, possible to group on the topics;
  • Easy to get a dump of the feedback, eg in Excel; and then decide whether to delete the list or simple make it inaccessible;
  • Modern look, responsive behavior;
  • The canvas of PowerApps is positioned at the layout of Phone App, and cannot be reduced in height, even when the App itself does not need that height. Scrollbars can be avoided however by reserving the needed height in screen layout, “wasting” screen estate. In this context acceptable, as no other controls are included on the page and positioned below the Question & Feedback. However, the increased page height does result in unnecessary browser scrollbar on the right;
  • Embedded part shows toolbar in top, and not a submit button below the question/feedback input;
  • Embedded NewForm default shows the label ‘New item’;
  • After submit of a new item, the iframe loads the list view iso returning to (empty) NewForm
All of above drawbacks can be prevented, via a bit of custom code
Custom UI / control + SharePoint List
  • Access limited to the webcast authorized audience;
  • Included in same data container as webcast, sufficient to authorize once;
  • Access after live event can be removed via SharePoint permission handling;
  • No need for additional Yammer accounts / affinity;
  • Possible to add classification in the questions, eg from dropdown select a topic area. In the capture list, possible to group on the topics;
  • Easy to get a dump of the feedback, eg in Excel; and then decide whether to delete the list or simple make it inaccessible;
  • Modern look, responsive behavior;
  • Custom coded solution: Requires custom development, testing and deployment;
  • Deployment as control requires some additional preparation on SharePoint site (Site Collection App Catalog)
Standalone PowerApps + SharePoint List
  • Existing / available IT building blocks within Office 365 suite;
  • Low-code solution: PowerApps itself + embedding in SharePoint page;
  • No need for additional Yammer accounts / affinity;
  • Possible to add classification in the questions, eg from dropdown select a topic area. In the capture list, possible to group on the topics;
  • Easy to get a dump of the feedback, eg in Excel; and then decide whether to delete the list or simple make it inaccessible;
  • Modern look, responsive behavior;
  • PowerApp also available for Mobile
  • Separated information container from the webcast;
  • Authorization to be done 2x (Stream and PowerApps);
  • Webcast Questions & Feedback App is available on tenant level, not limited within the boundary / scope of the associated webcast event;
  • Webcast Questions & Feedback App on Mobile is separate from Stream Mobile App, user would have to switch between Apps to submit question/feedback;
Azure Bot
  • Proactive + automated responses on recurring questions and reported issues;
  • Self-learning knowledge base
  • Considerable design + development effort
  • Bots experience no natural fit for submitting questions and feedback

Sunday, April 7, 2019

Options considered for extending Stream Live Events with live chat/questions capability

With the recent GA of Stream Live Events, Microsoft delivers a low-entry option to easily setup company-internal webcasts. All you need in addition are on the webcast producing side: 1) recording equipment - camera + audio, and 2) an encoder solution to transmit the recording inputs into the Live Events endpoint. The camera + audio options vary from the onboard webcam + microphone of a laptop, USB-based externals, upto high-end studio-quality equipment. For Stream Live Events handling the sophistication on the producing input side does not make a difference, the inputted RTMP(S) signal is from input endpoint processed the same. Whether an organization also needs some additionals on the consumption side depends on the audience side plus the internal network capacity. Watching a Live Event instantiates an individual / unicast stream per event viewer. Under assumption that the company network is sufficient scaled for nowaday cloud solutions usage, it is feasile to simultanuous watch a 'LIVE' Stream event per network location upto a maximum of few hundreds. In case of bigger audience, Microsoft states that it is needed to reduce the network load via a video distribution approach through a SDN/eSDN solution.
In its first released version, Stream Live Events capabilities are focussed on the core streaming + playing aspects. Business demands on a webcast typical go beyond that. The biggest additional demand is for interaction between the webcast audience and the presenter. Thus a chat window in which individual attendees can submit their questions, and that the presenter can follow + respond on. It is on the roadmap of Stream Live Events to deliver this (note: Stream recent delivered 'quizzes/ polls' capability, but this is targetted at inserting in already recorded videos for a.o. training purposes; not for dynamic interaction with live streaming), but not out-of-the-box delivered nowadays. However, with Office 365 as underlying platform you have as event developer a feature-rich toolbox at hand in which you can deliver yourself a webcast experience in which viewers have the live stream and chatbox combined, via no-code or low-code approaches. The hosting platform of such landingspage is naturally SharePoint Online....; as every created Stream Group is effectively an Office 365 Group, it has an own SharePoint Modern Team Site provisioned. The persons authorized to this site is the same audience that are permitted to join the scheduled Live Event. Create in this site a new page to function as the webcast entrance, and select the '2:1 columns' layout. In the left column embed the Stream Live Event instance - one gets this from Stream via 'Share' and then pick the 'Embed' option. With this setup, all left is to extend with chatbox / questions input control. There you have multiple options. One is to utilize the rich capabilities of Yammer, and embed a Yammer channel on the page. This gives you immediate a 'chat-like' experience, in which one can enter questions, semi-live follow the inputs / chats of others, respond on inputs of others. This immediate visibility of all the responses of ones peers may be unwanted, e.g. due potential sensitivity. In that case an alternative setup is to capture the inputs in a SharePoint list in the site, and only grant the webcast facilitators the authorization to view all received inputs. The webcast attendees submit their questions and feedback via an input form embedded on the SharePoint page. For this on sublevel again multiple alternatives are available. You can embed the out-of-the-box NewForm of the list; customize the NewForm via PowerApps; a MS Forms instance that via MS Flow sends the input to SharePoint List; or build a custom control via SPFx or even as a chatbot via Azure Bot Service. Of these options all except for the latter 2 are no/low-code 'mash-up' compositions, that deliver on the needed job. The decision-weighing between them is mostly on the user-experience and branding, see screen impressions of the various options.