Nintex is still one of the most effective Workflow platforms, and it have complete suite with SharePoint.
Nintex with SharePoint On-Prem is still hard to be managed and maintained, this before it reaches its threshold very quickly, Nintex stated that its threshold is 30 Million WorkflowProgress items per Nintex Database. To understand what does this means I will quickly describe How Nintex data is stored in Databases, and this is for SharePoint 2016, SharePoint 2013, SharePoint 2010, & also SharePoint 2007.
Every Nintex worklflow is broken down to something named Workflow Instances, and each workflow instances is break down to workflow Progress.
Assume we have a Vacation Approval workflow, every time this workflow runs it generate a workflow instance, if you re-run it on a single item 100 times, it will generates 100 workflow instances in the Nintex database. depends on the number of components it consist, workflow progress will be generated, so if this Workflow consists of 3 controls (Pause, Query list, Send Mail) then it will generate 3 WF progress records per run.
To get some useful info from the NinteDatabase, run the below commands:
create PROC [dbo].[WorkflowProgressProc] @db nvarchar(50)
IF DB_ID(@db) IS NULL /*Validate the database name exists*/
RAISERROR('Invalid Database Name passed',16,1)
CREATE TABLE #tmpBus
declare @WorkflowProgress int,
select @WorkflowProgress= COUNT(*) from dbo.WorkflowProgress (nolock)
select @WorkflowInstance=COUNT(*) from dbo.WorkflowInstance (nolock)
select @size=size * 8.0 / 1024 from sys.master_files where name like @db
select @NumOfSites= count(*) from ( Select SiteID
From WorkflowProgress P inner join WorkflowInstance I
on (P.InstanceID = I.InstanceId)
group by I.SiteID) x
INSERT INTO #tmpBus values(@WorkflowProgress,@WorkflowInstance,@size,@NumOfSites)
select * from #tmpBus
After that, run the stored procedure and give the database name as a parameter
exec [WorkflowProgressProc] [NintexWF2013DB]
The result will be as follow:
From experience in Nintex, the threshold can be much more, even till 50 millions item if you have powerful servers. but other than this, you will face alot of delays and Nintex workflow errors.
Also, to get more details about SharePoint Sites vs WorkflowProgress numbers.
Select I.SiteID, Count(P.WorkflowProgressID) NoWFProgress,Count(distinct I.InstanceID) NoWFInstance , MAX(p.TimeStamp) Last_Activity
From WorkflowProgress P inner join WorkflowInstance I (nolock)
on (P.InstanceID = I.InstanceId)
group by I.SiteID
order by I.SiteID
This will give you a good figures about Nintex Analytics in your SharePoint environment.
“Access Denied” to Access Requests list or “Request approval failed” when you process a pending request in SharePoint Online
I have run through a problem today during my work on one of the clients, and this sometimes happened mainly with sites that is migrated to SharePoint Online
- Site Owner received an email for Access Request, once her logged to the site, he faced the below issue.
- I follow this link from Microsoft
- But the issue still exists., so I found a post mentioned that I need to navigate to this link
and assign to Owners, Members, Visitors to the right Groups.
This works perfectly fine !
I had a request from a client, where he has an Excel sheet with list of IP addresses as well as other information, and he want to convert those IP address to the equivalent country and list in PowerBI.
Some Analytical tool like Splunk have this is a built in function, but for PowerBI you need to build it your self, and we will rely on a free web-service to implement this, so lets start
- Go to http://freegeoip.net/json/
- You should see the default data, which is your data retrieved by your IP address.
- Data displayed will be Country Code, Country Name, Region Code, Region Name, City, Zip Code(if applicable), Time Zone, Latitude, Longitude, and Metro Code
- if you entered specific IP address, correspondence data will be displayed, example: http://freegeoip.net/json/126.96.36.199
- Now, lets get back to PowerBI, Open your , Click Get Data, and then select Blank Query
- Click View, then Advanced Query, and add the Query in the right text
- Copy paste this Query and enter it in the text box of the Advanced Query
Source = (#"IP Address" as text) => let
Source = Json.Document(Web.Contents("http://freegeoip.net/json/" & #"IP Address")),
#"Converted to Table" = Record.ToTable(Source),
#"Transposed Table" = Table.Transpose(#"Converted to Table"),
#"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table")
- Click Done, and rename the function with a meaningful name like : fn_GetRegion
- Now, you need to create a column with this function, to do so, from Edit Queries go to Add Column > Invoke Custom Function
- Enter the data as shown below
- The column will appear at the end of your table, now we need to Expand the column by click on the double arrow icons as in the snapshot below
- Now, all the columns is appeared clearly.
- and you can use it to draw your maps.
Thanks to guavaq who shows us the solution in this post
How to Retrieving List of SharePoint Online Sites in PowerShell using PnP.
Currently PnP is considered to be the most modern way to deal with SharePoint Online and On-Prem, because it provides one interface for both
Quick handy script to do that, and you can take the output to write it in CSV file or import it in SharePoint List, or store it in any other repository
1. You need first to download PnP PowerShell release, from here
2. Download the library, and un-zip the file
3. Now you will need to relocate the module files, you should find it in this paths
C:\Program Files (x86)\SharePointPnPPowerShellOnline\Modules\SharePointPnPPowerShellOnline\SharePointPnPPowerShellOnline.psd1
$pnpmodulepath="C:\Program Files (x86)\SharePointPnPPowerShellOnline\Modules\SharePointPnPPowerShellOnline\SharePointPnPPowerShellOnline.psd1"
Import-Module $pnpmodulepath -Force
#Specify tenant admin and site URL
$User = "email@example.com"
$Password = ConvertTo-SecureString -String "password" -AsPlainText -Force
$Tenant = "https://o365accelerator-admin.sharepoint.com"
$CurrentCred = New-Object Management.Automation.PSCredential ($User, $Password)
Connect-PnPOnline -TenantAdminUrl $Tenant -Url $Tenant -Credentials $CurrentCred
$AllSites = Get-PnPTenantSite
foreach ($site in $AllSites )
if($site.Url.Contains("yourcompany.sharepoint.com")) #This if condition to dismiss public sites, but you can remove it
Connect-PnPOnline -Url $Site.Url -Credentials $CurrentCred
Write-Host ($site.Url +";"+
This script help you to upload your file or document to SharePoint library using PowerShell
- Download SharePoint Online client library from here , and install it. (If you already have it, please ignore this step)
- Create a folder named Temp on your C: drive, and put the Excel/CSV file in it
- Modify the parameters below and run the below script.
#Specify tenant admin and site URL
$User = "firstname.lastname@example.org"
$Password = "YourPassword"
$SiteURL = "https://tenantname.sharepoint.com/sites/site"
$Folder = "C:\Temp"
$DocLibName = "DocumentLibraryName"
#Add references to SharePoint client assemblies and authenticate to Office 365 site - required for CSOM
Add-Type -Path "C:\Program Files (x86)\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files (x86)\SharePoint Online Management Shell\Microsoft.Online.SharePoint.PowerShell\Microsoft.SharePoint.Client.Runtime.dll"
#Bind to site collection
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Creds = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($User,(ConvertTo-SecureString $Password -AsPlainText -Force));
$Context.Credentials = $Creds
$List = $Context.Web.Lists.GetByTitle($DocLibName)
Foreach ($File in (dir $Folder -File))
$FileStream = New-Object IO.FileStream($File.FullName,[System.IO.FileMode]::Open)
$FileCreationInfo = New-Object Microsoft.SharePoint.Client.FileCreationInformation
$FileCreationInfo.Overwrite = $true
$FileCreationInfo.ContentStream = $FileStream
$FileCreationInfo.URL = $File
$Upload = $List.RootFolder.Files.Add($FileCreationInfo)