Skip navigation
All Places > Getting Started > Blog > 2017 > June

The Nintex App Studio feature App Deploy lets you deploy apps without using an MDM.

Instead, after building your app, use Nintex App Studio distribution lists to send the app to your recipients' email address. The distribution list sends an email containing the link to download the app.  Optionally, you can view reports on your sent and downloaded apps. Currently, App Deploy is only supported by iOS and Android devices.


To create a distribution list

  1. Under the App Deploy tab, click Manage distribution lists.

    The App Deploy tab is accessible from the home page for all apps that are queued to build.

  2. Click Add on the Manage distribution lists page.

  3. Fill out the fields on the Edit distribution list page.

    You can copy and paste email addresses from most sources. Only valid email addresses are automatically extracted from the pasted text when you click Add

  4. Click the Nintex Mobile logo in the ribbon to return to the App deploy tab.


To email your app

  1. Under the App Deploy tab, select your distribution lists from the Distribution lists field.

  2. Optionally, turn on the Auto deploy feature, which automatically sends emails to your distribution lists when a new version of Nintex Mobile is released.
  3. Click Preview email to receive a copy of the email that is sent to recipients.
  4. Click Send email to lists now to send the email immediately.


To view downloaded reports

  1. Under the App Deploy tab, click View app downloads report.
  2. Specify any filters and then click Generate.


To view sent reports

  1. Under the App Deploy tab, click View emails sent report.
  2. Specify any filters and then click Generate.


If you have any questions about this feature, please feel free to leave a comment on this post!

Hello again - 


I posted this question a while back and abandoned it as I was pulled in a different direction

Alas, I have returned and wanted to post my finding about it in the hope that I can save some people hours of banging their heads against their desk!


The Scenario

Simply put, I want to create a User Story in a project within Visual Studio Online. I want a user to fill out a form and then pass that information over into VSO. This is to be used for a web support team as a request form and queue for updates/changes to internal websites.


The Setup

Before we dive in, as always, lets take a minute to understand what we want to do and what we need to do.

  • Build a form to collect data
  • Build a workflow to pass data 


Simple, right? 


I do recommend that you take a look at the following sites as reference if you are unfamiliar with Visual Sudio APIs:

Getting Started: Auth Overview

Creating Personal Access Tokens

Creating Work Items


I am going to assume you have a basic understanding of Nintex Workflow 2010, and more specifically the Web Request Action, but if not, check out Nintex Help - Web Request.


The Visual Studio Parts

In order for this to all work, we need to make sure that the web service call has the proper authorization to create the work items in our project. To do this, we will create a Personal Access Token. Simple navigate to your Visual Studio Online environment and from the homepage open your profile and click on "Security".

Next you will want to Add a Personal Access Token. This will generate a unique key that you can set to expire as well as what scope it pertains to:


Once you have the key (be sure to copy and paste it somewhere because you cannot view it again after it is gone) you will need to encrypt your token in Base64 so that you can use it in an HTTP Header (which is what we will do).


When encoding your token, do not forget your login! So for example, it will look like this:



When you encrypt it, it turns out like this:



Once you have that setup we can move into the Nintex side of things


The Nintex Parts

I am not going to go over the form because I want to focus on the "how we connect Nintex Workflow to VSO".

You can make the form anyway you want with any data points and controls you see fit. Here is my form (no extras added):


I know its is not pretty, but we are going for functional! The workflow is where the magic happens so lets dive into that.

At the core, we want to leverage a Web Request action. I use some other actions to help set variables (query user profiles, etc), but the focus is on the Web Request.

You will want to use a PATCH and point your web request action to your project within Visual Studio:


PATCH https://{instance}/DefaultCollection/{project}/_apis/wit/workitems/${workItemTypeName}?api-version={version}


Your headers will be as follows:

Content-Type: application/json-patch+json
Authorization: Basic {YOUR Base64 ENCRYPTED USERNAME:TOKEN}


Lastly, you will want to add your request body. For this example, I am creating a User Story and this is the body:

          "op": "add",
          "path": "/fields/System.Title",
          "value": "{ItemProperty:Title}"
          "op": "add",
          "path": "/fields/System.Description",
          "value": "{WorkflowVariable:var_FN} {WorkflowVariable:var_LN} 
<div>{WorkflowVariable:var_Email} </div>
<div>{WorkflowVariable:var_PhoneNum} </div>
<div>Description: </div>
          "op": "add",
          "path": "/fields/System.AssignedTo",
          "value": "{WorkflowVariable:var_assignedTo}"


Web Request Action Sample:



Run Now:


I recommend that the first time you simply try to create an item with a title so you do not get hung up on all the other properties. I have had some success with doing a "Run Now". I would recommend using it, but I use Fiddler or Postman to remove any issues that SharePoint may present. More on that later.



Now that we have everything in place, let's create one and see it go through!

Form (I had someone else fill it out to test permissions at the same time ):


And here it is in Visual Studio:


It works (yay)!


Final Thoughts

I recommend doing this in Postman or Fiddler first so that you can understand how the web service work and hammer out the syntax. I spent countless hours attempting to connect to realize I left off the "username@domain" from my access token... yea... it happens.


Also, using Postman or Fiddler allows you to operate outside of SharePoint. We ran into issues trying to get the call to go out of our network... more wasted time, but figured it out in the end. Knowing that it works in one place can help determine issues and causes.


Next I want to recreate this in Office 365. I would like to use Nintex Workflow Cloud, but did not see a Web Request action yet.


Hope this helps, and as always, until next time!

I recently had a client who needed a workflow that could handle voting in a way that was a bit challenging to get working.  I'm sure there a multiple ways to handle this, and I tried many unsuccessfully.  I wanted to share an approach that I was able to apply successfully in case anyone else has a similar scenario.  At a very high level, they need to gather votes and count the different responses, but the number of people who would actually respond might vary.


The business requirements were as follows:


  1. Allow for email reply (LazyApproval)
  2. Send reminders
  3. Auto-close the task(s) after a specified time
  4. Allow everyone to vote
  5. Tally the votes, including the number of "no response", and save back to the item


I'll go through the requirements individual and describe what I used to address them first.


Allow for email reply

This one was easy, enable LazyApproval in whatever task action I would use.


Send Reminders

Don't just put a number in there...

This was one of the requirements that drove the decision to use Flexi tasks.  Initially, during the design of the workflow, I put "5" into the "Number of reminders" field arbitrarily. 

This is no good... don't do it this way.

flexi task reminders config

Something unexpected happened with the escalations when I did this and it took me a while to put the pieces together.  Now, it's possible that I got this wrong, but it seemed like the items wouldn't do the escalation (Complete task) until after all of the reminders were sent.  I was not expecting a dependency there, and maybe it is a bug in the version I have or I just got it wrong, but everything I observed made me think this is how it was functioning.  If my item was set with a time to escalation that was 1 day away, but I had the 5 reminders above, it wouldn't complete the task until after all of the reminders were sent.  So, with that in mind, I did the following:

The right way

First, I will get the number of days (whole days, not partial) between the current date/time and the due date/time. I started with a Build string action, so I could take advantage of the inline functions like fn-DateDiffDays to get the number of days until the due date and time.

get days until due with date diff days function in a build string action


Next, I'll split the result of the DateDiffDays function to get rid of any decimals.  The reason for this here is that I will be using the number for how many reminders to send, so I just need the whole number.   Then, to get the number of minutes until the task auto closes, I will take the total number of minutes until it is due minus the number of minutes it was sending reminders.  There is a dependency here, and if you don't subtract the time it was sending reminders, your tasks will not close until all reminders have been sent AND the amount of escalation time has passed.  I didn't realize this at first, and I had a lot of tasks that were not closing automatically.  They would have 5 days until due for example, and send out 5 reminders... but the escalation timer didn't start until all of the reminders were sent!  


Anyway, on to the whole number of days... Split the variable.  Make sure to use the escape character "\" since the decimal is a special character for RegEx.  This was one of many lessons I learned during the development of this workflow.   Now, you will have the number saved into a collection variable.  If the result had been 2.3 days, the collection would now have 2 at index 0 and 3 at index 1.

split the number of days using a regular expression to get just the whole number


Next, the Collection Action to get just the whole number at index 0.  I am referencing a variable "numCollIndex" which is only used to grab index 0 of this collection.  It has a default value of 0.

collection operation to get the value at index 0 of the collection.  this is just the whole number

Here, the result is referenced in the Number of reminders field for the Flexi task.

flexi task config2

This gave me the variable number of reminders without rounding, so if the due date is 1.2 days away, I get one reminder, if it is 2.8 days away, I get 2 reminders.  


Auto-close the tasks after a specified time (escalation)

This was a requirement that pointed me to Flexi tasks.  The due date and time for the voting on these items could be specific, like in the middle of the day, so I couldn't just use days for this one.


We'll need a little math.  While we're waiting for all reminders to finish, we need to know the total number of minutes that will elapse.  We can use the whole number of days x 1440 to get the number of minutes (the variable is numReminderMinutes).  This will give us part of the equation we need to accurately determine how long to set for the task auto-escalation.

math operation to get the total number of minutes that will elapse while waiting for reminders

The next step is to get the total number of minutes until the due date/time.

Using a build string, you can get this number using the DateDiffMinutes function.  Now we have the minutes until the due date/time, but it is a text variable.

using the date diff minutes function inside a build string to get the total number of minutes until due


Convert the value to a number with a Convert Value action.  The variable is numTotalMinutesUntilDue.

convert value action to change from text to numeric

With a math operation, take the total minutes until due - number of minutes elapsed while waiting for reminders to get the number of escalation minutes.  This is how long the tasks wait after all reminders have gone out.  Once this is done, the auto close occurs.  This is saved in NumRBEscalationMinutes.  We'll put that into the Flexi-tasks later.

use math action to calculate total minutes until due - number of reminder minutes = number of escalation minutes


Here is the Flexi task with that variable for the Time to escalation:

flexi task with variable for escalation

I added an outcome and comments text to more easily track who didn't respond in the workflow tasks list.  Also, I need it for the tallying part later.


The Flexi tasks have an "Other" branch to handle the "No Response" scenario when the voting window has closed.

flexi task with 3 branches





Allow everyone to vote

The "Request approval" action has a vote option, but unfortunately, it doesn't have the reminders or the escalation options, so this became a challenge and a significant driver of the workflow design.  Ultimately, there are 7 teams that get a vote.  For the most part, there is only one representative, but there may be cases when two people are part of the team.  So, I used SharePoint permissions groups here to make sure the members could be changed easily.


I couldn't use just one Flexi task action assigned to all of the groups, or just one group with all of the members, because it doesn't allow for everyone to vote.  The tasks would close once a majority was reached.  With the all must agree options, the tasks closed when there was disagreement.  Your options are the following:


task behavior options

When I tried these options, the task would not allow for all responses in the way that we wanted that would be easy to understand for the process owners.  So, after trying a few approaches, I went with parallel actions.  I wanted to do a streamlined, elegant solution, but I opted for clarity and better supportability for my team later.

Here are a few of the tasks... there are just 7 branches of Flexi tasks.  Since all the votes get tallied, there are no actions in any of the specific branches under the Flexi tasks.  I'll describe what these are doing in the next section.

parallel flexi tasks


Tally the votes

The Flexi tasks have the standard Reject and Approve options, and we also need to know when people don't respond before the time to escalation elapses, so the "No Response" outcome is captured in those instances.  The escalation options for the Flexi task look like this:

flexi task config


A key part is to capture both the outcome and the task id for each of the voters.  We have 7 total, and below is the config for #3:

task config


After each of the Flexi tasks, I am using a Collection operation to capture all of the task IDs so I can get the specifics later with a list query action.

collection operation to gather the vote


The Collection operation just adds each task id from the corresponding variable:


Now, we do a For each through the voting tasks in the CollVoteTaskIDs collection.  I did a pause for 5 minutes here to make sure all the updates to the items in the task list were complete before trying to loop through them:

for each loop through vote tasks


Here is the For each configuration


The Query list

query list config

The variable "txtCurrentVoteOutcome" is the "Yes", "No", or "No Response" results for each voting group.  The "perCurrentAssignedTo" is the person who entered the vote.


Next, I am going to get the display name of the person and start creating a multiline of text field, so later on the process owner can get an email with all of the voters and their responses.

get display name and build string


The Set variable looks like this:

set variable


And the Build string looks like this:

build string


Now the tally at the end of the For each... I have 3 variables to store the tallied results, numYesVotes, numNoVotes, and numNoResponse.  The conditions are looking at the variable I got from the Query list action called txtCurrentVoteOutcome.

tally conditions

In the first condition, if txtCurrentVoteOutcome = "Approve", the Math operation adds one to the numYesVotes variable.  In the second condition, if txtCurrentVoteOutcome - "Reject", the Math operation adds one to the numNoVotes variable.  If neither of these are true, one is added to the NumNoResponse variable.  Then it goes back to the top of the For each and checks the next one.


After the loop, the tallied votes are put into the fields for the item.

update item with votes


At the very end is a final approval checkpoint.  This task goes to the process owner before the final "go/no go" meeting.

This is just a regular Flexi task, but it contains all the voting info in the notification to the process owner.

final approval email

it includes a summary of the number of votes along with the outcome of each vote from the multiline of text variable (mtxtVoteOutcome) that was created earlier.


In total, this voting component is part of a pretty large state machine workflow.  The rest of it deals with other parts of the business process, but this voting part was the most complex piece for me to figure out.  Hopefully, it gives you some ideas on a way to handle this if you have a similar scenario.  Happy Nintexing!

Based on the question Is it possible to look for conflicting schedule in calendar app? risen by Rogelio Tan I've built a small example workflow how to identify overlapping events in sharepoint's calendar list.


Note: workflow works just on simple not recurring calendar events!



so this is how the workflow looks like and works.



first of all we need to identify set of events that we want to compare.

so we query a calendar list with some reasonable filtering condition. for this demonstration I haven't used any filters.


we need to query for event's start and end times, plus some event identifier, eg. ID or Title.

we save values for each queried fields to separate collection variable

to identify overlapping events, we need to compare them each to other.

so we will need two nested loops over collections returned from query above.


so we configure first for each loop over ID collection, and save current event's ID value and current index to a scalar variables

within  the loop, using index variable we do so as well for current event's Start and End times.
then we will setup second for each loop over the same collection, save values for second event to compare.

just like for first event we pick Start and End times for second event from source collection.


note the run-if condition at the beginning of loop, which prevents to compare each pair of events twice.

set a helper variable that will flag whether we identified overlapped events or not

and proceed to comparison whether we have overlapping events or not.


so first set of conditions.

second set of conditions
third set of conditions

now we are sure whether events overlap or not.


if they do, we will save them to another collection variables.

we will maintain 6 of them - 3 variables for each of two events.

the same index position across all the 6 collections will identify data of two overlapping events



we have data of overlapping calendar events in collections and we can process them further as needed.


for this demo purposes we'll just write them to history log.



this is how output might look like:


events in calendar


workflow output




find the workflow attached.

tested on NW2013 on-prem




Hope it helps to someone!

Here's an insider tip that will open up a world of possibilities for some community members: It's the "actions" link at the top right of most spaces and pages in the community.

In a space like Getting Started or Nintex For Office 365, you'll see the "actions" button in the banner at the top. Clicking it will reveal the types of content that you're allowed to create in that space.  Permissions are based on your membership type, so you'll only see the types of content you are allowed to create in a given area.




The same button on a piece of content, such as a blog or a document, reveals different options. Chiefly to "follow" or "bookmark" that document or blog.  Bookmarking will leave a link to that content in your profile page.  Following a piece of content or a user connects you to that person or item. You'll get in-box notifications of activity on that page or done by that person.  



To see your connections, visit your profile page (avatar>view profile) and then click the "people" tab and select "following" or "followers." 

Hello there!


I wanted to share some (hopefully) inspiring and thought provoking ideas. I was recently playing board games (Guess Who) with my kids and got to thinking, "How cool would it be to play a game, but using Nintex!?!? I could make a form that allows the user to pick questions from a drop down and then submit to a workflow and use a list to hold the features of all the characters...I should use the people on my team as the characters!!!!" ...and I got wayyy to excited over this  and dove into the form designer.


So what do we do when this happens? Take a breath, and a step back. Start with the basics and build up. You can't start building the penthouse if the foundation isn't poured. 


I landed on Tic-Tac-Toe, and not Guess Who, because it is a much more simplistic game and does not require too much to get it up and running. Also, there are some points functionality that can be used elsewhere. I kept the game to a single form to highlight just how simple and easy it can be to do something completely different that it's intended use. I am sure that Euan Gamble and crew did not think of a gaming platform while considering what features will or would not be added


Yet that is how the business world works! We take a core concept and then mold it into what we need it to do. There is no "one-size-fits-all", but if we understand the capabilities of the tools that we have at our disposal, we can certainly build anything. But what else can we create and build with Nintex? I have a slew of ideas for games, but I want to know what others have thought of doing.


The Game

I used JavaScripting to do the heavy lifting and some CSS to help out.


Big shout-out to Sean Fiene for the assist with the JS as it reminded me to slow down and take a step back!


Attached you will find the .nfp file for the form, simply create a new list, import this form, publish it and you are good to go!


***Please keep in mind that this is for Office365 and the JavaScripting could use some cleaning up (I am sure someone can do it better ). I am working on getting it into 2010, will post it here once I get a chance to move it over.

A while back I wrote this blog about copying attachments from a list item to a document library.


Well times have moved on and technologies change. I'm currently learning my way around O365 and of course Nintex Workflow and Forms for the platform.


My requirement this time was similar, but with a twist.


I'm creating a Mobile App that will allow frontline users to go out to sites and fill in inspection forms. The customer is keen for these inspections to be visually orientated so therefore they're going to be taking pictures on tablets to provide evidence that a section has met standards. At least 1 photo needs to be taken for each section. A section is going to be a particular area of the store (Front of House, store room etc). We then need to be able to easily identify section the photo was taken via metadata.

To achieve this we created our form with an attachment control for each section. This gives the user a nice easy way to associate the pictures with a certain section, and crucially it allows us to name each of the attachment controls.

Also, I needed to allow for the fact that they may not upload a photo for every section.


Kudos go to Marian Hatala for helping with the next bit. He suggested using the FormData XML to identify each of the attachment controls, and each of those attachment controls contained the filename of the picture that had been taken with it.


So my first job is to identify each of the sections. I create a 2nd list with an item for each of the sections in the form, I then query that list and store the results in a collection.


I then use a For Each action to iterate through each of the items in that collection. This provides me with the element I'm going to be looking for in the FormData XML so it needs to be spelt exactly the same as the Name of the attachment control on the form



My Query XML action looks a little like this

Here I am querying the NFFormData Item Property and my XPath query simply looks inside the FormVariables element for the name of the attachment control. Because there can be more than 1 picture in each attachment control, the result is stored in a collection, which I will break out using the following Regex actions. I'm no expert in Regex, so happy to be told if there is a better way of doing this.


Step 1 - [" this removes the leading square bracket from the array

Step 2 - ;"] this removes the trailing square bracket from the array

Step 3 - Use the Split function in Regex to split the array by semi-colons


The reason this is required, is that this is the output of our array


But this is the output of our collection after our Split function


These subtle differences make the difference for our For Each loop


So I now have another collection that I will perform another ForEach loop on (so I am looping through however many attachments are contained within each attachment control).

The variable that is output from the ForEach loop is the name of my attachment, with a snag, I need to perform another Regex to remove the trailing ";" on the string (if it has one) and then I'm ready to go and upload it.

Above are the screen grabs of the configuration of the "Office 365 Upload File" action.

A couple of things to explain here.


File to Upload - We're uploading content that already exists in SharePoint, but if you didn't know, attachments are stored in a hidden folder within the List that the item belongs to, so our URL here is "Lists/LISTNAME/attachments/IDOFITEM/Attachmentname.jpg".


Folder path - This is the name of the library the file will be uploaded to PLUS any folders within the library that you want the file to be placed into.


Fields - These are the pieces of metadata we will use for our new documents/files.


The final piece for our requirement is the Run If. This is to capture any instances where there is no attachment in a control. If this is the case the string that should be the filename, will simply be a [ ] and our Run If makes sure the variable doesn't equal this before trying to upload, otherwise the upload fails and the workflow falls over.

You may recall that last month we started a new way of connecting you to the people who make noteworthy contributions to the community - an honor roll.  The best way to really get a sense of their contributions is to "follow" these community leaders!


Each month, I'm naming 10 people to an honor roll, and asking you to visit their profile and then "follow" them to spark connections.  This month, I wanted to highlight a special group of members: the Nintex Product Managers!


That's more than 10, but without all of them, we wouldn't have our workflow platform and products.  So, they're all in!


I want you, dear community member, to visit each of their profiles and click "follow," which is just to the right of their smiling profile photo.  See, Euan Gamble's profile example:



Why do this?  Because it connects you, the people who use Nintex, to the people who make Nintex!  Following the product managers puts their community activity in the news stream of your choosing and exposes you to what they're doing in the community.  You'll be on top of it when they blog or update product release notes, for example..  It's a great way to enrich your community experience!


This month's Honor Roll members:

honorrollHonor Roll

Dan Barker (Nintex Workflow Cloud)

John Corry (Nintex Moble/App Studio)

Rick De Marco (Document Generation)

David Fitzpatrick  (Nintex Workflow Cloud)

Euan Gamble (Nintex Forms)

Roanna Gunaratnam (Workflow Actions)

Jon Hardy (Workflow for SharePoint and O365)

TJ Ramadoss  (Assoc. Product Manager)

Sam Sysum (Drawloop)

Joshua Tan (Nintex Workflow Cloud)

George Tsigounis (Nintex Hawkeye)



honor roll big



Honor Roll members will get this badge in their reputation center, along with 100 points.


If you'd like to nominate someone for the honor roll next month, post their name below and tell us why you think they should have a bigger following!

The June Mission is your opportunity to show us how you'd build a workflow for the following:



A service team has a SharePoint list where users submit requests that they need to fulfill.  There are currently 5 different types of requests that they can receive and each request type has between 20-30 steps that have to be completed in order to fulfill the request.  The team has been having some difficulty keeping track of the status of each request and knowing whether all of the steps have been completed or not.  This has led to some request falling through the cracks and the users are none to happy about it. 


The current request types are:

  • Inventory
  • Campaign
  • Collections
  • Statements
  • Audit


This is a sample list of steps for an Inventory request.  Each request type will have it's own unique set of steps.

Step #Description
1Create master schedule
2Notify the affected departments
3Purchase supplies
4Clean all areas for counting
5Group like items
6Ensure there are no hazards present
7Mark package quantities
8Count and seal partially packaged items
9Mark items not to be counted
10Label each area to be counted
11Validate all items are identified with part number.
12Update storage area floor plans
13Organize couing teams
14Distribute written instructions
15Conduct physical counting
16Conduct 2nd physical counting
17Compare results for accuracy
18Turn in count sheets
19Reconcile counts with the system
20Turn in final inventory results.



The manager of the service team would like there to be an automated way that when they receive a new request, the system would create the correct steps for that request type that need to be completed.  Then as the steps are completed the system would update the overall status of the request so that they could look at any request and know how many steps are remaining.  The manager wants to track all of this in SharePoint.


Using SharePoint lists and Nintex workflows, design a process that will create the steps for each request type, and then track the status of each request as the steps are completed.  The solution also needs to account for the fact that a new request type could be created in the future, with it's own set of steps, and the manager would want to be able to add it without having to modify the workflow each time.


The team is currently using SharePoint on premise with Nintex Workflow, but they may be moving to O365 in the future.  So you can design a solution either for SharePoint/Nintex on-premise, or for O365. 


Your mission:

To receive the points, build your solution and click here to create a document in the Nintex Gallery about your solution, detailing exactly how you would solve this issue.  Post a link to your solution below below to earn 400 points and the June "Request Quest" badge!

We look forward to your solutions!

request quest badge

Last mission May Mission - Quick Top Tip!  has left tons of useful information.

I get this from Cassy Freeman and converted it on a fast reading help with samples for the parseLookup function.









Filter Blog

By date: By tag: