Articles about European Sharepoint Hosting Service
Posts tagged trick SharePoint 2013 Hosting
SharePoint Hosting – Custom RSS SPFx Feed WebPart In Modern UI
Feb 25th
Challenge
-
This web part is available only for Office 365 Group Enabled team sites.
-
Users should have Outlook account and it has to be manually added to the Office 365 group.
-
Only supports 2500 users.
-
No options were available to alter the format in which information is displayed.
-
spfx-40-fantastics – RSS Feed Reader webpart
URL – https://github.com/OlivierCC/spfx-40-fantastics/wiki/Rss-Reader
This webpart solution is not working at the moment.
Reference – https://github.com/OlivierCC/spfx-40-fantastics/issues/97 -
Direct – This has an issue with CORS policy
-
3rd party solutions like https://feed2json.org or https://rss2json.com.
https://feed2json.org is open source but has limitations as below
-
It has to be hosted on a separate server
-
It does not support CORS.
https://rss2json.com free version has limitations as below
-
It takes 1 hour to display the updates.
-
Supports a maximum of only 10,000 requests per day.
-
Maximum of 25 feeds were allocated per account
Solution
-
Recurrence – specifies the schedule of execution of flow. We had scheduled it to execute the flow every 30 minutes.
-
Initialize variable – This initializes a variable to save the RSS url.
-
Get Item – This reads the RSS Feed url from a SharePoint List (We used a predefined SharePoint List to store the RSS Url. This also provides the facility to the end user to change the RSS Feed URL if needed).
-
Apply to each – Assigns the RSS url variable with the value for RSS Feed url from the previous step.
-
HTTP -Make a HTTP call with GET Method to read the text from RSS Feed XML.
-
Update Item –Updates a SharePoint List multi-line text column with the output of HTTP call made in the previous step.
React SharePoint Framework Web part
- Now, we are not depending on any third party webparts and third-party API to read RSS feed data, hence we don’t face any request and feed limits.
- Resolved CORS issue by directly accessing feed data from already-stored feed using MS Flow.
- We can customize the display format for RSS as well with our custom web part solution.

SharePoint 2013 Hosting – HostForLIFE :: Managing Site Storage In SharePoint Online
Feb 11th
Overview
Site Storage in SharePoint Online
Site storage configuration
- Automatic
The default. All sites get the storage from a central pool. The global or SharePoint administrator does not have to manage the storage per site. It is handled automatically by SharePoint for them. - Manual
The global or SharePoint administrator can have a fined tuned site storage allocated for each of the SharePoint site collection.
Manage site storage for individual sites
- Navigate to the site settings page.
- Under Site Collection Administration, click Storage Metrics.
PowerShell support
- Set-SPOSite -Identity https://contoso.sharepoint.com -StorageQuota 1500 -StorageQuotaWarningLevel 1400
Summary
How To Fix SharePoint 404 Error After Content Database Migration?
Feb 2nd
Issue Description
- The site might have been deleted, request to the site administrator to check the recycle bin.
- Do the IIS reset.
- Try to access the other layout page like /_layouts/15/settings.aspx(might be default.aspx or home.aspx has some issue).
- Clear the timer job cache….etc
Background of the issue
Example
Solution
SharePoint 2013 Hosting – HostForLIFE :: Downloading A File From SharePoint Online Site Using The SharePoint App
Jan 14th
- tenantID – You can find tenant id from https://portal.azure.com – Azure Active Directory à Properties
- strAppID – This is the App Guid which will be created at https://<sitename>.sharepoint.com/_layouts/15/appregnew.aspx
- strAppSecret – App secret
- strOrgDomain – Your organization domain will be used in “{organisationdomain}.sharepoint.com”;
SharePoint 2013 Hosting – HostForLIFE :: How to Copy Item Attachments To SharePoint Library Using PnP PowerShell?
Jan 7th
In this blog, we are going to learn how to copy the attachments from a single list item to SharePoint library using PnP PowerShell. The following snippet helps, you to get the attachments from a list item and uploads to the shared Documents library in a current context site.
1 2 3 4 5 6 7 |
$cred = Get-Credential Connect-PnPOnline -Url https://ktskumartenant.sharepoint.com/sites/dev -Credential $cred $listitem = Get-PnPListItem -List Employee -Id 2 $attachments = ForEach-Object{Get-PnPProperty -ClientObject $listitem -Property "AttachmentFiles"} $attachments | ForEach-Object { Copy-PnPFile -SourceUrl $_.ServerRelativeUrl –TargetUrl “Shared Documents/$($_.FileName)” |
After running the powershell command, it asks us to confirm the sourceurl and target url. If the file already exists in the targeturl, we have to add -OverwriteIfAlreadyExists $true to avoid the file already exists error.
Below is the example copies the two attachments from the single list item to the folder within a SharePoint library.

SharePoint Hosting – Add, Retrieve And Remove The Navigation Node Using JSOM
Dec 23rd
1 |
For add="Add Navigation"(Function Name->addNavNode() )-> |
1 |
For retrieve="Show Navigations Names"(Function Name->checkNavNames())-> |
1 |
For remove="Remove Navigation"(FunctionName->removeNavNode())-> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
< script type = "text/javascript" language = "javascript" > var navNodes = [{ Name: "TeamSiteNavigation", url: "/sites/TeamSite", fromExternal: false }, { Name: "TopNavigation", url: "http://www.google.com", fromExternal: true }]; var oNavNodeColl = null; var nodeCreationInfo = null; function addNavNode() { var ctx = new SP.ClientContext.get_current(); if (ctx != undefined && ctx != null) { var oWeb = ctx.get_web(); this.oNavNodeColl = oWeb.get_navigation().get_topNavigationBar(); for (var i = 0; i < navNodes.length; i++) { var navObj = navNodes[i]; var nodeTitle = navObj.Name; var navNodeUrl = navObj.url; var navFromExternal = navObj.fromExternal; this.nodeCreationInfo = new SP.NavigationNodeCreationInformation(); nodeCreationInfo.set_title(nodeTitle); nodeCreationInfo.set_url(navNodeUrl); nodeCreationInfo.set_isExternal(navFromExternal); nodeCreationInfo.set_asLastNode(true); this.oNavNodeColl.add(nodeCreationInfo); } ctx.load(this.oNavNodeColl); ctx.executeQueryAsync(function() { alert("successfully added") }, function(sender, args) { alert('Request failed. ' + args.get_messege() + '\n' + args.get_stackTrace()); }); } } function checkNavNames() { var ctx = SP.ClientContext.get_current(); var oWeb = ctx.get_web(); var oNavNodeColl = oWeb.get_navigation(); var nodeColl = oNavNodeColl.get_topNavigationBar(); ctx.load(oNavNodeColl); ctx.load(nodeColl, 'Include(Title,Children.Include(Title,Children))'); ctx.executeQueryAsync(function() { var navNodeEnumerator = nodeColl.getEnumerator(); var nodeNames = ""; while (navNodeEnumerator.moveNext()) { var oNavNode = navNodeEnumerator.get_current(); nodeNames = nodeNames + '\n' + oNavNode.get_title(); } alert(nodeNames); }, function(sender, args) { alert('Request failed. ' + args.get_messege() + '\n' + args.get_stackTrace()); }); } function removeNavNode() { var navName = document.getElementById("Textbox").value; var ctx = SP.ClientContext.get_current(); var oWeb = ctx.get_web(); var oNavNodeColl = oWeb.get_navigation(); var nodeColl = oNavNodeColl.get_topNavigationBar(); ctx.load(oNavNodeColl); ctx.load(nodeColl, 'Include(Title,Children.Include(Title,Children))'); ctx.executeQueryAsync(function() { var navNodeEnumerator = nodeColl.getEnumerator(); var nodeNames = ""; while (navNodeEnumerator.moveNext()) { var oNavNode = navNodeEnumerator.get_current(); nodeNames = oNavNode.get_title(); if (nodeNames == navName) { oNavNode.deleteObject(); ctx.executeQueryAsync(function() { alert("successfully deleted"); }, function(sender, args) { alert('Request failed. ' + args.get_messege() + '\n' + args.get_stackTrace()); }); } } }, function(sender, args) { alert('Request failed. ' + args.get_messege() + '\n' + args.get_stackTrace()); }); } < /script> < input id = "addButton" type = "button" value = "Add Navigation" onclick = "addNavNode()" / >< br / >< div style = "marginTop:20px;" > & nbsp < /div>< input id = "checkButton" type = "button" value = "Show Navigations Names" onclick = "checkNavNames()" / >< br / >< div style = "marginTop:20px;" > & nbsp < /div>< label > Enter navigation name to delete < /label>< input id = "Textbox" type = "text" / >< input id = "removeButton" type = "button" value = "Remove Navigation" onclick = "removeNavNode()" > |