Purpose: Purpose of this post is help to Consume AIF Document service in BizTalk and call its method.
Assumption: that target audience has deep knowledge of BizTalk, mapping, schema and orchestration.
First of all you have to create service group that is gateway to your document service. For this post I have to consume VendVendGroupService. I create a new service group in AOT and drop VendVendGroupService to that node as follow
Right click and deploy the service group.
Wait for generate Increment CIL and Infobox shows deployment of All possible Service group
Now to System Administration module of dynamics Ax. Click on System Administrationè Setup è Services and Integration frameworkè inbound port.
Now create a visual studio project for BizTalk. There are three sub solution, One for Schema, Map and third for orchestration.
In Schema solution. Add the generate Items and then select consume wcf Service
Now add copy wsdl to generate Schemas.
Select metadata Exchange (MEX) endpoint
Click next and generate schema
Schema is generated.
Go to Schema project and delete the Vendor Group Service Orchestration.
Important Schema which will used in mapping.
EntityKeyList Schema has following fields which are used to set values in Request response methods.
This key value pair used for search , Field represent table field Name and value is search field.
VendorGroup schema is replicate of VendorGroup table, here we use SenderId is used legal entity where operation will perform.
If we see the Service Schema, here all request and response methods are generated.
One Schema I create to take input to Interface, and decide which operation is performed I called it for InputSchema.
This Schema will use for input to Interface. We will discuss it later when we start mapping one by one.
As compare to other wcf service, when we consume wcf service, empty binding files are generated, so we have create binding operations manually.
These operations are based on AIF service Object not AIF service Group, where I wasted hours on it.
Please consider the following screenshot for Service operations used in binding files.
The operations in BtsAction will be generated as follow.
Namespace +/+ExternalName+”/”+method name. All Action are similar. For example
Settings for BizTalk Send Receive port is as follow.
Send Pipeline should be XML Transmit.
Receive Pipeline should be XML Receive.
Click on Configure Button and set as following.
Remember the Operation Name in SOAP action header mast be identical to Operation Name in logical port in Orchestration.
All action mapping is as follow.
<BtsActionMapping xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Operation Name="ReadOP" Action="http://schemas.microsoft.com/dynamics/2008/01/services/VendGroupService/read" />
<Operation Name="CreateOP" Action="http://schemas.microsoft.com/dynamics/2008/01/services/VendGroupService/create" />
<Operation Name="UpdateOP" Action="http://schemas.microsoft.com/dynamics/2008/01/services/VendGroupService/update" />
<Operation Name="DeleteOP" Action="http://schemas.microsoft.com/dynamics/2008/01/services/VendGroupService/delete" />
<Operation Name="FindOP" Action="http://schemas.microsoft.com/dynamics/2008/01/services/VendGroupService/find" />
I attached screenshots for mapping used for calling AIF methods.
Read method is two-step process, first step map the input to Entity list, and then Entity list to VendGroupReadRequest
In the case of Create Mapping is as follow.
Update is little tricky, There is field in Update Request Schema, _DocumentHASH, This Field is hidden and every row has its unique value, without that row is did not updated. According to Microsoft Documentation, First you get /find required record using read or find method and then use response data to Update it. For saving time and for the sake of this tutorial, I just pic the_docuemntHash key form previously read response method and hardcode it in map. This is not generic way, but this solve the temporary and my wants to run the Update AIF document method.
Find method is works wonder, if you want to search more than one or all records you can call Find method, where is field with Operation, where you can mentions, value Equal, not equal, greater then equal etc. I want to get all vendor group from Dynamics In response, so I sent its value “not equal”. Response message return all values.
The code of this tutorial is attached, you can download it from here.