BizTalk Mapper Extensions UtilityPack is now available for BizTalk Server 2016

BizTalk Mapper Extensions UtilityPack is now available for BizTalk Server 2016

BizTalk Mapper Extensions UtilityPack is a set of libraries with several useful functoids to include and use it in a map, which will provide an extension of BizTalk Mapper capabilities.

This particular version is optimized for BizTalk Server 2016

Functoids

Conversion Functoids

  • Convert from human readable to epoch date Functoid: This functoid allows you to convert a traditional date (Human Readable Date) into a Unix date (Epoch Date).
  • Convert from epoch to human readable date Functoid: This functoid allows you to convert a Unix date (Epoch Date) into a traditional date (Human Readable Date).
  • Convert DateTime format Functoid: This functoid allows you to convert DateTime format.

Dynamic Generators Functoids

  • Password Generator Functoid: Use this functoid to build a random password.
  • Guid Generator Functoid: This functoid allows you to generate a new Guid.
  • Tiny Id Generator Functoid: This functoid allows you to generate a new Tiny Id.

Encoder Functoids

  • Base64 Decoder Functoid: This functoid allows you to decode Base64-encoded text strings.
  • Base64  Encoder Functoid: This functoid allows you to convert string object into base64 encoded string.

Configuration Functoids

  • BTSNTSvc Config Get Functoid: This functoid allows you to get configuration parameters from BTSNTsvc.exe.config. If there is no section specified, the functoid reads from the AppSettings.
  • System Environment Variable Get Functoid: This functoid allows you to get configuration parameters from machine System Environment Variable.
  • Custom Config Get Functoid: This functoid allows you to get configuration parameters from a custom configuration file.
  • Windows Registry Config Get Functoid: This functoid allows you to get configuration parameters from Windows Registry.
  • SSO Config Get Functoid: This functoid allows you to get configuration parameters from SSO Database.
  • Rule Engine Config Get Functoid: This functoid allows you to obtain a definition value from a Vocabulary in the Business Rules Engine.

CRM Functoids

  • CRM Lookup Functoid: This functoid allows you to retrieve a value from CRM lookup field. This functoid is able to perform a lookup operation using two different approaches: Accessing the CRM database (read-only), for local CRM integration or through the CRM web services if you want to avoid giving access to the database or if you have to integrate CRM online.
  • MSCRM Map Helper Base Types Functoid: Use this functoid when you want map CRM base data types such as “xs:string”, “xs:int” and so on.
  • MSCRM Map Helper Guid Functoid: Use this functoid when you want map CRM guid type.
  • MSCRM Map Helper Money Functoid: Use this functoid when you want map CRM money type.
  • MSCRM Map Helper Option Value Functoid: Use this functoid when you want map CRM option value type.
  • MSCRM Map Helper References Functoid: Use this functoid when you want map CRM reference type.

String Functoids

  • String Constant functoid: This functoid allows you to set constant values (strings) inside de maps.
  • String ToTitleCase functoid: This functoid allows you to Converts the specified string to title case (except for words that are entirely in uppercase, which are considered to be acronyms).
  • String Advance Compare Functoid: This functoid allows you to compare two specified String objects, ignoring or honoring their case, and returns a boolean that indicates if they are equal or not.
  • String Replace Functoid: This functoid returns a new string in which all occurrences of a specified string (second parameter) found in the first string are replaced with another specified string (third parameter).
  • String Normalize Functoid: This functoid allows you to normalize the text. It will remove two or more consecutive spaces and replace them with a single space, remove two or more consecutive newlines and replace them with a single newline and “condense” multiple tabs into one.
  • String PadLeft Functoid: This functoid allows you to set a new string that right-aligns the characters in this instance by padding them on the left with a specified Unicode character, for a specified total length.
  • String PadRight Functoid: This functoid allows you to set a new string that left-aligns the characters in this string by padding them on the right with a specified Unicode character, for a specified total length.
  • String Remove Leading Zeros Functoid: This functoid allows you to remove any leading zeros from an input string.

Custom Advanced Functoids

  • Default Value Mapping functoid: The Default Value Mapping have a similar but different behavior. You can use the Default Value Mapping functoid to return a value from one of two input parameters. If the value of the first input parameter is Null or Empty, then the value of the second input parameter is returned, otherwise, the first input is returned.

XPath Functoids

  • XPath FunctoidThis functoid natively integrates custom XPath queries in the BizTalk Mapper.

SharePoint Functoids

Logical Functoids

  • Advance Logical AND Functoid: Use the Advance Logical AND functoid to return the logical AND of input parameters. This functoid requires two to one hundred input parameters.
  • Advance Equal Functoid: Use the Advance Equal functoid to return the value “true” if the first input parameter is equal to the second input parameter. This functoid requires two input parameters.
  • Advance Greater Than Functoid: Use the Advance Greater Than functoid to return the value “true” if the first input parameter is greater than the second input parameter. This functoid requires two input parameters.
  • Advance Greater Than or Equal To Functoid: Use the Advance Greater Than or Equal To functoid to return the value “true” if the first input parameter is greater than or equal to the second input parameter. This functoid requires two input parameters.
  • Advance Less Than Functoid: Use the Advance Less Than functoid to return the value “true” if the first input parameter is less than the second input parameter. This functoid requires two input parameters.
  • Advance Less Than or Equal To Functoid: Use the Advance Less Than or Equal To functoid to return the value “true” if the first input parameter is less than or equal to the second input parameter. This functoid requires two input parameters.
  • Advance Not Equal Functoid: Use the Advance Not Equal functoid to return the value “true” if the first input parameter is not equal to the second input parameter. This functoid requires two input parameters.
  • Advance Logical NOT Functoid: Use the Advance Logical NOT functoid to return the logical inversion of the input parameter. This functoid requires one input parameter only.
  • Advance Logical OR Functoid: Use the Advance Logical OR functoid to return the logical OR of input parameters. The input parameters have to be Boolean or numeric. This functoid requires two to one hundred input parameters.
  • If-Then-Else Functoid: Use the If-Then-Else Functoid to return a value from one of two input parameters based on a condition. If the condition (first input) is True, then the value of the second input parameter is returned, otherwise, the Third input is returned.

Conversion Functoids

Description

This library includes a suit of functoids that make data conversions that you can use inside BizTalk Mapper.

Convert from human readable to epoch date Functoid

This functoid allows you to convert a traditional date (Human Readable Date) into a Unix date (Epoch Date).

What is epoch time? 

The Unix epoch (or Unix time or POSIX time or Unix timestamp) is the number of seconds that have elapsed since January 1, 1970 (midnight UTC/GMT), not counting leap seconds (in ISO 8601: 1970-01-01T00:00:00Z). Literally speaking the epoch is Unix time 0 (midnight 1-1-1970), but ‘epoch’ is often used as a synonym for ‘Unix time’. Many Unix systems store epoch dates as a signed 32-bit integer, which might cause problems on January 19, 2038 (known as the Year 2038 problem or Y2038).

Human readable time Seconds
1 minute 60 seconds
1 hour 3600 seconds
1 day 86400 seconds
1 week 604800 seconds
1 month (30.44 days) 2629743 seconds
1 year (365.24 days)  31556926 seconds

Parameters 

The functoid takes two mandatory input parameters:

  1. The input date or DateTime
  2. A string describing the input format of the first parameter

The output of the functoid is a long, Example: 1289427321

Convert from epoch to human readable date Functoid

This functoid allows you to convert a Unix date (Epoch Date) into a traditional date (Human Readable Date).

Parameters 

The functoid takes two mandatory input parameters:

  1. The input date or DateTime
  2. A string describing the input format of the first parameter

The output of the functoid is a DateTime, Example: 10-11-2010 22:15:21

Dynamic Generators Functoids

Description

This library includes a suit of functoids that generate dynamic data; you can use this inside BizTalk Mapper.

Password Generator Functoid

This functoid allows you to build a random password.

Parameters 

The functoid takes five mandatory input parameters:

  1. A Boolean that describing if you want to use Lower Case chars
    1. “a”, “b”, “c”, “d”, “e”, “f”, “g”, “h”, “i”, “j”, “k”, “l”, “m”, “n”, “o”, “p”, “q”, “r”, “s”, “t”, “u”, “v”, “w”, “x”, “y”, “z”
  2. A Boolean that describing if you want to use Upper Case chars
    1. “A”, “B”, “C”, “D”, “E”, “F”, “G”, “H”, “I”, “J”, “K”, “L”, “M”, “N”, “O”, “P”, “Q”, “R”, “S”, “T”, “U”, “V”, “W”, “X”, “Y”, “Z”
  3. A Boolean that describing if you want to use Numbers
    1. “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “0”
  4. A Boolean that describing if you want to use Symbols
    1. “!”, “@”, “#”, “$”, “%”, “&”, “*”, “?”
  5. An integer that represents the length of the password

The output of the functoid is a string, Example: 6FcUw7RBFi

Guid Generator Functoid

This functoid allows you to generate a new Guid.

Parameters 

The functoid takes no parameters

The output of the functoid is a string, Example: 8fe5cee8-279b-4f1b-96f2-450cff2c846c

Tiny Id Generator Functoid

This functoid allows you to generate a new Tiny Id.

Parameters 

The functoid takes no parameters

The output of the functoid is a string, Example: _2ZgiIhjCECNxi9QwU96FA

Encoder Functoids

Description

This library includes a suit of functoids that make data encoder that you can use inside BizTalk Mapper.

Base64 Encoder Functoid

This functoid allows you to convert string object into base64 encoded string.

Parameters 

The functoid takes one mandatory input parameters:

  1. String that represents the text that you want to encode to Base 64

The output of the functoid is a string, Example: U2FuZHJvIFBlcmVpcmE=

Base64 Decoder Functoid

This functoid allows you to decode Base64-encoded text strings.

Parameters 

The functoid takes one mandatory input parameters:

  1. Base 64 string representation that you want to decode to text string

The output of the functoid is a string, Example: Sandro Pereira

Configuration Functoids

Description

This library includes a suit of functoids that make read configuration parameter values from different locations and that you can use inside BizTalk mapper

BTSNTSvc Config Get Functoid

This functoid allows you to get configuration parameters from BTSNTsvc.exe.config. If there is no section specified, the functoid reads from the AppSettings.

Parameters 

The functoid takes two mandatory input parameters:

  1. String that represents the keyname that you want to read from BTSNTsvc.exe.config
  2. A string that represents the section (can be an empty String) from the BTSNTsvc.exe.config that you want to read the keyname.

The output of the functoid is a string with the value of the configuration parameters from BTSNTsvc.exe.config

System Environment Variable Get Functoid

This functoid allows you to get configuration parameters from machine System Environment Variable.

Parameters 

The functoid takes one mandatory input parameters:

  1. String that represents the key that you want to read from System Environment Variable

The output of the functoid is a string with the value of the configuration parameters from System Environment Variable of the machine

Custom Config Get Functoid

This functoid allows you to get configuration parameters from a custom configuration file.

Parameters 

The functoid takes two mandatory input parameters:

  1. String that represents the key (variable name)that you want to read from a custom configuration file
  2. A string that represents the path to the custom configuration file that you want to read the key.

The output of the functoid is a string with the value of the configuration parameters from a custom configuration file.

SSO Config Get Functoid

This functoid allows you to get configuration parameters from SSO Database.

Parameters 

The functoid takes two mandatory input parameters:

  1. String that represents the name of the affiliate application to represent the configuration container to access
  2. A string that represents the property name to read from the affiliate application.

The output of the functoid is a string with the value of the configuration parameters from SSO

Windows Registry Config Get Functoid

This functoid allows you to get configuration parameters from Windows Registry.

Parameters 

The functoid takes two mandatory input parameters:

  1. A string that represents the name or path of the subkey to open.
  2. A string that represents the name of the value to retrieve from the registry. This string is not case-sensitive.

The output of the functoid is a string with the value of the configuration parameters from the registry.

Rule Engine Config Get Functoid

This functoid allows you to obtain a definition value from a Vocabulary in the Business Rules Engine.

Parameters 

The functoid takes two mandatory input parameters:

  1. A string that represents the definition name (e.g. Value1)
  2. A string that represents the vocabulary name (i.e. Config).

The output of the functoid is a string with the value of the definition name from a specify vocabulary on the Business Rule Engine.

CRM Functoids

Description

This library includes a suit of functoids that help you to wok easily in CRM integration solution; you can use this inside BizTalk Mapper.

CRM Lookup Functoid

This functoid allows you to retrieve a value from CRM lookup field. This functoid is able to perform a lookup operation using two different approaches:

  • Accessing the CRM database (read-only), for local CRM integration
  • Through the CRM web services if you want to avoid giving access to the database or if you have to integrate CRM online.

Parameters 

The functoid takes five mandatory input parameters:

  1. SSO Application Name: the connection parameters are stored inside SSO. Here you have to specify the application name where you decide to store the settings. This allows you to have multiple CRM environments that you can integrate;
  2. CRM Guid Field Name: key field name of which you want to get the value;
  3. CRM Entity Name: CRM entity name on which the resolution will be performed
  4. CRM Input Field Name: imagining having a “code” as input and you want to know the CRM physical key, in this attribute should specify the name of the “code” field.
  5. CRM Input Value: value from source system to resolve

The output of the functoid is a string, Example: 6erg5r-sdrf56-4dfgt5-6ty5r4-456trt

Installation 

Create an SSO application.

SQL Server Lookup: Create the following SSO configuration parameters

  • CrmConnectionType: “sql”
  • CrmDatabaseConnectionString: specify the CRM database connection string

Open SQL Server management console, connect to CRM database and execute the script under CRMLookup.sql file in the project folder.

Local CRM web services lookup: Create the following SSO configuration parameters:

  • CrmConnectionType: “ws”
  • CrmUserName: specify a valid CRM username
  • CrmUserDomain: specify a user active directory domain name
  • CrmUserPassword: specify the user password
  • CrmUri: specify the CRM web service url (ex: http://MyCrmServer/MyCrmInstance/XRMServices/2011/Organization.svc)

CRM Online web services lookup: Create the following SSO configuration parameters:

  • CrmConnectionType: “ws”
  • CrmUserName: specify a valid CRM username (ex: harry@mydomain.onmicrosoft.com
  • CrmUserPassword: specify the user password
  • CrmUri: specify the CRM web service url (ex: https://mydomain.crm4.dynamics.com/XRMServices/2011/OrganizationData.svc )

MSCRM Map Helper Base Types Functoid

Use this functoid when you want map CRM base data types such as “xs:string”, “xs:int” and so on.

Parameters

The functoid takes three mandatory input parameters:

  1. Source Field: Link from source schema field value.
  2.  Target Field Name: CRM target field name.
  3.  Target Field Type: CRM target field type (Example: “xs:dateTime”).

The output of this functoid should be linked to:

  • “/<Schema>/<CRM_Operation>/entity/Attributes/KeyValuePairOfstringanyType/key”.

MSCRM Map Helper Guid Functoid

Use this functoid when you want map CRM guid type.

Parameters

The functoid takes two mandatory input parameters:

  1.  Source Field: Link from source schema field value.
  2.  Target Field Name: CRM target field name

The output of this functoid should be linked to:

  • “/<Schema>/<CRM_Operation>/entity/Attributes/KeyValuePairOfstringanyType/key”.

You may use this functoid in combination with CRM Lookup functoid, where first find for entity guid and then use the result to map to the destination schema.

MSCRM Map Helper Money Functoid

Use this functoid when you want map CRM money type.

Parameters

The functoid takes two mandatory input parameters:

  1.  Source Field: Link from source schema field value.
  2. Target Field Name: CRM target field name.

The output of this functoid should be linked to:

  • “/<Schema>/<CRM_Operation>/entity/Attributes/KeyValuePairOfstringanyType/key

MSCRM Map Helper Option Value Functoid

Use this functoid when you want map CRM option value type.

Parameters

The functoid takes two mandatory input parameters:

  1. Source Field: Link from source schema field value.
  2. Target Field Name: CRM target field name.

The output of this functoid should be linked to:

  •  “/<Schema>/<CRM_Operation>/entity/Attributes/KeyValuePairOfstringanyType/key”.

MSCRM Map Helper References Functoid

Use this functoid when you want map CRM reference type.

Parameters

The functoid takes three mandatory input parameters:

  1. Source Field: Link from source schema field value.
  2.  Target Field Name: CRM target field name.
  3. Entity Name: CRM referenced entity.

The output of this functoid should be linked to:

  • “/<Schema>/<CRM_Operation>/entity/Attributes/KeyValuePairOfstringanyType/key”.

String Functoids

Description

This library includes a suit of functoids that provides many methods for safely creating, manipulating, and comparing strings that you can use this inside BizTalk Mapper.

String Constant functoid

This functoid allows you to set constant values (strings) inside de maps.

Parameters 

The functoid takes one mandatory input parameters:

  1. String value to be returned out

The output of the functoid is the string set in the output, Example: “P0011

String ToTitleCase functoid

This functoid allows you to Converts the specified string to title case (except for words that are entirely in uppercase, which are considered to be acronyms)

Parameters 

The functoid takes one mandatory input parameters:

  1. The string to convert to title case

The output of the functoid is a string converted to title case., Example: “Sandro Augusto Sousa Pereira

String Advance Compare Functoid

This functoid allows you to compare two specified String objects, ignoring or honoring their case, and returns a boolean that indicates if they are equal or not.

Parameters 

The functoid takes three mandatory input parameters:

  1. The first string to compare
  2. The second string to compare
  3. True to ignore case during the comparison; otherwise, False.

The output of the functoid is a boolean that indicates if they are equal or not, Example: True

String Replace Functoid

This functoid returns a new string in which all occurrences of a specified string (second parameter) found in the first string are replaced with another specified string (third parameter).

Parameters 

The functoid takes three mandatory input parameters:

  1. String where we will replace the values
  2. The string to be replaced.
  3. The string to replace all occurrences of oldValue.

The output of the functoid is a string that is equivalent to the current string except that all instances of oldValue are replaced with newValue. If oldValue is not found in the current instance, the method returns the current instance unchanged, Example: “Sandro Pereira: BizTalk

String Normalize Functoid

This functoid allows you to normalize the text. It will remove two or more consecutive spaces and replace them with a single space, remove two or more consecutive newlines and replace them with a single newline and “condense” multiple tabs into one.

Parameters 

The functoid takes one mandatory input parameters:

  1. The string to normalize

The output of the functoid is a string normalize without consecutive spaces, lines or tabs, Example: “Sandro Augusto Sousa Pereira

String PadLeft Functoid

This functoid allows you to set a new string that right-aligns the characters in this instance by padding them on the left with a specified Unicode character, for a specified total length.

Parameters 

The functoid takes three mandatory input parameters:

  1. String that will be pad on the left with a specified Unicode character
  2. The number of characters in the resulting string, equal to the number of original characters plus any additional padding characters.
  3. A Unicode padding character.

The output of the functoid is a new string that is equivalent to this instance, but right-aligned and padded on the left with as many paddingChar characters as needed to create a length of totalWidth. However, if totalWidth is less than the length of this instance, the method returns a reference to the existing instance. If totalWidth is equal to the length of this instance, the method returns a new string that is identical to this instance, Example: “*****BTS

String PadRight Functoid

This functoid allows you to set a new string that left-aligns the characters in this string by padding them on the right with a specified Unicode character, for a specified total length.

Parameters 

The functoid takes three mandatory input parameters:

  1. String that will be pad on the left with a specified Unicode character
  2. The number of characters in the resulting string, equal to the number of original characters plus any additional padding characters.
  3. A Unicode padding character.

The output of the functoid is a new string that is equivalent to this instance, but left-aligned and padded on the right with as many paddingChar characters as needed to create a length of totalWidth. However, if totalWidth is less than the length of this instance, the method returns a reference to the existing instance. If totalWidth is equal to the length of this instance, the method returns a new string that is identical to this instance, Example: “BTS******

String Remove Leading Zeros Functoid

This functoid allows you to remove any leading zeros from an input string.

Parameters 

The functoid has one mandatory parameter:

  1. Input string which contains leading zeros which need to be removed.

The output of the functoid is an integer which is equal to the input instance but then with the leading zeros removed.

Custom Advanced Functoids

Description

This library includes a suit of functoids that provides methods for Conditional mapping that you can use this inside BizTalk Mapper.

Default Value Mapping functoid

The Value Mapping and Value Mapping (Flattening) functoids are used to provide a conditional mapping from an input instance message to an output instance message. When their first input parameter is true, the second input parameter is put into the specified element or attribute in the output instance message; otherwise, that element or attribute is not created in the output instance message.

The Default Value Mapping have a similar but different behavior. You can use the Default Value Mapping functoid to return a value from one of two input parameters. If the value of the first input parameter is Null or Empty, then the value of the second input parameter is returned, otherwise, the first input is returned.

Parameters 

he functoid takes one mandatory input parameters:

  1. A string value tested as Null or Empty.
  2. A string value that will act as Default Value in case of the first input will be Null or empty.

If the value of the first input parameter is Null or Empty, then the value of the second input parameter is returned, otherwise, the first input is returned, Example: “P0011

Authentication Functoids

Description

This library currently includes one functoid. This functoid enables you to obtain an authentication token from the Windows Azure Access Control Service.

Get Windows Azure ACS Wrap Token Functoid

This functoid allows you to obtain an ACS WRAP access token in order to access a Windows Azure BizTalk Services Bridge or Windows Azure Service Bus resources. Note this token needs to be added to the outbound request message Http Header. In order to do so use the Authorization key and assign its value as ‘WRAP access_token={RECEIVED TOKEN}’

Parameters 

The functoid takes four mandatory input parameters:

  1. A string issuerName – IssuerName belonging to the BizTalk Service namespace or Windows Azure Service Bus namespace
  2. A string issuerKey – Issuerkey belonging to the  BizTalk Service namespace or Windows Azure Service Bus namespace
  3. A string endPoint – Full Uri pointing to the BizTalk Service Bridge or Windows Azure Service Bus queue/topic
  4. A string windowsAzureACSNamespace – BizTalk Service or Service Bus ACS namespace name

The output of the functoid is a string, Example:
net.windows.servicebus.action=Listen%2cManage%2cSend&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=https%3a%2f%2facsnamespace-bts.accesscontrol.windows.net%2f&Audience=http%3a%2f%2fnamespace.biztalk.windows.net%2fdefault%2f%2fRCVINBOUND&ExpiresOn=1390169379&Issuer=https%3a%2f%2fnamespace2786-bts.accesscontrol.windows.net%2f&HMACSHA256=pHxuXvfPSkvq4TRyB5F%2fj%1fUtC1m3TyQKEJ6%2bkO8mhQg%3

The output should then be added to the Authorization HTTP header of the outbound message. Example
[“Authorization”] = String.Format(“WRAP access_token=”{0}””, <YOUR TOKEN>);

XPath Functoids

Description

This library includes a suit of functoids that provides XPath methods that you can use this inside BizTalk Mapper.

XPath Functoid

This functoid natively integrates custom XPath queries in the BizTalk Mapper. This unique functoid which is a powerful competitor to the ScripterFunctoid or a custom XSLT stylesheet and mixes exceptionally well with other functoids.

Parameters

The functoid takes one mandatory input parameter and one optional parameter:

  1.  The first parameter specifies an absolute or relative XPath expression, which becomes a native part of the generated XSLT.
  2. The (optional) second parameter is a link to the source tree node that becomes the (looping) context for the XPath expression.

This defines the current context node for the XPath expression and allows the use of relative XPath expressions. Additionally, the mapper will generate a looping construct for that linked node where appropriate.

The functoid output can be linked to a destination schema node or serve as input to other functoids

SharePoint Functoids

Description

This library includes a suit of functoids that help you to wok easily in SharePoint integration solution; you can use this inside BizTalk Mapper.

Add SharePoint 2013 Document Set Functoid

Creates a Document Set in an existing SharePoint 2013 List. It is a requirement that the SharePoint list contains a custom content-type of type document set.

Parameters

The following parameters are required:

  1.  string siteUrl = SharePoint Site Url
  2.  string listName = SharePoint List Name containing the custom content-type Document Set
  3.  string docSetContentTypeName = Document Set Content Type name
  4. string newDocSetName=Name of the to document set to created

Comment: An custom content-type of type documentset needs to be available in SharePoint.

Logical Functoids

This library includes a suit of functoids to perform a variety of logical operations, often controlling whether a particular element or attribute is created in an output instance message. Most of the Logical Functoids are a replica of the existent Logical Functoids that came with BizTalk Server with the advantage that these will allow you to connect with others Custom String Functoids. They are fully compatible with existing functoids and don’t produce any more additional code.

Advance Logical AND Functoid

Use the Advance Logical AND functoid to return the logical AND of input parameters. It determines whether all of the specified input parameters are true.

Parameters

This functoid requires a minimum of two input parameters and a maximum of one hundred:

  1. Parameter 1: A value that can be evaluated as either True or False.
  2. Parameters 2 – 100: Values that can be evaluated as either True or False.

Returns the logical AND of parameters. True if all of the specified input parameters evaluate to True; False otherwise.

Advance Equal Functoid

Use the Advance Equal functoid to return the value “true” if the first input parameter is equal to the second input parameter. It tests whether the two input parameters are equal.

Parameters

This functoid requires two input parameters:

  1. Parameter 1: A value to be tested for equality with the parameter 2.
  2. Parameter 2: A value to be tested for equality with the parameter 1.

Returns “True” if the values of the two input parameters are equal; “False” otherwise.

Advance Greater Than Functoid

Use the Advance Greater Than functoid to return the value “true” if the first input parameter is greater than the second input parameter. It tests whether the first input parameter is greater than the second input parameter. 

Parameters

This functoid requires two input parameters:

  1. Parameter 1: A value to be tested to determine whether it is greater than parameter 2.
  2. Parameter 2: A value to be tested to determine whether it is greater than parameter 1.

Returns “True” if the value of the first input parameter is greater than the value of the second input parameter; “False” otherwise.

Advance Greater Than or Equal To Functoid

Use the Advance Greater Than or Equal To functoid to return the value “true” if the first input parameter is greater than or equal to the second input parameter. It tests whether the first input parameter is greater than or equal to the second input parameter. 

Parameters

This functoid requires two input parameters:

  1. Parameter 1: A value to be tested to determine whether it is greater than or equal to parameter 2.
  2. Parameter 2: A value to be tested to determine whether it is greater than or equal to parameter 1.

Returns “True” if the value of the first input parameter is greater than or equal to the value of the second input parameter; “False” otherwise.

Advance Less Than Functoid

Use the Advance Less Than functoid to return the value “true” if the first input parameter is less than the second input parameter. It tests whether the first input parameter is less than the second input parameter. 

Parameters

This functoid requires two input parameters:

  1. Parameter 1: A value to be tested to determine whether it is less than parameter 2.
  2. Parameter 2: A value to be tested to determine whether it is less than parameter 1.

Returns “True” if the value of the first input parameter is less than the value of the second input parameter; “False” otherwise.

Advance Less Than or Equal To Functoid

Use the Advance Less Than or Equal To functoid to return the value “true” if the first input parameter is less than or equal to the second input parameter. It tests whether the first input parameter is less than or equal to the second input parameter. 

Parameters

This functoid requires two input parameters:

  1. Parameter 1: A value to be tested to determine whether it is less than or equal to parameter 2.
  2. Parameter 2: A value to be tested to determine whether it is less than or equal to parameter 1.

Returns “True” if the value of the first input parameter is less than or equal to the value of the second input parameter; “False” otherwise.

Advance Not Equal Functoid

Use the Advance Not Equal functoid to return the value “true” if the first input parameter is not equal to the second input parameter. It tests whether the two input parameters are not equal. 

Parameters

This functoid requires two input parameters:

  1. Parameter 1: A value to be tested for inequality with parameter 2.
  2. Parameter 2: A value to be tested for inequality with parameter 1.

Returns “True” if the values of the two input parameters are not equal; “False” otherwise.

Advance Logical NOT Functoid

Use the Advance Logical NOT functoid to return the logical inversion of the input parameter. Use to logically negate the value of the Boolean input parameter.

Parameters

This functoid requires one input parameter only:

  1. Parameter 1: A value that can be evaluated as either True or False.

Returns “True” if the specified input parameter evaluates to False; “False” otherwise.

Advance Logical OR Functoid

Use the Advance Logical OR functoid to return the logical OR of input parameters. The input parameters have to be Boolean or numeric. It determines whether any of the specified input parameters are true. 

Parameters

This functoid requires a minimum of two input parameters and a maximum of one hundred:

  1. Parameter 1: A value that can be evaluated as either True or False.
  2. Parameters 2 – 100: Values that can be evaluated as either True or False.

Returns “True” if any of the specified input parameters evaluate to True; “False” otherwise.

If-Then-Else Functoid

Use the If-Then-Else Functoid to return a value from one of two input parameters based on a condition. If the condition (first input) is True, then the value of the second input parameter is returned, otherwise, the Third input is returned.  

Parameters

This functoid requires three input parameters:

  1. Boolean representing the result of a previous condition
  2. The value to be returned if the condition is True.
  3. The value to be returned if the condition is False.

If the condition is True, then the value of the second input parameter is returned, otherwise th, Third input is returned.

Installation

Installation in a production environment

In a production environment you just need to install the DLL in the GAC

  1. gacutil /i assemblyPath

Installation in a development environment

In a development environment you should install the DLL in two places

  1. For using inside the Visual Studio BizTalk Mapper, you need to copy the dll file to the “%BTS%Developer ToolsMapping Extensions” folder, where %BTS% is the installation folder of BizTalk.
  2. Start Visual Studio.NET and go to “Tools” => “Choose Toolbox Items” and then go to the “Functoids” pane. Check the functoids that should be available in the toolbox.
  3. You must also install the assembly into the GAC so that the functoid is available to BizTalk at runtime.
    1. gacutil /i assemblyPath

PowerShell

Installation in a production environment

In a production environment copy the deployment directory and the PowerShell directory from the build environment and place it on the production server

  • Ensure you are using the latest version of PowerShell, or download it here
  • Rename the deploymentSettings_Production.xml file to deploymentSetting.xml
  • Ensure you have compiled the BizTalk Mapper Extensions UtilityPack Solution using the RELEASE option
  • Execute the InstallAndRegisterFunctoids.ps1 script

Installation in a development environment

In a development environment go to the PowerShell directory

  • Ensure you are using the latest version of PowerShell, or download it here
  • Rename the deploymentSettings_Other.xml file to deploymentSetting.xml
  • Ensure you have compiled the BizTalk Mapper Extensions UtilityPack Solution using the DEBUG option
  • Execute the InstallAndRegisterFunctoids.ps1 script

You can download Runtime BizTalk Mapper Extensions UtilityPack DLLs for BizTalk Server 2016 from:
BizTalk Mapper Extensions UtilityPack for BizTalk Server 2016 (45 KB)
Microsoft | TechNet Gallery

You can download the BizTalk Mapper Extensions UtilityPack  source code from:
BizTalk Server Community Extensions Utility Packs GitHub Repository
GitHub

Author: Sandro Pereira

Sandro Pereira lives in Portugal and works as a consultant at DevScope. In the past years, he has been working on implementing Integration scenarios both on-premises and cloud for various clients, each with different scenarios from a technical point of view, size, and criticality, using Microsoft Azure, Microsoft BizTalk Server and different technologies like AS2, EDI, RosettaNet, SAP, TIBCO etc. He is a regular blogger, international speaker, and technical reviewer of several BizTalk books all focused on Integration. He is also the author of the book “BizTalk Mapping Patterns & Best Practices”. He has been awarded MVP since 2011 for his contributions to the integration community. View all posts by Sandro Pereira

How to configure and use my SSO Application Configuration tool

How to configure and use my SSO Application Configuration tool

Many people are having doubts and reaching to me to provide some explanations on how to configure the SSO Application Configuration that I recently published and, consequently, they are facing some problems/issue on using the tool. So, I decided to write this post to properly document this tool and explain how you can easily start using it.

Where can I use this SSO Application Configuration tool?

The first thing that you need to be aware is that I release 3 different versions of this tool:

And the reason behind that is that each different version of BizTalk Server uses a particular version of Microsoft.EnterpriseSingleSignOn.Interop.dll – BizTalk Server 2016 will use 10.0.1000.0 version. So, each version of the tool will only work properly for that specific BizTalk Server version.

If you want to use the tool for example in BizTalk Server 2010, then you need to use Assembly Binding Redirection in the machine configuration file (Machine.config):

  • 32-bit: c:WindowsMicrosoft.NETFramework[version]configmachine.config
  • 64-bit: c:WindowsMicrosoft.NETFramework64[version]configmachine.config

Check for more information here.

What do I need to do to start using SSO Application Configuration tool?

When you download the SSO Application Configuration tool, by default it will not work in your environment because it has my personal configurations for my LAB machine.

To properly use this tool, you need to first configure your environment settings by:

  • Execute the SSO Application Configuration tool;
  • And then select the “Settings” option from the top menu option;
  • This will pop up the “SSO Application Configuration Setting” windows and there you need to configure:
    • AppAdminAcct: SSO Administrator Group – Administrators of the Enterprise Single Sign-On (SSO) service.
      • This is used to define the counts that have access to use this tool
    • ContactInfo: Internal field that is normally in the format of an email that is used internally in SSO tables for Application Configurations.
    • AppUserAcct: SSO Affiliate Administrators Group – Administrators of certain SSO affiliate applications.
      • This is used to describe the accounts that can access the configurations

SSO Application Configuration: Settings

The “AppAdminAcct” and “AppUserAcct” fields are easy to understand, they need to be the BizTalk Groups that you have created in your environment. Nevertheless, with this tool is not mandatory that the “AppUserAcct” has to be “SSO Affiliate Administrators Group”, you can for example change that for “BizTalk Application Users”.

However, the “ContactInfo” may raise some doubts. To demystify this value here are the rules for its definition:

  • If you don’t have any application configuration created in your environment: this field can be any value, that normally is defined in kind of “email format”, for example, “BizTalkAdmin@Sandro Pereira.com”.
  • If you already have application configuration created in your environment: created by other SSO Application or by MSFT SSO Application Configuration snap-in then you need to use the value that is already defined in your system.

I already have application configuration created in my environment, so, how can I properly configure the “ContactInfo” property?

The SSO Application Configuration tool is fully compatible with MSFT SSO Application Configuration snap-in. But to additional clarify this field, let me explain how MSFT snap-in works:

  • When you install the MSFT SSO Application configuration snap-in, during the installation process it will ask you for a company name, I set mine as “Sandro Pereira”.
  • Once you open the MSFT SSO Application configuration snap-in you will see that the tool will use it the company name that you defined in the installation process + “SSO Application Configuration” in the Application tree root

SSO Application Configuration: Rootname

  • Also, “behind doors” all the application that you create will use “BizTalkAdmin@” + company name + “.com” as the contact info, mine is “BizTalkAdmin@Sandro Pereira.com”.
    • You can validate this value in the BizTalk SSO Database in the table “SSOX_ApplicationInfo” using the following SQL query:
USE [SSODB]

GO

SELECT DISTINCT [ai_contact_info]
FROM [SSODB].[dbo].[SSOX_ApplicationInfo]
    • The result you get will be something like this:

SSO Application Configuration: SSODB ContactInfo values

      • someone@companyname.com and someone@microsoft.com are internally used by BizTalk (at least the last one) – please do not use that value or change these values.

So, to put my tool compatible with MSFT tool you need to go to “Settings” and property the contact info with that specific value, again in my case: “BizTalkAdmin@Sandro Pereira.com”.

Note: Additional you have and use different contact info values to be used in different context/teams and for them to have only access to a subset of all your Application Configurations. This is something that MSFT tool will not allow you to do.

Author: Sandro Pereira

Sandro Pereira lives in Portugal and works as a consultant at DevScope. In the past years, he has been working on implementing Integration scenarios both on-premises and cloud for various clients, each with different scenarios from a technical point of view, size, and criticality, using Microsoft Azure, Microsoft BizTalk Server and different technologies like AS2, EDI, RosettaNet, SAP, TIBCO etc. He is a regular blogger, international speaker, and technical reviewer of several BizTalk books all focused on Integration. He is also the author of the book “BizTalk Mapping Patterns & Best Practices”. He has been awarded MVP since 2011 for his contributions to the integration community. View all posts by Sandro Pereira

Microsoft Integration Weekly Update: Feb 26, 2018

Microsoft Integration Weekly Update: Feb 26, 2018

Do you feel difficult to keep up to date on all the frequent updates and announcements in the Microsoft Integration platform?

Integration weekly update can be your solution. It’s a weekly update on the topics related to Integration – enterprise integration, robust & scalable messaging capabilities and Citizen Integration capabilities empowered by Microsoft platform to deliver value to the business.

If you want to receive these updates weekly, then don’t forget to Subscribe!

Feedback

Hope this would be helpful. Please feel free to provide if you have any feedback on this Integration weekly series.

Advertisements

BizTalk Server SSO Application Configuration Tool for BizTalk Server 2013

BizTalk Server SSO Application Configuration Tool for BizTalk Server 2013

A few days ago, my team and I decided to release a new SSO Application Configuration tool for BizTalk Server 2016 to eliminate the needs and streamline the administrative processes of our customers. Because many customers are still using previous versions of BizTalk Server, mainly BizTalk Server 2013 or 2013 R2. We decide to publish also SSO Application Configuration tool fully compatible with BizTalk Server 2013 R2 (it is the same tool but compiled specifically for BizTalk Server 2013 R2).

Finally, to finish this SSO Application Configuration tool for BizTalk Server trilogy, we decided to publish the fully compatible version of this tool for BizTalk Server 2013 (again, it is the same tool but compiled specifically for BizTalk Server 2013) that will provide the ability to easily add and manage configuration applications, add and manage key-value pairs in the SSO database, as well as securely import and export configuration applications so that they can be deployed to different environments, and it is fully compatible with MSFT SSO Application Configuration snap-in:

  • Fully compatible with BizTalk Server 2013
  • Fully resizable windows (you will understand if you are a BizTalk Developer);
  • You can securely export and import Application configurations and it is compatible with MSFT SSO snap-in;
  • You can duplicate Applications (copy and paste);
  • You can rename Applications;
  • You can easily add new key-values without the need to always perform a right click and select new key option;
  • You can easily add edit key-values without the need to always perform a double-click to open a new window;
  • You can refresh the Applications tree view
  • You can search!

BizTalk Server SSO Application Configuration Tool for BizTalk Server 2013

THIS TOOL IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND.

You can download BizTalk Server SSO Application Configuration Tool for BizTalk Server 2013 from:
BizTalk Server SSO Application Configuration Tool for BizTalk Server 2013 (45 KB)
Microsoft | TechNet Gallery

Author: Sandro Pereira

Sandro Pereira lives in Portugal and works as a consultant at DevScope. In the past years, he has been working on implementing Integration scenarios both on-premises and cloud for various clients, each with different scenarios from a technical point of view, size, and criticality, using Microsoft Azure, Microsoft BizTalk Server and different technologies like AS2, EDI, RosettaNet, SAP, TIBCO etc. He is a regular blogger, international speaker, and technical reviewer of several BizTalk books all focused on Integration. He is also the author of the book “BizTalk Mapping Patterns & Best Practices”. He has been awarded MVP since 2011 for his contributions to the integration community. View all posts by Sandro Pereira

BizTalk Server SSO Application Configuration Tool for BizTalk Server 2013 R2

BizTalk Server SSO Application Configuration Tool for BizTalk Server 2013 R2

I just moved the family to our new home, we are thrilled and happy for this new chapter of our lives… and while the girls are trying to sleep and get used to the new home I got a free time to write.

A few days ago, me and my team released a new SSO Application Configuration tool for BizTalk Server 2016 that will provide the ability to easily add and manage configuration applications, add and manage key-value pairs in the SSO database, as well as securely import and export configuration applications so that they can be deployed to different environments, and it is fully compatible with MSFT SSO Application Configuration snap-in.

BizTalk Server SSO Application Configuration Tool for BizTalk Server 2013 R2

However, many customers are still using BizTalk Server 2013 R2, or even older versions, so today I update and compile my new tool to be able to work also with BizTalk Server 2013 R2:

  • Fully compatible with BizTalk Server 2013 R2
  • Fully resizable windows (you will understand if you are a BizTalk Developer);
  • You can securely export and import Application configurations and it is compatible with MSFT SSO snap-in;
  • You can duplicate Applications (copy and paste);
  • You can rename Applications;
  • You can easily add new key-values without the need to always perform a right click and select new key option;
  • You can easily add edit key-values without the need to always perform a double-click to open a new window;
  • You can refresh the Applications tree view
  • You can search!

THIS TOOL IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND.

I will in the future make available for other versions

You can download BizTalk Server SSO Application Configuration Tool for BizTalk Server 2013 R2 from:
BizTalk Server SSO Application Configuration Tool for BizTalk Server 2013 R2
(45 KB)
Microsoft | TechNet Gallery

Author: Sandro Pereira

Sandro Pereira lives in Portugal and works as a consultant at DevScope. In the past years, he has been working on implementing Integration scenarios both on-premises and cloud for various clients, each with different scenarios from a technical point of view, size, and criticality, using Microsoft Azure, Microsoft BizTalk Server and different technologies like AS2, EDI, RosettaNet, SAP, TIBCO etc. He is a regular blogger, international speaker, and technical reviewer of several BizTalk books all focused on Integration. He is also the author of the book “BizTalk Mapping Patterns & Best Practices”. He has been awarded MVP since 2011 for his contributions to the integration community. View all posts by Sandro Pereira

Microsoft Integration Weekly Update: Feb 19, 2018

Microsoft Integration Weekly Update: Feb 19, 2018

Do you feel difficult to keep up to date on all the frequent updates and announcements in the Microsoft Integration platform?

Integration weekly update can be your solution. It’s a weekly update on the topics related to Integration – enterprise integration, robust & scalable messaging capabilities and Citizen Integration capabilities empowered by Microsoft platform to deliver value to the business.

If you want to receive these updates weekly, then don’t forget to Subscribe!

Feedback

Hope this would be helpful. Please feel free to provide if you have any feedback on this Integration weekly series.

Advertisements

Microsoft Integration Weekly Update: Feb 12, 2018

Microsoft Integration Weekly Update: Feb 12, 2018

Do you feel difficult to keep up to date on all the frequent updates and announcements in the Microsoft Integration platform?

Integration weekly update can be your solution. It’s a weekly update on the topics related to Integration – enterprise integration, robust & scalable messaging capabilities and Citizen Integration capabilities empowered by Microsoft platform to deliver value to the business.

If you want to receive these updates weekly, then don’t forget to Subscribe!

Feedback

Hope this would be helpful. Please feel free to provide any feedback on this Integration weekly series.

Advertisements

When data in CRM is updated I want to send it to another application

When data in CRM is updated I want to send it to another application

Having worked a lot with Dynamics CRM/365 over the last few years I thought it would be interesting to discuss a common use case and some of the architecture patterns you may consider to implement the solution.

Lets imagine a scenario where the business requirement is as follows:

  • The user will be updating a customers record in Dynamics 365
  • When the user saves the change we need the change to be synchronised with the billing system

Now at this point I am going to deliberately ignore flushing out these requirements too much. Any experiences integration person will now be thinking of a number of functional and non-functional questions they would want to get more information about, but the above is the typical first requirement. We will use this vagueness to allow us to explore some of the considerations when we look at the options that are available to solve the problem. One thing to note is I am going to consider this to be a 1 way interface for this discussion.

Option 1 – CRM Custom Plugin – Synchronous

In option 1 the CRM developer would use the extensibility features of Dynamics. This allows you to write C# code which will execute within the CRM runtime environment as a plugin. With a plugin you can configure when the code will execute. Options include things like:

  • When an entity is updated but before the save is made
  • When the entity is updated but after the save is made
  • As above but on other commands such as created/deleted

The below picture shows what this scenario will look like

Good things:

  • This is probably the quickest way you can get the data from the commit in CRM to the other application
  • This is probably the simplest way you can do this integration with the minimum number of network hops
  • This solution probably only needs the skill set of the CRM developer

Things to consider:

  • You would be very tightly coupling the two applications
  • You would have some potential challenges around error scenarios
    • What happens if the save to the other app works but the save to CRM doesn’t or visa-versa
  • The custom plugin is probably going to block the CRM users thread while it makes the external call which is asking for performance issues
  • You would need to consider if you would do the call to the other application before or after saving the data to CRM
  • You would need to consider where to store the configuration for the plugin
  • There would be error and retry scenarios to consider
  • There would be the typical considerations of tightly coupled apps
    • What if the other app is broken
    • What if it has a service window
  • Errors are likely to bubble up to the end user
  • You will have OOTB (out of the box) CRM plugin tracing diagnostics but this may require some custom code to ensure it logs appropriate diagnostic information

Option 1.5 – CRM Custom Plugin – Asynchronous

In this option the solution is very similar to the above solution with the exception that the developer has chosen to take advantage of the asynchronous system jobs feature in CRM. The plugin that was developed is probably the same code but this time the configuration of the plugin in CRM has indicated that the plugin should be executed out of process from the transaction where the user is saving a change. This means that the commit of the change will trigger a system job which will be added to the processing queue and it will execute the plugin which will send data to the other application.

The below picture illustrates this option.

Good things:

  • The synchronize transaction will no longer block the users thread when they save data
  • The system jobs gives a degree of troubleshooting and retry options if the other system was down compared to option 1
  • This only required CRM developer skills

Things to consider:

  • There may be other things on the processing queue so there is no guarantee how long it will take to synchronize
  • You may get race conditions if another transaction updates the entity and you haven’t appropriately covered these scenarios in your design
    • Also think about the concurrency of system jobs and other plugins
  • I have seen a few times where option 1 is implemented then flipped to option 2 due to performance concerns as a workaround
    • This needs to be thought about upfront
  • You may struggle to control the load on the downstream system
  • Again there is a tight coupling of systems. CRM has explicit knowledge of the other application and a heavy dependency on it
    • What if the app is down
    • What if there are service windows
  • Error scenarios are highly likely and there could be lots of failed jobs

Option 2 – CRM out of the Box Publishing to Azure Service Bus

Option 1 and 1.5 are common ways a CRM developer will attempt to solve the problem. Typically they have a CRM toolset and they try to use a tool from that toolset to solve the problem as bringing in other things was traditionally a big deal.

With the wide adoption of Azure we are starting to see a major shift in this space. Now many Dynamics projects are also including Azure by default in their toolset. This means CRM developers are also gaining experience with tooling on Azure and have a wider set of options available. This allows a shift in the mindset that not everything has to be solved in CRM and actually doing stuff outside of CRM offers many more opportunities to build better solutions while at the same time keeping the CRM implementation pure and focused on its core aim.

In this solution the CRM developer has chosen to add an Azure Service Bus instance to the solution. This means they can use the OOTB plugin (not a custom one) in CRM which will publish messages from CRM to a queue or topic when an entity changes. From here the architecture can choose some other tools to get messages from Service Bus to the destination application. For simplicity in this case I may choose an Azure Function which could allow me to write a simple bit of C# to do the job.

The below solution illustrates this:

Good things:

  • No custom coding in CRM
  • The Service Bus plugin will be much more reliable than the custom one
  • The Service Bus plugin will get a lot of messages out to Service Bus very fast by comparison to the custom plugin in 1.5 which will bottleneck on the downstream system probably
  • Service Bus supports pub/sub so you can plugin routing of messages to other systems
  • The Azure Function could be developed by the CRM developer quite easily with a basic C# skillset
  • Service Bus offers lots of retry capabilities
  • The queue offers a buffer between the applications so there is no dependency between them
  • The function could be paused in downtime so that CRM can keep pumping out changes and they will be loaded when the other app is back online
  • The solution will be pretty cheap, you will pay a small cost for the service bus instance and per execution for the function. Unless you have very high load this should be a cheap option

Things to consider:

  • The key thing to remember here is that the solution is near realtime. It is not an instant synch. In most cases it is likely the sync will happen very quickly but the CRM System Jobs could be one bottleneck if you have lots of changes or jobs in CRM. Also the capability of the downstream system may be a bottleneck so you may need to consider how fast you want to load changes
  • The only bad thing is that there are quite a few moving parts in this solution so you may want to ensure you are using appropriate management and monitoring for the solution. In addition too CRM System jobs you may want to consider Service Bus 360 to manage and monitor your queues and also Application Insights for your Azure Functions

Option 3 – Logic App Integration

In option 3 the developer has chosen to use a Logic App to detect changes in CRM and to push them over to the other application. This means that the CRM solution is very vanilla, it doesn’t even really know that changes are going elsewhere. In the above options a change in CRM triggered a process to push the data elsewhere. In this option the Logic App is outside CRM and is periodically checking for changes and pulling them out.

Typically the Logic App will check every 3 minutes (this is configurable) and it will pull out a collection of changes and then 1 instance of the logic app will be triggered for each change detected.

The logic app will then use an appropriate connector to pass the message to the downstream application.

The below picture shows what this looks like.

Good things:

  • There is nothing to do in CRM
  • The Logic App will need monitoring and managing separate to CRM
  • The Logic App is not part of the CRM developers core skill set, but they are very simple to use so it should be easy to pick this up
  • The Logic App has a lot of features if you run into more advanced scenarios
  • The Logic App has connectors for lots of applications
  • You may be able to develop the solution with no custom code
  • The Logic App has some excellent diagnostics features to help you develop and manage the solution
  • The Logic App has retry and resubmit capabilities
  • The solution will be pretty cheap with no upfront capital cost. You just pay per execution. Unless you have very high load this should be a cheap option
  • This option can also be combined with Service Bus and BizTalk Server for very advanced integration scenarios

Things to consider:

  • Is the polling interval going to be often enough
  • Only the most recent change will be extracted, if a particular row has been updated 3 times since the last trigger you will get the latest stage
  • It may require some more advanced patterns to control the load if the downstream system is a bottleneck. This may be beyond the CRM developers Logic App skills

Option 4 – SSIS Integration

The next option to consider is an ETL based approach using SSIS. This approach is quite common for CRM projects because they often have people with SQL skills. The solution would involve setting up an SSIS capability and then purchasing the 3rd party Kingswaysoft SSIS connectors which includes support for Dynamics.

The solution would then pull out data from CRM via the API using a fetch xml query or OData Query. It would then push the changes to the destination system. Often SSIS would be integrating at database level which is its sweetspot but it does have the capability to call HTTP endpoints and API’s.

Although the diagrams look similar, the big difference between the Logic App approach and SSIS is that SSIS is treating the records as a batch of data which it is attempting to process in bulk. The Logic App is attempting to execute a separate transaction for each row it pulls out from the CRM changes. Each solution has its own way of dealing with errors which makes this comparison slightly more complex, but typically think of the idea of a batch of changes vs individual changes.

In the SSIS solution it is also very common for the solution to include a staging database between the systems where the developer will attempt to create some separation of concern and create deltas to minimize the size of the data being sent to downstream systems.

Good things:

  • You can process a lot of data very quickly
  • Common approach on CRM projects
  • Kingswaysoft product is mature
  • Predominantly configuration based solution
  • Sometimes error scenarios can be complex

Things to consider:

  • Capital cost for 3rd party software and probably maintenance too
  • Need to consider where to host SSIS (Azure VM or On Premise VM) – Cost associated with this
  • Possible license cost for SQL depending on organisation setup
  • You will sync on a schedule, how often does it need to be
    • The more frequent the less data each time
    • Cant be too frequent
  • How will you monitor and schedule the SSIS package

There is no right or wrong answer based on the original 2 line requirement we got, but you can see each solution has a lot to think about.

This emphasises the importance of asking questions and elaborating on the requirements and working out the capabilities of the applications you will integrate with before choosing which option to take. As a general rule I would recommend not to jump too quickly to option 1 or 1.5. As an integration guy we usually frown upon these kind of options because of the way they couple applications and create long term problems even though they might work initially. I think the other 3 options (2-4) will be relatively easy to choose between depending on the requirements elaboration but with option 1 and 1.5 I would only choose these in niche cases and I would do so only with full buy in from your architecture team that you have a justifiable reason for choosing it that has been documented enough to be able to explain later when someone comes along and asks WTF?

One other factor to consider which we didn’t touch on too much above. I have kind of assumed you have an open toolset on todays typical CRM and Azure project. It may also be the case that your project has some constraints which may influence your decision to choose one option over the other. I hope in these cases the above considerations will help you to validate the choice you make or also give you some ammunition if you feel that you should challenge the constraint and consider another option.

The birth of a new SSO Application Configuration Tool for BizTalk Server 2016

The birth of a new SSO Application Configuration Tool for BizTalk Server 2016

Happy to announce the birth of a new SSO Application Configuration tool that will provide the ability to easily add and manage configuration applications, add and manage key-value pairs in the SSO database, as well as securely import and export configuration applications so that they can be deployed to different environments.

SSO Application Configuration Tool for BizTalk Server 2016

BizTalk Server leverages the Enterprise Single Sign-On (SSO) capabilities for securely storing critical information such as secure configuration properties (for example, the proxy user ID, and proxy password) for the BizTalk adapters. Therefore, BizTalk Server requires SSO to work properly. BizTalk Server automatically installs SSO on every computer where you install the BizTalk Server runtime.

But it also can keep your own application configuration data in SSO database, let say the usual configurations that we normally keep in a configuration file (“app.config”)). If you’ve been in the BizTalk world long enough, you’ve probably faced this challenge or need and until 2009 there wasn’t an easy way to archive that and Richard Seroter’s BizTalk SSO Configuration Data Storage Tool was the go tool to store and manage Single Sign-On (SSO) applications – this is still a valid tool and if you rebuild the code in the last version of BizTalk Server it still works perfectly.

In mid-2009 Microsoft released an MMC snap-in to tackle this exact issue: SSO Configuration Application MMC Snap-In provides the ability to add and manage applications, add and manage key-value pairs in the SSO database, as well as import and export configuration applications so that they can be deployed to different environments. It wasn’t nor is it the perfect tool in my opinion since it as several UI limitations but it worked perfectly until… a new version of BizTalk Server was released.

Unfortunately, this tool will not work properly at least from BizTalk Server 2013 forward. At first sight, it seems that everything is working properly but when you try to create a key-value pair you will see that nothing happens and no key is created.

At the time I published a hotfix for the tool:

And M.R.Ashwin Prabhu published the same hotfix for BizTalk Server 2016: BizTalk Server 2016: Fix for SSO Configuration Application MMC Snap-In.

In part, these hotfixes solved the issue but I recently realized that the tool even with the hotfix doesn’t work properly in multiple environments and to try to uninstall the Microsoft snap-in after the hotfix is “installed” it is a nightmare.

Again, Richard Seroter tool is a great tool but is not fully compatible with Microsoft tool and in some parts, I liked that tool. So me and my team decided to “recreate” and improve SSO Application Configuration and the result is this:

  • Fully resizable windows (you will understand if you are a BizTalk Developer);
  • You can securely export and import Application configurations and it is compatible with MSFT SSO snap-in;
  • You can duplicate Applications (copy and past);
  • You can rename Applications;
  • You can easily add new key-values without the need to always perform a right click and select new key option;
  • You can easily add edit key-values without the need to always perform a double-click to open a new window;
  • You can refresh the Applications tree view
  • You can configure you system settings

SSO Application Configuration Tool for BizTalk Server 2016: Settings

  • You can search!

THIS TOOL IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND.

You can download BizTalk Server SSO Application Configuration Tool for BizTalk Server 2016 from:
BizTalk Server SSO Application Configuration Tool for BizTalk Server 2016 (45 KB)
Microsoft | TechNet Gallery

Author: Sandro Pereira

Sandro Pereira lives in Portugal and works as a consultant at DevScope. In the past years, he has been working on implementing Integration scenarios both on-premises and cloud for various clients, each with different scenarios from a technical point of view, size, and criticality, using Microsoft Azure, Microsoft BizTalk Server and different technologies like AS2, EDI, RosettaNet, SAP, TIBCO etc. He is a regular blogger, international speaker, and technical reviewer of several BizTalk books all focused on Integration. He is also the author of the book “BizTalk Mapping Patterns & Best Practices”. He has been awarded MVP since 2011 for his contributions to the integration community. View all posts by Sandro Pereira

BizTalk360 Customer Support — 2017 Achievement

BizTalk360 Customer Support — 2017 Achievement

BizTalk360 Customer Support Statistics

The stats are in. Our continuous striving for improvement and dedication have resulted in some really positive numbers in BizTalk360 Customer Support. Here’s some statistics that we are happy to share. These statistics are taken from data provided by our customer support platform – Freshdesk.

  • 5514 customer queries addressed in 2017
  • Tickets ranging across technical support, licensing and sales enquiries
  • The busiest month for the team was the month of May 2017. We received about 1300 support tickets.
  • We managed to respond to 97% of the tickets and resolve 84% of the tickets within the SLA
  • We resolved 73% of the tickets with just one response to the customer
  • Our top performing support agent was Praveena Jayanarayanan
  • We received support tickets on
    • Email
    • Support Portal
    • Feedback widget
  • 86% of our customers rated our support as awesome and were happy with the support offered to them

What’s coming in 2018?

Here’s what is expected from BizTalk360 in 2018 –

  1. Launch of two new products – Atomic Scope and Document360
  2. INTEGRATE 2018 – June 4 – 6 at etc.Venues, 155 Bishopsgate, London. Registrations are open. Grab your tickets today.

BizTalk360 Customer Support

Video

Here’s a short video on our customer support statistics.

Author: Rochelle Saldanha

Rochelle Saldanha is currently working in the Customer Support & Client Relationship Teams at BizTalk360. She loves travelling and watching movies. View all posts by Rochelle Saldanha