Skip navigation
All Places > Tech Blog > Blog
1 2 3 Previous Next

Tech Blog

246 posts

Hola, 

 

Finally back in South Africa from Israel!!! 

 

Anyway, this solution allows you make use of the Office 365 version of my Timesheet Solution. Yup,I did it, I migrated it across to Office 365/SharePoint Online® using Sharegate ®   and tweaked a couple of things to get a similar experience to the on-premise version.

 

 

 

 

Just to recap, previously, I did the following posts for the on premise version of the solution:

 

A Simple Time Sheet Solution - Part 1 

A Simple Time Sheet Solution - Part 2 

A Simple Time Sheet Solution - Part 3 (The Nintex Form) 

 

 

AuthorPalesa Sikwane
Long DescriptionThis solution allows you make use of the Office 365 version of my Timesheet Solution. Yup,I did it, I migrated it across to Office 365/SharePoint Online ®
Dependencies

Nintex Workflow for Office 365 ®

Nintex Forms for Office 365 ®

SharePoint Online ®

Compatibility

Nintex Workflow O365 ®

Nintex Forms O365 ®

Platform

Office 365 ®


 

 In this part I've again included a breakdown on how the solution has been put together for Office 365®/SharePoint ®:

 

The Solution

The proposed solution will consist of the following technologies:

  • SharePoint Online ®
  • Nintex® Workflow for Office 365 ®
  • Nintex® Forms for Office 365 ®

Lists & Libraries

The solution will consist of a Team Site Template including the following custom SharePoint lists:

#

Title

Description

1.

Employees

A list containing all the Employees who are authorized to submit a Timesheet

2.

Projects

A list containing all projects that Employees can bill time against

3.

Timesheets

A list storing all submitted Timesheets

4.

Timesheet Reports

A list storing a consolidated view of approved Timesheets

5.

Week Ending

A list storing all the Week Ending days for the year

 

Employees

The Employees list has the following SharePoint Configuration:

Column

Type

Notes

Initials

Single line of text

 

Modified

Date and Time

System Generated Column

Created

Date and Time

System Generated Column

Full Names

Person or Group

Allow selection of People Only

Time sheets

Lookup

Count Related Lookup to Employees

Created By

Person or Group

System Generated Column

Modified By

Person or Group

System Generated Column

 

Projects

The Projects list has the following SharePoint Configuration

Column

Type

Notes

Project Name

Single line of text

 

Modified

Date and Time

System Generated Column

Created

Date and Time

System Generated Column

Category

Choice

Choices:

 

Administration

Crestan Corporate Office

Crestan Head Office

ACME

Leave

Public Holidays

Training

ProjectNameCategory

Calculated

=Category&" - "&[Project Name]

Project Category

Lookup

Lookup from Categories

In this column:

Category Name

Created By

Person or Group

System Generated

Modified By

Person or Group

System Generated

 

Time sheets

The Time sheets list has the following SharePoint Configuration

Content Type

Scope

Notes

Time sheet

Site Collection

Default Content Type

 

Time sheet Content Type

The Time sheet list makes use of the Time sheet Content Type with the following configuration:

Column

Type

Notes

Created

Date and Time

System Generated Column

Title

Single line of text

 

Employee

Lookup

Lookup from Employees

In this column:

Initials

EmployeeID

Single line of text

 

Mon

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Tue

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Wed

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Thu

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Fri

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Sat

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Sun

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Total Hours

Calculated

=SUM(Mon,Tue,Wed,Thu,Fri,Sat,Sun)

LineItems

Multiple lines of text

Plain text

Timesheet Status

Choice

Choices:

 

Draft

Submitted

Approved

Work Date

Date and Time

 

No of Line Items

Number

Helps me know how many times I loop in my workflow through the repeating section. This is just another way you can Query XML

 

  

Time sheet Reports

The Time sheet reports list has the following SharePoint Configuration

Column

Type

Notes

Title

Single line of text

 

Modified

Date and Time

System Generated Column

Created

Date and Time

System Generated Column

Mon

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Tue

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Wed

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Thu

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Fri

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Sat

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Sun

Number

Min: 0
Max: 12

 

Number of decimal places:
1

Employee Initials

Lookup

Lookup to Employees

Week Ending

Date and Time

 

Project

Lookup

Lookup to Projects
ProjectNameCategory

Project Name

Lookup

Lookup to Projects
Project Name

Total Hours Worked

Calculated

=Mon+Tue+Wed+Thu+Fri+Sat+Sun

Month

Calculated

=TEXT([Week Ending],"MMMM")

Year

Calculated

=TEXT([Week Ending],"YYYY")

 

Week Ending

The Week Ending list has the following SharePoint Configuration

Column

Type

Notes

Title

Single line of text

 

Modified

Date and Time

System Generated Column

Created

Date and Time

System Generated Column

WeekNumber

Number

Number of decimal places:
0

WeekEnding

Date and Time

Min: 0
Max: 12

 

Number of decimal places:
1

Month

Choice

Choices:

Jan

Feb

Mar

Apr

May

Jun

Jul

Aug

Sep

Oct

Nov

Dec

WeekStart

Date and Time

Date Only

Created By

Date and Time

System Generated Column

Modified By

Date and Time

System Generated Column

 

  

Workflows

This solution consists of the following workflow configuration:

Time sheet Approval

List Name

Workflow Start Conditions

Time sheets

Start when items are created and Time sheet Status Equals Submitted

 

Start when items are modified and Time sheet Status Equals Submitted (Conditional Start Office 365)

 

Overview

Timesheet Approval Workflow

Figure 1 Timesheet Approval Workflow

 

Note:

In Nintex Workflow for Office 365 we do not have User Defined Actions so after the migration I removed the "PlaceHolder" action that Sharegate put in place, and put in a series of steps to achieve the same functionality as to what I had on premise. 

 

Would like to see someone do this with a Component Workflow, you can read up on these here if you haven't seen this new feature. 

 

Figure 2 Timesheet Nintex Form

 

Note:

The Form on Office 365 ® has more or less the same functionality as the one in my previous post A Simple Time Sheet Solution - Part 3 (The Nintex Form). I did, however, use some of the newly released OOTB (Out of the box) functionality in Nintex Forms for 365  ®  and for SharePoint  ® such as Save and Continue, check out Sean Fiene's post Lucky You, there's New Form Features! for more information on this.

 

Migration log:

Finally below is a migration log I've attached to this post, just to give you an idea how  Sharegate  ®  handled the migration. You might want to go through some of the warnings and errors so you know what to anticipate when migrating an on-premise solution to Office 365 ®. But if you want to find out more, you might find the following resources useful:

  1. Migration Tips when moving to Office 365
  2. Nintex Workflow Migration from on premise to Office 365  which is a really great post by one of our vTE's Tomasz Poszytek

 

For download I've included the following:

 

 

 

In any case, I hope you do enjoy this solution, and let me know if you have any questions!!

 

Shup!!

 

 

Ever wanted to have Nintex Mobile set your location automatically without having to hit the "set my location" button?  Well there is a way but it only works under a set of of specific conditions.

 

First you must be using Nintex Mobile on an Apple device.  Sorry to everyone else (including myself).  Android and Windows devices - you're out of luck.

 

Secondly you cannot name your GPS field.  You can bind it to a list column and give it a title but you can't give it a name.  See the below example for how it should be set up.

 

 

See how Name is empty?  If you do that, your device will automatically set your location (assuming you've allowed Nintex mobile to access your location).  The implication of this, is you cannot set any form rules to interact with this field.

 

Apart from those above constraints, it works well.  It works on o365 and SharePoint on-prem.  It works for both responsive and classic forms.  

 

Go ahead and give it a try.  If you want it to work without the workaround, why not join the discussion on UserVoice.

The reason I'm writing this is to start addressing a challenge that Cassy Freeman posted in response to my video stating I'll try and help any Nintex customer do more with the platform. 

 

View those videos here - https://www.linkedin.com/in/eharris04/detail/recent-activity/shares/  

 

While this is a challenge for sure, I think I can tackle it in pieces to help everyone out and make some progress. The first thing I did was take a look at what I thought were the most common actions being used in on-premises. This is 100% my opinion so take it for what its worth, but here is the list of actions I chose starting out and some notes about them.

 

On-Premise Action NameOffice 365 Action NameComments about the actions
Assign Flexi tasksTask Action and Start a Task ProcessUse one of these actions to achieve a similar result which is assigning a task to a user to complete
Calculate date Add Time to DateThe basic premise of the action is the same. You can add minutes, seconds, days, months and years to the date
Math operation Do CalculationThe basic premise of the action is the same. You can add, multiple, subtract or divide, or mod
Pause for...Pause For DurationThis allows you to pause the workflow for a set number of days, hours, or minutes and it can abide by business hours only. You will notices that you cannot do months and years in Office 365.
Pause until... Pause UntilThe basic premise of the action is the same.
Set a conditionConditional BranchThe basic premise of the action is the same.
Loop Loop with ConditionThe basic premise of the action is the same
End workflowTerminate Current WorkflowThe basic premise of the action is the same
Set field valueUpdate List ItemWhile in on-premises you update a particular field via an action, it is preferred to use the update list item and select the field or fields to update via one action in O365.

 

Let me know what actions you want more info on as I start building my second list. 

During the last quarter of 2017 Beezy and Nintex announced their technology partnership and we couldn’t be more excited about that. Beezy is one of the most successful Digital Workplace solution and Nintex is the leader in Workflow and Content Automation. It’s the perfect equation:

 

Intelligent Process Automation + Digital Workplace = Intelligent Workplace

 

Why does it matter?

Nintex Workflow Cloud (NWC) and Beezy are both committed to solve the same problem: On a daily basis an employee needs to deal with different platforms, content and disconnected pieces: Sharepoint, Outlook, Salesforce, Box, SAP, custom databases… you name them! Nintex Workflow can orchestrate and automate the content across all these systems of records. And Beezy, using NWC as the underlying workflow platform can surface the only relevant information for every employee in their custom workplace.

 

How does the integration work?


Beezy works on top of Office 365 and SharePoint on prem and was looking for a way to include workflows in their solution. The creation of a custom connector seemed the way to do it, and when we were deciding on which platform build it (Office 365 or SP on prem), the release of the Xtensions framework opened a door much wider for the integration. And much easier!

 

Beezy has created its own Nintex Workflow Cloud connector using the Xtensions framework: A set of Beezy custom actions that allow Beezy and NWC talk to each other. Using the Beezy connector, from a NWC workflow we can post comments, cards or create communities but more importantly this connector is bringing the power of the Nintex platform to the digital workplace: custom events, logic and flow actions, external start and the whole set of NWC connectors bring the process automation side of things to the Digital Workplace. And with that Beezy raises the 4th pillar of the solution: Communication, Collaboration, Knowledge… and Processes

 


What makes it so powerful?

Here are some of the benefits of that Beezy and Nintex can bring together:

  • Get notified and take action

Nintex Workflow Cloud is able to trigger a workflow listening to the events of your favourite system of records, whether it is Salesforce, Box, Dynamics or just a simple web form.

 

With the addition of the Beezy connector, now we can post messages in our workplace and consolidate notifications from any of your systems or applications. In other words, without leaving my workplace in Beezy I’m going to be able to see when an opportunity in my salesforce is about to close or when someone is filling a form from my website or, if I am a manager, to see when someone has requested some days off.

 

 

Getting notified is good but taking action from that notification is even better.

The Beezy connector can include actionable messages on the notification itself, meaning that any system of records can surface tasks and activities along with option buttons into the workplace. Therefore we don’t have to go to Salesforce when I need to approve a discount, I don’t have to go to HR system to approve a leave request, I can just stay in my digital workplace and do it from the same Beezy action card.

 

  • Make the conversation part of the process

In some processes, especially those including tasks and decisions we normally miss the conversational element. When people get a task, very often there’s a conversation among the different members of the team before taking the right decision. This conversation, however, is not usually part of the task item but now, Beezy can collect that and include it in the task. That gives us the full context of any decision and more importantly can make the difference in the future to understand the reason why a decision was taken months ago for instance.

 

  • Context matters

Beezy leverages the External Start capability of Nintex Workflow Cloud to start workflows from your workplace. In other words, the external start can be used to bring actions to the workplace customized to the content we are working. Just imagine you’re working with a document in Beezy; wouldn’t it be great to share that document externally with Box or send it to DocuSign/Adobe Sign to get it electronically signed?

  • Talk to Beezy - ask the BeezyBot

 

Sometimes you know what to do but not how to do it, so why not having a chat? Beezy includes a chatBot, the BeezyBot, which also understands the context of every piece of information. The BeezyBot is smart enough to collect the needed information from you and your context and start the right workflow in Nintex Workflow Cloud, whether it is submitting a leave request, a new site in your workplace or changing the status of an opportunity in your CRM.  

 

 

I leave you a short video here with a couple of use cases but, considering all of the above, the scenarios and use cases  are countless. And the good news is that Beezy and Nintex partners have already started to make them real. In other words, Nintex Workflow for Beezy it’s already here!

Yebo you read the title right 

 

So this workaround will assist you in either deleting or restoring a previous version of a Nintex Form for Office 365 using SharePoint Designer 2013. 

 

AuthorPalesa Sikwane
Long DescriptionThis is a little workaround that can assist you in setting deleting a broken Nintex form or restoring the previous version of a Nintex Form, on Office 365 using SharePoint Designer
Dependencies

Nintex Workflow 365

SharePoint Online

SharePoint Designer 2013

Compatibility

Office 365/SharePoint Online

Nintex Forms O365

Platform

Nintex Forms for Office 365

Disclaimer

Please note that this is a workaround I have come up with to help anyone who might want to troubleshoot a buggy form or restore a previous version of a form on Office 365. The OOTB (Out of the Box) functionality by Nintex Forms 0365 is still underway, and I would still recommend that you always export your Nintex Form as a backup, also if need be, I'd also encourage you to save a backup of your List (as a template) and use that to experiment with this.

 

"...First things First..." (pun intended) a big thanks to the First Tech Digital Team (Thuso and Darren) for reaching out to me with this requirement 

 

Geeze...!t's been a minute since I've done a blog post...I'm REALLY SORRY

 

Anyway, imagine this... You're working on a Nintex Form for Office 365 right, then all of a sudden when you try and edit  your form from the forms designer, you get the following error:

 

Unable to open Nintex forms O365 designer

 

So hmmm you might think that this might go away and the form will load... but NAH... it doesn't, it just hangs!

...And not only that, but you know you've made a lot of customizations and configuration to your form that involved a lot of saving, publishing and testing ....

 

 

You might panic because no matter how many times you try; the forms designer SIMPLY won't open! Whether you have an exported version of the form or not; there is no need to panic anymore; as the following workaround might just work for you:

 

  1. Connect to your Office 365 Environment using SharePoint Designer:

  2. Navigate to All Files -> NintexFormXML


    Note: This view shows you all the files related to all of your Nintex Forms which you've published/saved in your SharePoint Online Site. 
  3. Now you need to Find your Nintex form, you can use the following:
  4. Filtering by the columns from within SharePoint Designer, for example, if you know when last you Published or Saved the form:


    1. OR (my preferred method) Using the List GUID of the List the form is connected to find the form. I use the following method to find my List GUID:
      1. Open List Settings on the applicable list:


      2. I copy the URL of this page as the List GUID is visible there:
      3. I copy the entire URL and paste it into a tool I’ve been using for years Meyersweb URL Decoder/Encoder (bookmark this, this really comes in handy!). Paste the URL and click on "Decode":

        Note: Notice how the List GUID is easier to read , copy this to your clipboard, excluding the "curly" brackets
      4. Now go back to your SharePoint Designer View (i.e. All Files -> NintexFormXML) and apply a customer filter on the Title column using the List GUID:


      5. This will return files/forms belonging to your List,

      6. so now if you would like to COMPLETELY REMOVE/DELETE YOUR FORM proceed to Step 7, and if you wish to RESTORE A PREVIOUS VERSION OF YOUR FORM PROCEED to Step 8:
      7. Deleting the form:

        Steps

        Find and Select the form, ensure this is correct, as a safety measure I would always recommend you back up the form:

         

         

        This will keep the same file name as the original but append "_copy(1)" at the end, which you would always remove when renaming and restoring the file i.e.:

         

         

         

        Now delete the original form:

         

        Now again, navigate to the All Files view in SharePoint Designer, and click on Lists:

         

        Open the applicable list:

         

         

        Open the applicable folder:

        Note: If you have no Content Type linked to this list,; you will see a folder called Item (which is the default SharePoint content type for a list). Open the Folder for the Content Type linked to the form you wish to delete - in my case, this was Contact.

         

        You will then see 2 files:

         

         

        Delete these files

         

         

        Now finally if you go to the list where you’ve published your Nintex Form and open the Nintex Forms Designer, you should have it back to default (where you’re prompted to choose a designer):

         

         

      8. Restoring a previous version of the form

        Steps

        From SharePoint Designer right-click your Lists form once you’ve found it check out the file:

        Note: Again backup this file incase anything goes wrong!!

         

        Click on the name of the file to open it:

        This will bring up a Page showing settings for the file:

         

        Now you can simply restore a previous version by selecting any of the versions listed in the Version History section :

         

         

        Once done, from the breadcrumb go one step back to the NintexFormXML link:

         

        Check-in the file in SharePoint Designer:

         

        Click OK

         

        The file might "disappear" from your view in SharePoint Designer, but no need to panic  Just simply refresh or clear any custom filters.

         

        Note: When you open a New form on your list or Edit an existing one you will still see the latest published one just like I did below:

         

         

        But you open the Nintex Forms Designer, you will see the previous version I restored :

         

         

        And that's it!!!


        I hope this helps someone out there



        Cheers!!!

I was working on a Nintex Form for a client recently where there were several disabled fields. Actually, based on the type of request they were submitting, anywhere from 2 to 20ish fields could be disabled. The problem was that the default styling of disabled fields is not much different than enabled fields and our client wanted to make it more obvious which fields the user should be focusing on for certain scenarios. Allow me to explain...

 

The Default Styling

The following screenshots show the default Nintex Forms styling. Initially, when the form for this scenario loads, all fields are disabled until a Type of Request is selected.

 

Default Styling- All Fields Disabled

You'll also notice that the Person or Group controls do not have the same white background as all other controls. So, we will address that with this solution as well.

 

There are basically two main scenarios for this form:

  1. If the Type of Request equals "New Requirement", then only the Course Code and Justification controls are enabled.
  2. If the Type of Request does not equal "New Requirement", then the Course Code and Justification controls are disabled and everything else is enabled.

 

Notice in the screenshot below how subtle the differences are in the two scenarios.

 

Default Styling - Compare New Vs Not New Selection

 

Since this was a main functionality of this form, we needed to make this distinction more obvious and clear to the users submitting these requests.

 

The Updated Form

In addition to some other custom styling, you can see on the screenshot below, that all fields which are disabled initially are shaded in a darker gray color.

 

Custom Styling - All Fields Disabled

 

As the user selects the Type of Request, the disabled fields remain shaded gray and enabled fields are updated to have a white input area, which makes it much more obvious to quickly and easily identify which fields need to be filled in.

 

Custom Styling - Compare New Vs Not New Selection

 

The Custom CSS

So, how did we achieve this updated look?

 

With just a bit of custom CSS.

 

From the Nintex Forms Designer, open the Settings dialog box from the ribbon, and then expand the Custom CSS section. Scroll all the way to the bottom and paste the following code.

 

Alternatively, you can save this code snippet to an external stylesheet and reference the file from the Advanced > Custom CSS includes section in Form Settings.

 

/*darken background of disabled input fields*/

input[type=password][disabled], input[type=text][disabled], input[type=file][disabled], textarea[disabled], select[disabled], .sp-peoplepicker-topLevelDisabled, .ms-inputBoxDisabled {background-color:#dddddd !important;}

/*darken background of disabled people pickers*/

.ip-disabled.ip-container {background-color:#dddddd !important;}

/*darken background of disabled MLT fields*/

.nf-form-input div[contenteditable=false] {background-color:#dddddd !important;}

 

Good luck and happy disabling!

 

NOTE: This solution was implemented on Nintex for SharePoint 2013, so slight adjustments may be required to implement for other platforms. Also, the Custom CSS option is only available in the Classic Forms Designer (not Responsive).

List item attachments are not available from a task form – even one customized with Nintex Forms. Providing all pertinent information (including related documents) to complete an approval task from a single form, can go a long way toward making the user experience as seamless as possible for approvers.

 

This post walks through meeting this requirement by leveraging a custom action created by Nintex Technical Evangelist, Vadim Tabakman. But, what if you don’t have access to deploy a custom action to your SharePoint environment? The following solution produces a similar outcome, without the need for any custom actions.

 

The Workflow

Get Attachments

First, use the Call web service action to get all attachments from the current item and store the URLs to a multi line of text variable.

Next, use the Query XML action to parse through the web service result and get a collection of attachment URLs.

Query XML

Start an HTML Table

The collection of URLs needs to be formatted in a user friendly way for the task form. So, use a Build string action to start an HTML table. Store the beginning of the HTML table to a multi line of text variable. The rest of the table will be dynamically built out based on the attachments collected.

Build String - Start HTML Table

Loop Through the Collection of URLs

Use a For each action to loop through each URL in the collection and dynamically build out the rows in the HTML table.

For Each

Get Each Document Name

Use a Regular expression action to get the clean file name from each URL and store to a single line of text variable. This will be used to replicate the way that attachments are displayed on a list item form by default, where the document name is the clickable text that you see.

Regular Expression - Get Clean Doc Name

Add a Row to the Table

The last step within the For each action, is to add a row to the HTML table using another Build string  action.

Build String - Add Row

Close the HTML Table

Just outside of the For each action, use one more Build string action to close out our HTML table.

Build String - Close Table

Populate List Column

Create a new multi line of text column on the list and use the Update item action to populate that column with the value that was collected during the workflow.

Update Item - Attachments HTML

Task Form Configuration

Within the task action configuration in Nintex Workflow, open the Nintex Forms designer and add the Attachments HTML list column onto the form and then update the following two configuration settings:

  • Expand the Appearance section and set Enabled = No
  • Expand the Advanced section to set the Control Mode = Display

Task Form - Attachments HTML

The Final Task Form

Flexi Task Form with Attachments

 

Check out the full solution details here: https://nicoleprestby.wordpress.com/2017/12/19/add-list-item-attachments-to-task-form-using-nintex-workflow-and-forms/

I was asked recently to explain how Microsoft Flow could be integrated with Nintex Workflow Cloud. The point of the question was that Workflow Cloud provides enterprise level workflow capability, so it supports custom workflow connectors via the OpenAPI/Swagger definitions.

 

In this article I'll explain how we can integrate Nintex Workflow Cloud and Microsoft Flow, leveraging the Nintex Workflow Cloud's Xtension framework to sync Microsoft Outlook calendar with Google Calendar.

 

Calling Nintex Workflow Cloud from Microsoft Flow

1. To call Nintex Workflow Cloud from Microsoft Flow, I have created a Nintex Workflow Cloud workflow with an external start event as shown here. I have also included parameters I want to bring over from Outlook Event to sync with Google Calendar Event (in this example, Event Title, location, ID, Start date-time and End date-time).

 

2. Once the workflow is published, it gives us details on how the workflow could be triggered from external system(s). What we need from this published workflow is the URL as shown below:

 

3. I have created a blank Microsoft Flow with only two steps added. The first is the trigger "when a new event is created (v1)" of Outlook Event. The second is the HTTP + Swagger as shown below.

 

4. Paste the URL from the published Nintex Workflow Cloud from step 2 above to the "SWAGGER ENDPOINT URL" as shown below:

 

5. The "HTTP + Swagger" action will be refreshed with the required parameters as we have defined in Nintex Workflow Cloud. We can now supply the values to pass from Outlook Calendar event to Nintex Workflow Cloud as shown in the diagram below.

 

Extend Nintex Workflow Cloud with Google Calendar connectors

Nintex Workflow Cloud does not by default provide Google Calendar connectors. However, using the Nintex Xtensions Framework, we can create any connectors we need, as long as they comply with the OpenAPI/Swagger standard.

 

To do this, here are the steps I followed.

 

1. Identify Google Calendar APIs.

Google provides rich APIs to its applications/services, including Google Calendar APIs. The reference to the Google Calendar API provides all the details we need, such as end point URL, HTTP Request, and Parameters for the call.

 

 

2. The Swagger file we are creating requires us to specify the API scope, which is provided in the reference document and shown in the diagram below.

 

3. Prepare the Swagger file and save it with a json extension for importing to Nintex Workflow Cloud Xtensions.

{
    "swagger": "2.0",
    "info": {
        "version": "1.0.0",
        "title": "Google Calendar API",
        "description": "Google Calendar API"
    },
    "host": "www.googleapis.com",
    "basePath": "/calendar/v3",
    "schemes": [
        "https"
    ],
    "produces": [
        "application/json"
    ],
    "paths": {
        "/calendars/{calendarId}/events": {
            "post": {
                "tags": [
                    "Insert new event"
                ],
                "summary": "Insert Event",
                "description": "Insert a new event",
                "operationId": "insert",
                "parameters": [
                    {
                        "in": "body",
                        "name": "body",
                        "schema": {
                            "$ref": "#/definitions/Event"
                        }
                    },
                    {
                        "name": "calendarId",
                        "type": "string",
                        "in": "path",
                        "description": "Google Calendar ID",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/Event"
                        }
                    }
                },
                "security": [
                    {
                        "Oauth2": [
                            "https://www.googleapis.com/auth/calendar"
                        ]
                    }
                ]
            }
        }
    },
    "definitions": {
        "Event": {
            "type": "object",
            "properties": {
                "start": {
                    "description": "The (inclusive) start time of the event. For a recurring event, this is the start time of the first instance.",
                    "type": "object",
                    "properties": {
                        "date": {
                            "type": "string",
                            "format": "date"
                        },
                        "datetime": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "timezone": {
                            "type": "string"
                        }
                    }
                },
                "end": {
                    "description": "The (inclusive) end time of the event. For a recurring event, this is the end time of the first instance.",
                    "type": "object",
                    "properties": {
                        "date": {
                            "type": "string",
                            "format": "date"
                        },
                        "datetime": {
                            "type": "string",
                            "format": "date-time"
                        },
                        "timezone": {
                            "type": "string"
                        }
                    }
                },
                "location": {
                    "description": "location of event. Optional.",
                    "type": "string"
                },
                "summary": {
                    "description": "Event title",
                    "type": "string"
                },
                "description": {
                    "description": "Description of the event. Optional.",
                    "type": "string"
                }
            }
        }
    },
    "securityDefinitions": {
        "Oauth2": {
            "authorizationUrl": "https://accounts.google.com/o/oauth2/auth",
            "description": "Oauth 2.0 authentication",
            "flow": "implicit",
            "scopes": {
                "https://www.googleapis.com/auth/calendar": "Read and Write access to Calendars",
                "https://www.googleapis.com/auth/calendar.readonly": "Read access to Calendars"
            },
            "type": "oauth2"
        }
    }
}

 

4. Once we have the required Swagger file, we can add it to the Xtensions from the Xtensions page of the Nintex Workflow Cloud dashboard as shown here.

 

5. As the Swagger file includes the Security Definitions to use OAuth, we will need to provide the required Security details as shown in the diagram below. Note that in our example here, we will select "Google" for the Security value from this page. I shared how to get the Client ID and Client Secret in the "Obtain OAuth 2.0 credentials from the Google API Console" section of my previous blog post Using OAuth 2.0 to access other cloud services from NWC

 

6. Once we enter the required values of Security, Client ID, and Client Secret, click Next to continue, where we will specify an Icon, Name, and Description for the Connector. I have used Google Calendar and Google Calendar API for the Name and Description values in my example.

 

7. The new Xtension will be added as shown below

 

8. We may now edit the Nintex Workflow Cloud workflow to include the new connector to add an event to Google Calendar. Note that we need to add a connection and grant Nintex Workflow Cloud access to the Google Calendar for the purpose. This is required because we need to specify a connection to be used in the connector actions.

 

With the same approach, we may include all the required Google Calendar API end-points to the Nintex Workflow Cloud.

A three months Tentative Production Plan helps procurement division to plan what material to acquire to support the production of compressor at the production site. There are two types of materials to be shipped to a production plant,

  1. Movement of material from one plant to the destination production plant/storage
  2. Delivery Order directly from its supplier to the plant/storage

 

Nintex Mobile application is being used at the plant supporting Goods Receipt at the point where materials are being received. This minimized the need for personnel at the plant to receive goods by noting it on paper, and the need to go back to the office desktop to update the good receipts using a desktop computer with SAP console installed. Updates of good movement is now instantly done over at the point of good receipts using Nintex Mobile, and data are being updated immediately to the SAP system powered by Nintex Workflow with Workflow Connectors provided by Theobald Software.

 

For the purpose, a "Goods Receipt" form was created using Nintex Form as shown in the diagram below, Nintex Form features bar code or QR code scanning, eliminates the potential human mistakes of typing in long serial number of goods received. Nintex Form could easily be prepared to surface on different devices without much efforts. In this article, as our focus is to look at the integration of Nintex and SAP, we going to keep the form explanation simple here.

 

 

Once the data is captured and submitted to the Goods Receipt list, the associated workflow will be triggered to process the data by posting the data to a remote SAP system. This was done with simply using the ERPConnect Services connectors provided by Theobald Software. ERPConnect by Theobald comes with a set of ready to use connectors as shown in the diagram below.  

 

In this requirement, I have made use of the “Call SAP function” action, it provides full capability to integrate with SAP by simply calling all the available SAP functions, plus the “Z” functions. One thing I find it easy is Theobald Software has a complete documentation and tutorials available on-line (i.e. OnlineHelp - Theobald Software GmbH ) that helps me to do what I need to do for the intergration project. Diagram below shows the "Call SAP Function" action configuration, followed by a table with values I have supplied to the action. 

 

Table below shows the values i have passed to the required parameters of the "Call SAP function" action. Take note that in my scenario i have fixed some of the values to simplify for the demo purpose. In an actual scenario, we will need to substitute the values reflecting what we have in our form/list design.

 

GOODSMVT_CODE
GM_CODE05
GOODSMVT_HEADER
PSTNG_DATEfn-FormatDate(Current Date, yyyyMMdd)
DOC_DATE
Tables: GOODSMVT_ITEM
MATERIALR-B209
PLANT1100
STGE_LOC0001
MOVE_TYPE501
ENTRY_QNT
Output
output.GOODSMVT_HEADRET.MAT_DOCMAT_DOC

 

This is working great so far if we only update one material a time through the "Call SAP Function" action. In our form we have a repeating section where we allow to input more than one material model at any time. Luckily, the action has taken this into consideration as well, this is where we will need to use the "Additional XML table input" parameter of the table section in the "Call SAP Function" action. Theobald-software's help scenario has provided a very good example on how this could be configured  OnlineHelp - Theobald Software GmbH

 

Following the example provided in OnlineHelp - Theobald Software GmbH, I have added another Query XML action to wrap the required format of the XML table as below

 

The final XML content to be passed to the "Additional XML table input" should look similar to the below (i.e. substitute the variables or Item properties with what reflects your design). 

 <?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<TABLES><TABLE name="GOODSMVT_ITEM">
<GOODSMVT_ITEM>
     <MATERIAL>{WorkflowVariable:Material}</MATERIAL>
     <PLANT>{ItemProperty:Plant}</PLANT>
     <STGE_LOC>{ItemProperty:Storage_x0020_location}</STGE_LOC>
     <MOVE_TYPE>{ItemProperty:Movement_x0020_type}</MOVE_TYPE>
     <ENTRY_QNT>{WorkflowVariable:Qty}</ENTRY_QNT>
  </GOODSMVT_ITEM>
  <GOODSMVT_ITEM>
     <MATERIAL>{WorkflowVariable:Material}</MATERIAL>
     <PLANT>{ItemProperty:Plant}</PLANT>
     <STGE_LOC>{ItemProperty:Storage_x0020_location}</STGE_LOC>
     <MOVE_TYPE>{ItemProperty:Movement_x0020_type}</MOVE_TYPE>
     <ENTRY_QNT>{WorkflowVariable:Qty}</ENTRY_QNT>
  </GOODSMVT_ITEM>
</TABLE></TABLES>

 

Here is how the final "Call SAP function" action look like. The formatted XML content is set to valrible "XMLInputGoodsmvt_Item" which is assigned to the "Additional XML table input" field of the action.

On October 1, 2018, Nintex will no longer support Microsoft Account authentication for Nintex Mobile.

Why are we making this change? 

In June 2016, Nintex released the Nintex Mobile Multiple Account Profile feature that provided a means of aggregating forms and tasks from multiple sources without the need of Microsoft Account authentication.  As a result, Nintex will end of life Microsoft Account authentication. 

As part of this transition, Nintex is notifying existing partners and customers to help prepare for this upcoming change.  

Impacted customers are organizations that currently uses Microsoft Account authentication with:

  • end users using Nintex Mobile application; or
  • existing Nintex partners and customers that have built and deployed Nintex App Studio mobile applications enabling Microsoft Account.

If your customer solutions do not use Microsoft Account across any of these scenarios and does not use Microsoft Account for Nintex Mobile account authentication, no further action is required

How does this impact me?

This change impacts Nintex partners and customers that are currently using Microsoft Account to support the following scenarios:

 

  • Enterprises using the Microsoft Account technology to extend access to their on-premises SharePoint environment to Nintex Mobile;
  • Nintex Mobile users using a Microsoft Account as a means of account aggregation; or
  • Nintex partners and customers who have deployed and currently maintain Nintex App Studio applications that enable end users to authenticate using Microsoft Account.

How can I prepare for this change?

Ahead of the October 1, 2018 end of support for Microsoft Account, Nintex has created Knowledge Base articles that offer alternative approaches to using Microsoft Account:

Nintex is working to communicate these changes through a variety of channels.  These communications will target system administrators and designers identified as potentially using Microsoft Account. 

These planned changes include:

  • As of September 1st 2017, Nintex Mobile users looking to add a Microsoft Account are notified in app that they cannot authenticate using this method. This feature has been removed for new Microsoft Accounts.
  • In early 2018, a release of Nintex Forms for SharePoint 2010/2013/2016 will include messaging in Central Administration. In October 2018, Nintex will remove the Microsoft Account feature from Central Administration.
  • In calendar Q3 2018, Nintex is planning to apply in-app messaging targeting existing Nintex Mobile users. System Administrators should direct their end users to take the appropriate action detailed in the Knowledge Base article.
  • Also in calendar Q3 2018, Nintex is planning to apply in-app messaging targeting existing Nintex App Studio users. System Administrators should direct their end users to take the appropriate action detailed in the Knowledge Base article.

Please email Nintex Support or visit https://support.nintex.com/ with any questions. 

Greetings everyone  

 

You might remember my previous post where I illustrated how you can dynamically build a list of approvers and assign tasks to them in a loop via a Nintex® Workflow. In this post I've included an example  .

 

 

AuthorPalesa Sikwane
Long DescriptionWant to Create a list of approvers dynamically using Nintex Workflow? This is the post for you!
Dependencies

Nintex® Workflow for Office 365®, SharePoint Online® (Office 365®)

Support Info

Palesa Sikwane

Additional Information

N/A

 

My previous post Assigning Tasks Dynamically Using Start a Task Process in NWF0365 can be summarised as: 

 

1. Querying a List of Approvers

 

2. Assigning Tasks for Each Brand Dynamically

 

Step 1: Querying the list of approvers

I have configured a list containing my Approval matrix per brand name (I went with cereal brands as an example   ):

 

Brand NameApprover NameDeputy Name
WeetbixPalesa Emmanuel SikwaneRichard Roe
KellogsRichard RoePalesa Emmanuel Sikwane
Jungle OatsJane DoeJane Doe

 

 

This is the list I query in the workflow using the Query List Action, coupled with a few other actions. So i've built a Workflow containing a State Machine, and 2 States:

 

1.  Initial and ;

2. Assign Tasks. 

 

In the Initial State I perform the following steps:

 

ActionDescription

Here I set my workflow status column to : 
"Workflow Started Successfully"

Here I query the Approval Matrix list using the following configuration:

 

 

 

 

 

Note:

Here I simply query all items in my Approval Matrix list (returning 100 items) and output the following data into collection variables:

 

- ID of all my brands (into collBrandID)

- Brand Names (into collBrandName)

 

I also output the number of results returned into a variable called numBrands

Here I log to my history list how many Brands are returned in numBrands
Here I used a Set Next State action to jump to the next state of my workflow called Assign Tasks.

 

Step 2: Assigning Tasks for each Brand Dynamically:

 

This is the second and final state of my workflow and it has the following configuration:

 

ActionDescription

Here I set my workflow status column to:

" Assigning Tasks "

 

 

 

 

 

ActionDescription

The next step is a For Each which will allow us to iterate through the information returned in our  step in our Initial State.

 

This step is configured as follows:

 

Note:

 

- Here I basically iterate through my collBrandID collection which stores all of the ID's of my Brands in the Approval Matrix list. 

- I then set my Output value to a variable called BrandID to store the current brand I am iterating through in the loop. 

- I keep track of each Brand ID in a variable called BrandIndex (which automatically changes when the For Each iterates to the next BrandID)

 

Just a couple of notes on collections: 

- Collections ALWAYS have an Index beginning at 0

- Collections store multiple values into a single collection variable. When I think of collections I think of data been stored in a block. For example a collection containing 3 brands would look like:

 

 

And if we put the index next to each Brand Name(and applying the rule that indexes begin at position 0)

 

Weetbix is at position 0

Kellogs is at position 1
Jungle Oats is at position 2

So we can at any time pull out a specific value (using a Get Item from Collection action) OR iterate through all the data using the index to help us keep track of each value in the collection using a For Each action, which automatically increments the index for us as it reads each value out of the collection.

 

Note:

 

- In this step i get the ID of each Brand because its Unique, meaning that you'll never get items with the same ID in the SAME list

 

- Collections store multiple pieces of information, which are usually separated with a semi colons or in some cases commas (i.e. " ; " or " , ") and square brackets (i.e. " [ " or " ] "  ). This makes it easier for Nintex Workflow to separate each piece of data when we iterate through it or pull out a specific value.

In this step based on the Index, I read the each item out my collection and get the corresponding Brand Name. Remember in my For Each i get the Brand ID and iterate through those

 

Note:

This runs in the loop and will repeat x number of times, where x is the number of items we find.

In this step for record purposes, I log the current Brand Name and the Brand ID that the workflow has picked up

Here I query my Approval Matrix list where I take the current Brand ID, to query my Approval Matrix and return in collection variables:

 

- Approver Name for the specific Brand

- The name of the Deputy for that specific Brand

 

Note:

We're using the Brand ID as a filter which is Unique, and will ensure that for the Approver Name and the Deputy; although both are stored in collection variables; there will be one value for each, and because we expect one value, that value will always have an Index of 0 . 

I then log the following to my workflow history (for record purposes):

 

- Brand Name

- Approver

- Deputy

1. I use a Parallel Block to run the next set of steps at the same time, in this example this is perfect, as the SAME steps need to occur for both the Approver and the Deputy we pick up when we query our Approval Matrix.

 

Note:

Parallel blocks are great for structuring your workflow, but also ensuring that things happen at the same time, in my example I used this for that purpose but also to make it easier for me to explain the workflow. 

 

 

2. I then(for both the Approver and the Deputy) take the collection variable(s) returned and set them to their corresponding text variables (I use this data later on in my regular expressions below).

 

3. In this first regular expression I remove the square brackets that are part of my collection where I return the Approver Name as well as the Deputy. I replace these with blank text. I set the following configuration:

 

 

 

 

4.In this second regular expression I take the result returned above and replace my commas with semi colons. I do this because when you specify multiple email 

they are usually separated by semi colons, and if you guys remember in this post I want to Assign Tasks to multiple people dynamically; and to do this I use my loops to deteremine who should get the tasks and build the list or task participants using . I use the following configuration:

 

The last thing I do in the loop is use a Task Process to Assign my tasks dynamically to the email addresses i've determined in the previous step. The action is configured as follows:

 

I set the Assign options as follows:

 

 

Note:

 

As you guys can remember in my previous post the Start a Task Process workflow action is aimed towards Assigning a task to a group of Users, and allows workflow designers to specify task assignment criteria (Assign tasks all at once or in serial) as well as completion criteria (Wait for all responses, Wait for first response, Wait for specific response or Wait for percentage of a response). 

 

This functionality allows us to control how we would like to Assign the tasks to Approver and the Deputy as required, i.e.

 

- In series (one after the other); this option works really well if Assign Tasks to users in a SharePoint Group, this has been discussed in this post here,

- In parallel (all at once) 

 

The advantage of this is that it will allow you to be dynamic  . So if you have a complex process that requires you to cater for both scenarios without having to make changes to the workflow this can be utilised really well. 

 

Also now that we have the schedule workflow feature available on office 365, Brad Orluk has a good blog post on this new feature titled: Tee Up Your Work - Scheduled Workflows Are Available for Office 365! ; be sure to check it out

 

 

In any case i'll  probably cover this in a follow up post  to show you guys how you can use this to your advantage. 

 

 


I hope this helps someone out there

 

Cheers

I am going to demonstrate a Production Planning process that is powered by Nintex Workflow in this blog post. Before we get further into the production planning process, let us recap what we have gone through together in my previous sharing in Part 1 of GKK Compressor Industry (i.e. RFQ to Quotation process). In the Sales and Marketing division, Product Catalog is being used to create RFQ, which in turn generates quotations issued to customers. Every quotation issued to customer updates the Sales Forecast with the increased number of compressor model to be delivered.

 

Being a Lean Manufacturing, Production Planning is crucial to GKK Compressor Industry, the critical success factor is produced only what is needed to be delivered on time. It keeps no unnecessary inventory to minimize the waste of inventory space. Tentative Production Plan is always three months ahead of current month, helps the Procurement to keep the Material Management efficient, knowing what material and quantity of material to order with advance knowledge of the requirement from the production.

 

Key techniques in the production planning to be shared:

  1. Nintex Form Web Part embedded to the "Draft Production Plan" list/page
  2. "Loop" action alternative for immediate execution
  3. Formatting a monthly calendar with CSR

 

The Production Plan

The Production Plan is a plan used in the production division with details on what models and quantity of compressor to be produced for a particular month. A production line has its daily production capacity that is dependent on machine and human resource capacity. If a production line can go up to 60 pieces of compressor per calendar day with full capacity running three work shifts, two work shifts will give capacity of 40 pieces.

 

To get the Actual Production Plan, we draft a production plan from monthly sales forecast with details on what models and quantities to be delivered. The diagram below demonstrates how it's being created powered by Nintex Workflow. The sample plan shows how the quantity of each model to be produced spread over different days with daily capacity of 30 pieces per day for October 2017. 

To produce a total of 71 pieces of compressor for the first model (i.e. SVT125-35), the work has to be spread into three days, with the third day producing the remaining 11 pieces required to make it 71, since on the third day we produced only 11 pieces for the model, it has the remaining capacity of 19 to produce the next model in line (i.e. SHT277NA in the example).

 

1. Nintex Form Web Part embedded to the "Draft Production Plan" list/page

I find Nintex Form Web Part very useful especially when I need to make Sharepoint page interactive, but it wasn't discussed a lot. The Draft Production Plan is just one of the solutions I make use of Nintex Form Web Part to get user to specify or collect Production Plan parameters (i.e. Month, Year, Capacity, and to or not to include week ends as working days for the production plan we are drafting). To include that, I simple embed the "Create Production Plan" workflow's start form to the "Draft Production Plan" view/page as shown below. Once the form is submitted (i.e. with the Start button in the example), the "Create Production Plan" site workflow will be triggered, and the Draft Production Plan list will be refreshed with the production plan that was drafted by the site workflow.

 

2. "Loop" action alternative for immediate execution

The algorithm I used for drafting a production plan is summarized as below. I have then realized, it took hours for the workflow to complete a "Production Plan", reason being the "Loop" action will be executed every 5 minutes by default as it is executed by the Sharepoint Timer Job, even If I configured the Timer Job to run every 1 minute (i.e. minimum interval by Sharepoint), it still take a long time for the workflow to be completed.

  Prepare an empty "Draft Production Plan" view (delete all the existing list items)
  Query the "Sales Forecast" for models to be produced for the specified month
  For-each models in the list
     Create a list item for the model to be produced
     Split the total quantity for the model into the number of days required
     Loop through each calendar day of the production month
            Update the daily quantity for the model to the list item (i.e. exclude/include week end)
     End Loop
  End For-each

We have no choice but to consider to use the "For Each" iteration. Even if you use the State Machine, it is still depending on the Timer Job interval constraint. In order to do that, we will need to calculate the number of loop required, and create a collection of the required number to use the For-each iteration. So, if the quantity to be produced is 71, 71 divide by daily capacity of 30 equals to 2.3667. We get the whole number of 2 leaving behind the fraction, as 2 will be used as collection index of 2 for three iteration (i.e. index starts at 0). This is true if we always start a day with the new daily capacity (e.g. 30), but we will need to consider what if capacity for the day is not always starts from the beginning. In the sample production plan above, the quantity of 22 for model SNT207V is taking 2 days to produce, because the capacity of the day it starts the production was 1 (i.e. 30-29=1) as 29 was used to produce the model prior to it. To get the right count of iteration required, we will need to add the remaining quantity of the last model before we divide the quantity with the capacity, the two calculation actions shown below give the right formula to get the required number of iteration.

 

3. Formatting a monthly calendar with CSR

From the above Draft Production Plan example, I have customized the "Draft Production Plan" custom list into a calendar look and feel, by coloring the columns representing "week end" into grey. The Custom Side Rendering (i.e. CSR) is a feature by Sharepoint is being used to get the calendar view.

SP.SOD.executeFunc("clienttemplates.js", "SPClientTemplates", function() { 
     SPClientTemplates.TemplateManager.RegisterTemplateOverrides({
          OnPostRender: function(ctx) {
               var rows = ctx.ListData.Row;
               var month = rows[0]["Month"];
               var year = rows[0]["Year"];
               var weekends = [];
               var date = new Date(year, month, 0);
               var lastDay = date.getDate();
               for (var d=1;d<=lastDay;d++)
               {
                    date.setDate(d);
                    if (date.getDay()==0 || date.getDay()==6){
                         weekends.push(d);
                    }
               };
               for (var i=0;i<rows.length;i++)
                    {
                         var rowElementId = GenerateIIDForListItem(ctx, rows[i]);
                         var tr = document.getElementById(rowElementId);
                         for (var j=0, len=weekends.length; j<len;j++){
                              var td=tr.cells[weekends[j]+2];
                              td.style.backgroundColor = "#eeeeee";
                         }
                    }
               }
     });
});

I have include the script as JSLink shown below

 

AuthorPalesa Sikwane
Long Description

Do you need to scan through a SharePoint Sites contents and apply some logic based on the existence of a content type? Or maybe even go as far as scheduling this? Then this post is for you!

Dependencies
  • Nintex® Workflow 2010
  • Nintex® Workflow 2013
  • or Nintex® Workflow 2016

 

**And the applicable SharePoint® version for the Nintex® Workflow versions above. 

Support Info

Palesa Sikwane

Additional Information

N/A

Product used

Nintex® Workflow 2016 | Version: 4.2.0.10 - International

 

Greetings from a warm and sunny side of Johannesburg, South Africa! It's finally Spring time in this side of the world!

 

First things first, I would like to thank Michelle Barker for coming up with this question and requirement!

 

 

As you guys would know, reusable workflows have the following properties:

  • Are associated with SharePoint® Content Types
  • Because they are linked to a content type, they can be made available wherever those content types are used in a site collection


Some of the advantages of using a reusable workflow are:

  • Having one Central place to make changes and publish a workflow and push it down to every list or document library
  • Making use of site templates that have content types with workflows linked to them

 

Some of the disadvantages of reusable workflow:

  • Inability to schedule a reusable workflow out of the box
  • Cannot be tied to a site workflow meaning that you cannot really schedule it using a site workflow. 

 

What if then you were faced with a requirement that needs you to run a scheduled workflow based on a content type which could span across different lists and libraries? Maybe you have a requirement to send out reminder(s) at a certain frequency for certain document types? 

 

How would you go about it?

Well there is a way that involves:

 

1. Finding all of your lists on your site

2. Getting all linked content types for each list

3. Per content type, Switch and apply your logic.

 

I built this using the following site workflow:

 

Step #Workflow ActionDescription
1.

Call web service action (Get List Collection - Internal Names)

  • This step involves calling the GetListCollection SharePoint webservice:
    • This allows us to get a collection of all the Lists and Libraries in our current site. The collection will store the InternalName of our lists, or what some of you might refer to as the GUID.
  • I've configured this workflow action as follows:

    Configuring Get List Collection Webservice to get the InternalName

 

Note: I've configured this to actually return the InternalName of my lists or the GUIDs in a collection variable called ListCollection. You will see how and where we use this later...

2.Collection Operation

Here I simply count how many lists are in my collection and store this in a variable called No Lists:

 

 


Note: Note that I also log my result within the same action.

3. For Each

This is my first For Each where I basically loop through my ListCollection I retrieved in Step 1, and store the InternalName or the GUID of each list in a variable called ListGUID. The configuration is as follows:

 

3.1

Log in history list

Here I basically log the current lists index in my collection(ListCollection) as well as the ListGUID:

3.2

Call web service (Get List Content Types)

Next, I call another SharePoint Web Service called GetListContentTypes based on the current ListGUID that my For Each in Step 3 is looking at.

 

I then store the results in a collection variable called List Content Types. This step is configured as follows:

 

Note: The results returned here are in XML, and one of the NODES in the XML contain the Name of the content type, which is what we want

3.3

Query XML

Seen that in Step 3.2 I get returned some XML, I simply query the XML in this step to get the Display Name of my content types and store these in a collection variable called Content Type Names. I've configured this step as follows:

4

For each

This is my second For Each; which allows me to iterate through each content types name stored in my collection Content Type Names:

4.1

Log in history list

Here I simply log the name of my content type:

4.2

Switch (per content type)

Note that I haven't put this in my workflow, but this is where the magic happens for you guys. 

 

So because we've found content types for any list or library across our site with the previous steps, we can use a conditional action such as a Switch to put in some workflow logic as required per content type! 

 

Running this workflow will give you the following result in your workflow history:

So as you can see my Workflow scans the current site, and for each list and library returns the associated content types. 


Feel free to download this and play around with it, and do what you will with it   Maybe even make it a User Defined Action?  

 

Let us know how you guys used this!

 

I hope this helps someone out there! 


Cheers

 

Several community members came close, but didn't quite get this one, so I'm extending it through the month of October!

 

This month, instead of a special errand, we're going to reward you for what you do anyway. Think of it as a bonus.

For every fifth time your answer is marked correct in the month of September, you'll get a bonus 300 points on top of the usual points you get for having your answer marked correct.

Get ten answers marked correct, that's an extra 600 points!

There's only one catch: You have to tell me which ones you provided.  By posting links to your correct answers below.

Anyone who gets five correct answers also gets this Mission Possible badge.

mission possible

 

Good luck!

 

 

The not-so-fine-print:  It doesn't matter when you posted an answer or when a question was asked. It just matters that the answer was marked correct (not by yourself) in the month of September, 2017.  So if a question was posed in August of 2015, and you provided an answer, but the person who asked it didn't mark your answer until Sept 5, 2017, then it counts toward your total this month. But if you ask a question, answer it and mark your own answer, it doesn't count. 

RFQ to Quotation

We all know we are here because we work on something that is related to Nintex Workflow or Forms, and the reason we use Nintex Workflow or Forms is because it makes our life easier. Things have changed a lot these days, trending towards the cloud, hybrid environment becoming very common that most of us are working on both on premise platform and at the same time on the cloud. Regardless of which platform you use, you will find Nintex helps.

 

Part 1 of GKK Compressor Industry blog series, I am going to share exactly how I use my hybrid environment to save the efforts for my recent investment - GKK Compressor Industry. GKK Compressor Industry is "Lean Manufacturing" produces world class compressors. Moving towards a Six Sigma company, Simplifying Processes and Reduced Errors falls in its Lean Six Sigma project mission to turn the company into highly effective and efficient company.

 

RFQ (i.e. Request for Quotation) is one of the key Sales and Marketing processes involving its customers. The figure of RFQ to Quotation shown above, demonstrates how Nintex Forms is use allowing customers or internal sales to fill up an RFQ form powered by Nintex Forms. The output of RFQs are Sales Forecast (i.e. use for Production Planning) and Quotations (i.e. issued to customers). The process is simplified at GKK Compressor Industry, Nintex Workflows automates the RFQ process by getting the unit price for the requested compressor models to provide the prices, and it auto generates an Quotation in Excel Format, and finally it updates the Sales Forecast with the quoted Compressor models. The RFQ process not just simplifies the process with reduced steps, it also eliminates potential human errors by auto generating the required quotations.

 

The quotation generation is done by simply calling a Nintex Workflow Cloud workflow from its RFQ process powered in its Sharepoint environment. It's worth taking a trip to Nintex Workflow Cloud for a quote generation, as we realized it supports OpenApi (i.e. Swagger) by its Xtensions framework. We make use of the Xtensions to include the Microsoft Graph API connectors in Nintex Workflow Cloud helping us to create quotation based on our pre-designed Excel Quotation template, as we only need some functions to create Excel quotation, we brought in only few Excel related end-points of the Microsoft Graph API.

 

Microsoft Graph API - Excel

Based on the connectors defined and shown under the Microsoft Graph API - Excel action group, you will notice there is no connector to create or copy excel file, this is because I have made use of Nintex Workflow Cloud's default Sharepoint conector to copy a Excel Quotation Template to a new quotation with the name I provided. The Sharepoint "Copy a file" connector's configuration is shown below.

 Sharepoint connector - Copy a file

Once the new file is created/copied from a pre-designed template, what I will need is basically

  1. "Add table rows" for quotation items
  2. "Delete table rows" for unwanted rows in the excel table
  3. "Update a nameditem" for its value
  4. And so on…

 

I have attached my swagger file for the Microsoft Graph API - Excel connectors. Few notes to take if you want to implement the Graph API for Excel using the swagger file shared in this blog:

  • To enable the connector, you will need to create an Azure Active Directory application (i.e. here Is my previous blog on how to create one https://community.nintex.com/community/tech-blog/blog/2016/10/20/microsoft-graph-api-from-nwc)
  • Excel related operation of Microsoft Graph API seems to work only with its "beta" version (i.e. not the "1.0" version) for files resides on Sharepoint library (i.e. I am not sure why and if this is correct, but I only managed to get it work with the "beta" version).
  • There are two ways to create the Azure Active Directory app, one via the new Azure Portal, the other using the old portal (i.e. I only got it works with Active Directory app created by the old Azure portal)