Vadim Tabakman

Nintex Workflow - Math Inline Functions

The Inline Function functionality has really opened up Nintex Workflow design. You can use any of the out-of-the-box inline functions (look up the Nintex Workflow help - get it at http://connect.nintex.com). But the really exciting thing is that Microsoft provides other static methods that you can add to Nintex Workflow and do even more in the product. I talked about some of this in my article Nintex Workflow - Trigonometry (why?....why not?)

But what if you want something else that you can't find available in any of the Microsoft namespaces/classes?

That's when you start doing some development and create your own Inline function.

What is an inline function?

The simple explanation, is that it is a static method, in a class, in a namespace, in an assembly in the GAC.

So what you need to do, is start a project in Visual Studio. I chose a Class Library. Add a new class to it and then add some static methods to that class that you want to expose to Nintex Workflow designers. Make sure your project is signed, as it will need to go into the GAC (and therefore needs to be strongly named).

Then you add the inline function reference to Nintex Workflow, using NWAdmin tool that is installed with Nintex Workflow. It has an -o AddInlineFunction operation. You just need to provide it with the details of your Inline function.

What has prompted me to look into this?

Recently I found that people would like to do some basic calculations inside the Build Dynamic String action. But it currently isn't built to accommodate this type of functionality out-of-the-box.

Example :
You have a text string "PingPong.txt", and you want extract the "PingPong" part. Yes you could do this with a Regular Expression action, but we want to do it in a Build Dynamic String.

You have the fn-SubString inline function, but that takes a 0-based start index and the number of characters you want to get. But if the text you expect changes length, then you can't hard code that in.

Here's our issue :

fn-SubString(PingPong.txt, 0, 8) = PingPong
fn-SubString(Tennis.txt, 0, 8) = Tennis.t

 

What we can't do, is something like this :

 

fn-SubString(PingPing.text, 0, fn-Length(PingPong.txt)-4)

 

You can't do the (subtract 4) calculation, as the Build Dynamic String action does not support this.

 

The ugly workaround :

 

1. Have a Build Dynamic String action that uses the fn-Length inline function and stores the result in a text variable

 

2. Add a Convert Value action to convert the length into a Number variable

 

3. Add a Math Operation action that would subtract 4 from that Number variable

 

4. Add another Build Dynamic String action, that would have this fn-SubString(PingPong.txt, 0, {WorkflowVariable:numLength}) - or something like this

 

Seems like a lot to do, when a simple calculation would make things so much easier.



Solution

I created a class called VTMath and added 4 static methods to do the most simplest of math operations. Add, Subtract, Multiply and Divide.

 

public class VTMath
{
    public static double Add(double x, double y)
    {
        return x + y;
    }
    public static double Subtract(double x, double y)
    {
        return x - y;
    }
    public static double Multiply(double x, double y)
    {
        return x * y;
    }
    public static double Divide(double x, double y)
    {
        return x / y;
    }
}

 

Now that we have the code, I make sure my class library is signed, built into a SharePoint feature (just because) and we are ready to deply.



Deployment of our new Inline Functions

Here are the deployment command lines.

 

stsadm -o AddSolution -filename VTMathInlineFunctions.wsp
stsadm -o DeploySolution -name VTMathInlineFunctions.wsp -immediate -allowgacdeployment
stsadm -o execadmsvcjobs

 

Now that the solution is deployed, we need to tell Nintex Workflow of our new Inline Function.

 

Go to the installation folder of Nintex Workflow, so you can run the NWAdmin.exe tool. Usually located : c:\program files (x86)\Nintex\Nintex Workflow 2007

 

Run the following in the command line prompt:

 

NWAdmin.exe -o AddInlineFunction -functionalias fn-VTAdd -assembly "VTMathInlineFunctions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=05b6de0f79daedbe" -namespace VTMathInlineFunctions -typename VTMath -method Add

NWAdmin.exe -o AddInlineFunction -functionalias fn-VTSubtract -assembly "VTMathInlineFunctions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=05b6de0f79daedbe" -namespace VTMathInlineFunctions -typename VTMath -method Subtract

NWAdmin.exe -o AddInlineFunction -functionalias fn-VTMultiply -assembly "VTMathInlineFunctions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=05b6de0f79daedbe" -namespace VTMathInlineFunctions -typename VTMath -method Multiply

NWAdmin.exe -o AddInlineFunction -functionalias fn-VTDivide -assembly "VTMathInlineFunctions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=05b6de0f79daedbe" -namespace VTMathInlineFunctions -typename VTMath -method Divide

 

What this means, is that now instead of all those actions and variables, all you have is one Build Dynamic String action.

 

fn-SubString(PingPing.text, 0, fn-VTSubtract(fn-Length(PingPong.txt),4))

 

As an example of what you can do now in the Build Dynamic String action, would be to make a calculation like this :

 

(((10 + 20) / 5) * 3) - 15



The Build Dynamic String would look like this :

 

fn-VTSubtract(fn-VTMultiply(fn-VTDivide(fn-VTAdd(10,20),5),3),15)



It may not be the neatest, but it'll cut down your workflow design by a lot if you had to do something like this.



Useful Downloads

Solution File - VTMathInlineFunctions.wsp

Posted by Vadim Tabakman Sunday, February 5, 2012 2:12:00 PM Categories: Inline Functions Math Calculations Nintex Nintex Workflow
Copyright Vadim Tabakman
Rate this Content 1 Votes

Comments

Thursday, February 13, 2014 11:58:19 PM
shardul Pasare

re: Nintex Workflow - Math Inline Functions

Hi,

I have created custom inline function. To deploy inline function we require to add NWAdmin.exe tool. I want to deploy using batch file. I able to create batch file as follow.@SET PathtoNintex="C:\Program Files\Nintex\Nintex Workflow 2010"

cd %PathtoNintex%

NWAdmin.exe  -o AddInlineFunction ....

But this is working only if I am running this from C drive. If I am trying to running from othere location it is not working. Can you please help regarding this

Thursday, October 29, 2015 6:27:00 AM
Jeff
Gravatar

re: Nintex Workflow - Math Inline Functions

NinTex can be flaky with its functions.  Use of fn-SubString(), for example, within a larger string oftan results in "fn-SubString(..." being spelled out in the output, rather than the function actually running.  Must often create a separate variable for each part of a string, create separate Build-string actions with one and only one function in each and populate each variable.  Then put them all together in final Build-String action. 

Yes, a simple string might take you all day to construct but this is the platform you're stuck using.

You must sign in to this site to post comments.
Already Registered?
Sign In
Not Yet Registered?
Register

Statistics

  • Entries (279)
  • Comments (1769)

Categories