Mapping Functions: What are they and where can I find out more about them?

When integrating data between Microsoft Dynamics CRM and the Microsoft Dynamics ERPs, there is always going to be a need to adjust the “shape” of the data so that it can be successfully integrated between the two systems. You may need to change the format of the data or possibly aggregate multiple source fields to properly form the accurate value that is to be written into the destination system. Let me give you some examples:

 

Type Change:

In the “Customer to Account” map for Microsoft Dynamics GP 10 to Microsoft Dynamics CRM, there is a field named “State” that represents, you guessed it, the Account state (active or inactive). In CRM, the values for this state field are determined by the AccountState Enumeration which has the values 0 (Active) and 1 (Inactive). The problem here is that the source Customer entity from Microsoft Dynamics GP 10 has a field named “Active” which is a Boolean type (true or false). In order to map the “Active” source field to the “State” destination field requires the use of a mapping function:

=If(Active, 0, 1)

 

Here is the documentation around the If mapping function:

Declaration: If (condition, trueValue, falseValue) : T

Description: Returns ‘trueValue’ if the specified ‘condition’ is true; otherwise, returns ‘falseValue’.

 

 

Format Change:

In the same “Customer to Account” map for Microsoft Dynamics GP 10 to Microsoft Dynamics CRM, mapping the “All Addresses\Customer Address\Main Phone” destination field from the “All Addresses\Customer Address\Phone 1\Phone Number” source field is even more interesting. This is because the source field comes out of Microsoft Dynamics GP with no formatting applied. Therefore, if we directly mapped the source field to the destination field we would get something like this in CRM: 9995551234

 

Wouldn’t it be nice if we could actually get this phone number formatted more appropriately? Say like: (999) 555-1234. Ah, but we can with the help of Mapping Functions!

 

Below is the complete mapping for the source field to the destination field:

=If(GreaterThan(Length(All Addresses\Customer Address\Phone 1\Phone Number), 10), Replace(Replace(All Addresses\Customer Address\Phone 1\Phone Number, "[^0-9]", ""), "(\d{3})(\d{3})(\d{4})(\d{0,4})", "($1) $2-$3 Ext. $4"), Replace(Replace(All Addresses\Customer Address\Phone 1\Phone Number, "[^0-9]", ""), "(\d{3})(\d{3})(\d{4})", "($1) $2-$3"))

 

Here are the definitions for the different mapping functions used above. I will leave it as an exercise for the reader to understand how this all works. J

Declaration: If (condition, trueValue, falseValue) : T

Description: Returns ‘trueValue’ if the specified ‘condition’ is true; otherwise, returns ‘falseValue’.

 

Declaration: GreaterThan (value1, value2) : Boolean

Description: Returns true if ‘value1’ is greater than ‘value2’; otherwise, false.

 

Declaration: Length (text) : Int32

Description: Gets the number of characters in ‘text’.

 

Declaration: Replace (text, pattern, format) : String

Description: Replaces all strings in ‘text’ that match the specified regular expression ‘pattern’ with a specified replacement string ‘format’.

 

 

Of course, if you take a look at the previous post: Integrating e-mail address from Dynamics CRM to the Internet Addresses in Dynamics GP 2010, you will see that mapping functions played a key role in making this scenario possible.

 

So I am sure by now you are asking yourself, “How do I find out more about the available mapping functions in the Connector?”

 

To see all the functions available with Connector:

  1. 1.   Go to any map and click the    icon on any field to bring up the Destination Field Mapping wizard.
  2. 2.   Then, choose the “Use a function” option. This will take you to a window where you can scroll through the available mapping functions or filter the available mapping functions by selecting a “Function category:”.
  3. 3.   Under the list of mapping functions, you will find an area where the definition of the selected mapping function will be displayed.

 

 

 

Hopefully this makes sense to you and you find the experience similar to other Microsoft products.

 

If you have a question or recommendation; drop us a comment on the blog or maybe even give us a suggestion on Microsoft Connect. Either way, we’d love to hear from you.

Comments

  • Anonymous
    May 23, 2011
    Hello, I have problems to know what i have to fill at the lookup fields in mapping configuration. Where can i find documentation for this ? Thanks,

  • Anonymous
    May 23, 2011
    The documentation for Connector is provided with the product download. If that doesn't provide you with what you need, you can contact Dynamics Support for further assistance. Questions posted on http://community.dynamics.com/ also can be successful.

  • Anonymous
    June 08, 2011
    create custom function www.dynamics-community.at/.../NAVCRM-Dynamics-Connectore28093GetNextNo-(Series)-from-NAVe28093create-custom-Mapping-function.aspx Regards, Rene

  • Anonymous
    June 20, 2011
    Hello - We are using GP 2010 with CRM 2011 (upgraded to CRM 2011). One of the things we need to happen is for our Sales Reps to actually see the quantity on hand for products. Do you know if we can map to the “Available Quantity” in Dynamics GP for Products? Right now, “On Hand Quantity” is available, but that doesn’t actually give an accurate picture of the product on hand because it doesn’t account for product that’s been allocated, but not yet shipped off premise. I don’t see it listed when I try to go into the Stock Item: Quantities>item to set up the mapping. I’d prefer not to have to map over “Allocated Quantity” to a field in CRM and then run some kind of jScript to do that calculation on the CRM side. We want to just pull in the Actual unallocated Product that's on hand. Mike

  • Anonymous
    June 24, 2011
    Hi Mike, I know of one partner who also wanted to provide Quantity information to their sales team. That partner elected to use a Microsoft SQL Reporting Services report to regulary publish Item Quantity information to the CRM portal, exposed in an iFrame on the Item Card in CRM. I will still check into if you can map the Quantity Available field. Char

  • Anonymous
    June 27, 2011
    I'm attempting to run the initial sync for Accounts between two established programs, CRM 4.0 On-prem and AX 2009. The two systems use a common Account Number for customers. How do I check if an Account already exists in CRM and to update that account with data from AX? If it doesn't exist in CRM, then create a new record.

  • Anonymous
    June 27, 2011
    The comment has been removed

  • Anonymous
    July 01, 2011
    Mike, We just posted more info on working with Quantity on Hand for items. See blogs.msdn.com/.../changing-the-default-behavior-of-a-connector-integration.aspx. Hope this helps.

  • Anonymous
    July 11, 2011
    To "TheNewGuy00" -- the Connector documentation has a section on duplicate checking that should help you.

  • Anonymous
    July 12, 2011
    Char - thanks for the updates! I'll take a look at the blog post, but the SSRS option may be a viable alternative, as well. I'll let you know how it works out. ~Mike

  • Anonymous
    October 01, 2012
    Hi CharG,   Thansk for your post! I have some problem with "if statement". I don't want to update Crm value when "condition is true". I wrote =If(EqualTo(Address, ""), "", Address) but update with blank My Logic If (Address = "")    Stay CRM Address     (now update with blank) ELSE    Update with NAV value How may i do it? Regards, Yukon

  • Anonymous
    April 09, 2016
    Hello Guys,I need your help to try to fix an error that last for a long time with my integration.On my company I did the integration between CRM 2013 and NAV 2013 R2 (all on-promises).I have created a custom integration between CRM opportunities and NAV Quotes, since our quotes are done on NAV, natively CRM opportunities don’t have number, so I’m using an auto-number solution for it thinking that using this new field could be common to create a bi-lateral sync.In fact If I try to use this field the connector returns and error: “[0e55c2bc-6bfe-e511-9445-00155d003803] Opportunity to NAV Sales Quote Exception occurred in Microsoft Dynamics NAV” so I’m using the field “Opportunity” as integration ID.The problem is that randomly there are a lot of duplicated records on NAV Quotesm like I said is random sometimes it created 4/8 duplicated records on NAV then stops, other times I works fine, but If you set the opportunity to WON it start duplicating again.This is my filter code://------------------------------------------------------------------------------// // This code was generated by a tool.// Runtime Version:4.0.30319.34209//// Changes to this file may cause incorrect behavior and will be lost if// the code is regenerated.// //------------------------------------------------------------------------------namespace Transformeb7a75affb264a05a829cfdd8b1ba162{ using Microsoft.Dynamics.Integration.Transform; using System.Collections.Generic; public partial class Transformer : Microsoft.Dynamics.Integration.Transform.TransformBase, Microsoft.Dynamics.Integration.Transform.ITransform { public override object TransformObject(object source) { return this._(((System.Collections.Generic.Dictionary)(source))); } private Microsoft.Dynamics.Integration.Filtering.FilterResult _(System.Collections.Generic.Dictionary source) { Microsoft.Dynamics.Integration.Filtering.FilterResult _ = new Microsoft.Dynamics.Integration.Filtering.FilterResult(); _.PassedCriteria = Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.Or(Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.And(Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.EqualTo(( ((source != null) && (source.ContainsKey("new_criarpropostanav") == true)) ? ((System.Nullable)(source["new_criarpropostanav"])) ?? null : default(System.Nullable) ), true), Microsoft.Dynamics.Integration.Mapping.Helpers.DefaultValueLogicMappingHelper.DecimalDefaultEqualTo(Microsoft.Dynamics.Integration.Transform.TransformBase.NullableToNullable(( (((source != null) && (source.ContainsKey("statuscode") == true)) && ((((System.Collections.Generic.Dictionary)(source["statuscode"])) != null) && (((System.Collections.Generic.Dictionary)(source["statuscode"])).ContainsKey("Value") == true))) ? ((System.Nullable)(((System.Collections.Generic.Dictionary)(source["statuscode"]))["Value"])) ?? null : default(System.Nullable) )), 1M)), false); return ; } }}And this the the transform code://------------------------------------------------------------------------------// // This code was generated by a tool.// Runtime Version:4.0.30319.34209//// Changes to this file may cause incorrect behavior and will be lost if// the code is regenerated.// //------------------------------------------------------------------------------namespace Transform545c9d75575a455c9beb7de93c575e0e{ using Microsoft.Dynamics.Integration.Transform; using System.Collections.Generic; public partial class Transformer : Microsoft.Dynamics.Integration.Transform.TransformBase, Microsoft.Dynamics.Integration.Transform.ITransform { public override object TransformObject(object source) { return this.(((System.Collections.Generic.Dictionary)(source))); } private System.Collections.Generic.Dictionary _(System.Collections.Generic.Dictionary source) { System.Collections.Generic.Dictionary _ = new System.Collections.Generic.Dictionary(); _["Sell_to_Customer_No"] = ( ((source != null) && (source.ContainsKey("new_accountno") == true)) ? ((string)(source["new_accountno"])) : default(string) ); _["Sell_to_Contact"] = ( (((source != null) && (source.ContainsKey("parentcontactid") == true)) && ((((System.Collections.Generic.Dictionary)(source["parentcontactid"])) != null) && (((System.Collections.Generic.Dictionary)(source["parentcontactid"])).ContainsKey("Name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["parentcontactid"]))["Name"])) : default(string) ); _["Requested_Delivery_Date"] = Microsoft.Dynamics.Integration.Transform.TransformBase.NullableToValue(( ((source != null) && (source.ContainsKey("new_datadeentregaacliente") == true)) ? ((System.Nullable)(source["new_datadeentregaacliente"])) ?? null : default(System.Nullable) )); _["Estimated_Close_Date"] = Microsoft.Dynamics.Integration.Transform.TransformBase.NullableToValue(( ((source != null) && (source.ContainsKey("estimatedclosedate") == true)) ? ((System.Nullable)(source["estimatedclosedate"])) ?? null : default(System.Nullable) )); _["Manager"] = ( (((source != null) && (source.ContainsKey("new_gestor") == true)) && ((((System.Collections.Generic.Dictionary)(source["new_gestor"])) != null) && (((System.Collections.Generic.Dictionary)(source["new_gestor"])).ContainsKey("Name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["new_gestor"]))["Name"])) : default(string) ); _["Salesperson_Code"] = ( (((source != null) && (source.ContainsKey("ownerid") == true)) && ((((System.Collections.Generic.Dictionary)(source["ownerid"])) != null) && (((System.Collections.Generic.Dictionary)(source["ownerid"])).ContainsKey("dynamics_integrationkey") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["ownerid"]))["dynamics_integrationkey"])) : default(string) ); _["Proposal_Owner"] = ( (((source != null) && (source.ContainsKey("new_proposal_owner") == true)) && ((((System.Collections.Generic.Dictionary)(source["new_proposal_owner"])) != null) && (((System.Collections.Generic.Dictionary)(source["new_proposal_owner"])).ContainsKey("Name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["new_proposal_owner"]))["Name"])) : default(string) ); _["CRM_Opportunity_No"] = ( ((source != null) && (source.ContainsKey("new_number") == true)) ? ((string)(source["new_number"])) : default(string) ); _["Oportunity_CRM"] = ( ((source != null) && (source.ContainsKey("name") == true)) ? ((string)(source["name"])) : default(string) ); _["Oportunity_Classification"] = ( (((source != null) && (source.ContainsKey("new_classificao") == true)) && ((((System.Collections.Generic.Dictionary)(source["new_classificao"])) != null) && (((System.Collections.Generic.Dictionary)(source["new_classificao"])).ContainsKey("name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["new_classificao"]))["name"])) : default(string) ); _["Inactive_Quote"] = Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.If(Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.EqualTo(( (((source != null) && (source.ContainsKey("statecode") == true)) && ((((System.Collections.Generic.Dictionary)(source["statecode"])) != null) && (((System.Collections.Generic.Dictionary)(source["statecode"])).ContainsKey("Value") == true))) ? ((System.Nullable)(((System.Collections.Generic.Dictionary)(source["statecode"]))["Value"])) ?? null : default(System.Nullable) ), 2), "1", "0"); _["Quote_Status"] = Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.If(Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.EqualTo(Microsoft.Dynamics.Integration.Transform.TransformBase.NullableToNullable(( ((source != null) && (source.ContainsKey("presentproposal") == true)) ? ((System.Nullable)(source["presentproposal"])) ?? null : default(System.Nullable) )), 0), "0", "1"); _["Bill_to_Contact"] = ( (((source != null) && (source.ContainsKey("parentcontactid") == true)) && ((((System.Collections.Generic.Dictionary)(source["parentcontactid"])) != null) && (((System.Collections.Generic.Dictionary)(source["parentcontactid"])).ContainsKey("Name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["parentcontactid"]))["Name"])) : default(string) ); _["Prices_Including_VAT"] = Microsoft.Dynamics.Integration.Transform.ConversionUtilities.SafeToString(( ((source != null) && (source.ContainsKey("presentproposal") == true)) ? ((System.Nullable)(source["presentproposal"])) ?? null : default(System.Nullable) )); _["Ship_to_Contact"] = ( (((source != null) && (source.ContainsKey("parentcontactid") == true)) && ((((System.Collections.Generic.Dictionary)(source["parentcontactid"])) != null) && (((System.Collections.Generic.Dictionary)(source["parentcontactid"])).ContainsKey("Name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["parentcontactid"]))["Name"])) : default(string) ); _["Integration_ID"] = Microsoft.Dynamics.Integration.Transform.ConversionUtilities.SafeToString(( ((source != null) && (source.ContainsKey("opportunityid") == true)) ? ((System.Guid)(source["opportunityid"])) : default(System.Guid) )); return _; } }}If you could help me with this I appreciate a lot since I’m feeling a bit lost in order to solve this issue.Regards,

  • Anonymous
    April 09, 2016
    Hello Guys,I need your help to try to fix an error that last for a long time with my integration.On my company I did the integration between CRM 2013 and NAV 2013 R2 (all on-promises).I have created a custom integration between CRM opportunities and NAV Quotes, since our quotes are done on NAV, natively CRM opportunities don’t have number, so I’m using an auto-number solution for it thinking that using this new field could be common to create a bi-lateral sync.In fact If I try to use this field the connector returns and error: “[0e55c2bc-6bfe-e511-9445-00155d003803] Opportunity to NAV Sales Quote Exception occurred in Microsoft Dynamics NAV” so I’m using the field “Opportunity” as integration ID.The problem is that randomly there are a lot of duplicated records on NAV Quotes like I said is random sometimes it created 4/8 duplicated records on NAV then stops, other times I works fine, but If you set the opportunity to WON it start duplicating again.This is my filter code://------------------------------------------------------------------------------// // This code was generated by a tool.// Runtime Version:4.0.30319.34209//// Changes to this file may cause incorrect behavior and will be lost if// the code is regenerated.// //------------------------------------------------------------------------------namespace Transformeb7a75affb264a05a829cfdd8b1ba162{ using Microsoft.Dynamics.Integration.Transform; using System.Collections.Generic; public partial class Transformer : Microsoft.Dynamics.Integration.Transform.TransformBase, Microsoft.Dynamics.Integration.Transform.ITransform { public override object TransformObject(object source) { return this._(((System.Collections.Generic.Dictionary)(source))); } private Microsoft.Dynamics.Integration.Filtering.FilterResult _(System.Collections.Generic.Dictionary source) { Microsoft.Dynamics.Integration.Filtering.FilterResult _ = new Microsoft.Dynamics.Integration.Filtering.FilterResult(); _.PassedCriteria = Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.Or(Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.And(Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.EqualTo(( ((source != null) && (source.ContainsKey("new_criarpropostanav") == true)) ? ((System.Nullable)(source["new_criarpropostanav"])) ?? null : default(System.Nullable) ), true), Microsoft.Dynamics.Integration.Mapping.Helpers.DefaultValueLogicMappingHelper.DecimalDefaultEqualTo(Microsoft.Dynamics.Integration.Transform.TransformBase.NullableToNullable(( (((source != null) && (source.ContainsKey("statuscode") == true)) && ((((System.Collections.Generic.Dictionary)(source["statuscode"])) != null) && (((System.Collections.Generic.Dictionary)(source["statuscode"])).ContainsKey("Value") == true))) ? ((System.Nullable)(((System.Collections.Generic.Dictionary)(source["statuscode"]))["Value"])) ?? null : default(System.Nullable) )), 1M)), false); return ; } }}And this the transform code://------------------------------------------------------------------------------// // This code was generated by a tool.// Runtime Version:4.0.30319.34209//// Changes to this file may cause incorrect behavior and will be lost if// the code is regenerated.// //------------------------------------------------------------------------------namespace Transform545c9d75575a455c9beb7de93c575e0e{ using Microsoft.Dynamics.Integration.Transform; using System.Collections.Generic; public partial class Transformer : Microsoft.Dynamics.Integration.Transform.TransformBase, Microsoft.Dynamics.Integration.Transform.ITransform { public override object TransformObject(object source) { return this.(((System.Collections.Generic.Dictionary)(source))); } private System.Collections.Generic.Dictionary _(System.Collections.Generic.Dictionary source) { System.Collections.Generic.Dictionary _ = new System.Collections.Generic.Dictionary(); _["Sell_to_Customer_No"] = ( ((source != null) && (source.ContainsKey("new_accountno") == true)) ? ((string)(source["new_accountno"])) : default(string) ); _["Sell_to_Contact"] = ( (((source != null) && (source.ContainsKey("parentcontactid") == true)) && ((((System.Collections.Generic.Dictionary)(source["parentcontactid"])) != null) && (((System.Collections.Generic.Dictionary)(source["parentcontactid"])).ContainsKey("Name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["parentcontactid"]))["Name"])) : default(string) ); _["Requested_Delivery_Date"] = Microsoft.Dynamics.Integration.Transform.TransformBase.NullableToValue(( ((source != null) && (source.ContainsKey("new_datadeentregaacliente") == true)) ? ((System.Nullable)(source["new_datadeentregaacliente"])) ?? null : default(System.Nullable) )); _["Estimated_Close_Date"] = Microsoft.Dynamics.Integration.Transform.TransformBase.NullableToValue(( ((source != null) && (source.ContainsKey("estimatedclosedate") == true)) ? ((System.Nullable)(source["estimatedclosedate"])) ?? null : default(System.Nullable) )); _["Manager"] = ( (((source != null) && (source.ContainsKey("new_gestor") == true)) && ((((System.Collections.Generic.Dictionary)(source["new_gestor"])) != null) && (((System.Collections.Generic.Dictionary)(source["new_gestor"])).ContainsKey("Name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["new_gestor"]))["Name"])) : default(string) ); _["Salesperson_Code"] = ( (((source != null) && (source.ContainsKey("ownerid") == true)) && ((((System.Collections.Generic.Dictionary)(source["ownerid"])) != null) && (((System.Collections.Generic.Dictionary)(source["ownerid"])).ContainsKey("dynamics_integrationkey") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["ownerid"]))["dynamics_integrationkey"])) : default(string) ); _["Proposal_Owner"] = ( (((source != null) && (source.ContainsKey("new_proposal_owner") == true)) && ((((System.Collections.Generic.Dictionary)(source["new_proposal_owner"])) != null) && (((System.Collections.Generic.Dictionary)(source["new_proposal_owner"])).ContainsKey("Name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["new_proposal_owner"]))["Name"])) : default(string) ); _["CRM_Opportunity_No"] = ( ((source != null) && (source.ContainsKey("new_number") == true)) ? ((string)(source["new_number"])) : default(string) ); _["Oportunity_CRM"] = ( ((source != null) && (source.ContainsKey("name") == true)) ? ((string)(source["name"])) : default(string) ); _["Oportunity_Classification"] = ( (((source != null) && (source.ContainsKey("new_classificao") == true)) && ((((System.Collections.Generic.Dictionary)(source["new_classificao"])) != null) && (((System.Collections.Generic.Dictionary)(source["new_classificao"])).ContainsKey("name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["new_classificao"]))["name"])) : default(string) ); _["Inactive_Quote"] = Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.If(Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.EqualTo(( (((source != null) && (source.ContainsKey("statecode") == true)) && ((((System.Collections.Generic.Dictionary)(source["statecode"])) != null) && (((System.Collections.Generic.Dictionary)(source["statecode"])).ContainsKey("Value") == true))) ? ((System.Nullable)(((System.Collections.Generic.Dictionary)(source["statecode"]))["Value"])) ?? null : default(System.Nullable) ), 2), "1", "0"); _["Quote_Status"] = Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.If(Microsoft.Dynamics.Integration.Mapping.Helpers.LogicalMappingHelper.EqualTo(Microsoft.Dynamics.Integration.Transform.TransformBase.NullableToNullable(( ((source != null) && (source.ContainsKey("presentproposal") == true)) ? ((System.Nullable)(source["presentproposal"])) ?? null : default(System.Nullable) )), 0), "0", "1"); _["Bill_to_Contact"] = ( (((source != null) && (source.ContainsKey("parentcontactid") == true)) && ((((System.Collections.Generic.Dictionary)(source["parentcontactid"])) != null) && (((System.Collections.Generic.Dictionary)(source["parentcontactid"])).ContainsKey("Name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["parentcontactid"]))["Name"])) : default(string) ); _["Prices_Including_VAT"] = Microsoft.Dynamics.Integration.Transform.ConversionUtilities.SafeToString(( ((source != null) && (source.ContainsKey("presentproposal") == true)) ? ((System.Nullable)(source["presentproposal"])) ?? null : default(System.Nullable) )); _["Ship_to_Contact"] = ( (((source != null) && (source.ContainsKey("parentcontactid") == true)) && ((((System.Collections.Generic.Dictionary)(source["parentcontactid"])) != null) && (((System.Collections.Generic.Dictionary)(source["parentcontactid"])).ContainsKey("Name") == true))) ? ((string)(((System.Collections.Generic.Dictionary)(source["parentcontactid"]))["Name"])) : default(string) ); _["Integration_ID"] = Microsoft.Dynamics.Integration.Transform.ConversionUtilities.SafeToString(( ((source != null) && (source.ContainsKey("opportunityid") == true)) ? ((System.Guid)(source["opportunityid"])) : default(System.Guid) )); return _; } }}If you could help me with this I appreciate a lot since I’m feeling a bit lost in order to solve this issue.Regards,

    • Anonymous
      April 14, 2016
      Please log a support advisory request for this. That is the proper forum to get your issue resolved in a timely and proper fashion, thanks!