Sunday, May 27, 2012

OAGIS and BizTalk walk through (PurchaseOrder) - Part 2

Business Solution


We are receiving a ProcessPurchaseOrder BOD from a partner. The incoming message is received from a file location and passed into the BizTalk messaging engine, which activates a new orchestration to process this message. The orchestration will inspect the value of the ConfirmationCode element to determine the circumstances in which a ConfirmBOD message should be sent. A map will be used to generate an AcknowledgePurchaseOrder and ConfirmBOD (if needed,) message. The orchestration will then send the message(s) to the trade partner, using the value of the LogicalID node as the address of the send port.

Create Ports

File location of the incoming ProcessPurchaseOrder document.
c:\oagis\in
File location that the outbound AcknolwedgePurchaseOrder and ConfirmBOD documents will be created in.
c:\oagis\out
Assembly containing Component schemas required for Nouns.
Components_Schemas.dll
Assembly containing the BOD and PurchaseOrder Nouns.
Noun_Schemas.dll
Assembly containing AcknowledgePurchaseOrder, ConfirmBOD and ProcessPurchaseOrder BOD schemas.
BOD_Schemas.dll

Create the Maps

The AcknolwedgePurchaseOrder and ConfirmBOD documents will be generated by applying a map to the ProcessPurchaseOrder document. The map will copy elements of the ProcessPurchaseOrder message into the response messages so that the originating system will be able to match the response documents to the original ProcessPurchaseOrder request.

Create the AcknowledgePurchaseOrder map

In Visual Studio 2010, create a new BizTalk project named “Maps.” This will contain the BizTalk maps used to create the AcknowledgePurchaseOrder and ConfirmBOD messages.

In Solution Explorer, right-click the project name, and select Add Reference. On the Browse tab, select the Components_Schemsa.dll, Noun_Schemas.dll and Bod_Schemas.dll assemblies, and then click OK. These references will allow the maps to access the BOD schemas.

Right-click the project name and select Properties. On the Project Property Pages, expand the Common Properties entry, select Assembly, and then select the Assembly Key File entry in the right pane. Click the ellipsis (…) button, and then select the OAGIS.snk file created previously. Click OK.
Right-click the project name, select Add, and then select New Item. On the Add New Item dialog box, select Map files in the Categories pane, then select Map in the Templates pane. Enter “POToAck.btm” in the Name field, and then click OK.

Click Open Source Schema. In the BizTalk Type Picker section, expand Maps, expand References, and expand the reference containing the BOD schemas.

Expand Schemas, and then select the ProcessPurchaseOrder schema. Click OK. Repeat this step to select AcknowledgePurchaseOrder as the Destination Schema.



From the Toolbox, drag the items to the grid between the two schemas: String Concatenate, Date and Time, Scripting, Mass Copy (add this item twice).

Set the following parameters for the String Concatenate and Scripting Functoids:
String Concatenate. Select the String Concatenate item from the grid.

In Properties, select Input Parameters, and then click the ellipsis (…) button.
Click the Insert New Parameter button and enter the value “9.5” for the new parameter. Click OK.
Select the Scripting item from the grid. In Properties, select Script, and then click the ellipsis (…) button.

Select Inline C# from the Script type drop-down list, enter the following in the Inline Script Buffer, and then click OK.

This code will return a new GUID value that will be used to populate the BODID element of the outbound document.
public string GetGuid()
{
   return System.Guid.NewGuid().ToString();
}
Link the following items by dragging lines between them:


Source schema node
Functoid
Destination schema node
No incoming link
String Concatenate
AcknowledgePurchaseOrder\releaseID
No incoming link
Date and Time
AcknowledgePurchaseOrder\<Sequence>\ApplicationArea\CreationDateTime
No incoming link
Scripting
AcknowledgePurchaseOrder\<Sequence>\ApplicationArea\BODID
ProcessPurchaseOrder\<Sequence>\ApplicationArea
Mass Copy
AcknowledgePurchaseOrder\<Sequence>\DataArea\Acknowledge
\<Sequence>\OriginalApplicationArea
ProcessPurchaseOrder\<Sequence>\DataArea\PurchaseOrder
Mass Copy
AcknowledgePurchaseOrder\<Sequence>\DataArea\PurchaseOrder

In Solution Explorer, right-click the project name and select Build. After successful Deploy.

Create the ConfirmBOD map

In Visual Studio 2010, open the BizTalk project containing the AcknowledgePurchaseOrder map.
Right-click the project name, select Add, and then select New Item. On the Add New Item dialog box, select Map files in the Categories pane, and then select Map in the Templates pane. Enter “POToConfirm.btm” in the Name field, and then click OK.

Click Open Source Schema. In the BizTalk Type Picker, expand Maps, expand References, and then expand the reference containing the BOD schemas.

Expand Schemas, select the ProcessPurchaseOrder schema, and then click OK.

Repeat this step to select ConfirmBOD as the Destination Schema.

From the Toolbox, drag the items to the grid between the two schemas: Concatenate, String Concatenate, Date and Time, Scripting,  Mass Copy (add this item twice)

Set the following parameters for the String Concatenate and Scripting Functoids:

String Concatenate
Select the String Concatenate item from the grid. In Properties, select Input Parameters and click the ellipsis (…) button.
Click the Insert New Parameter button and enter the value “9.2” for the new parameter. Click OK.

Scripting Functoid
Select the Scripting item from the grid. In Properties, select Script, and then click the ellipsis (…) button.

Select Inline C# from the Script type drop-down list, enter the following in the Inline Script Buffer, and then click OK.

This code will return a new GUID value that will be used to populate the BODID element of the outbound document.

public string GetGuid()
{
   return System.Guid.NewGuid().ToString();
}


Source schema node
Functoid
Destination schema node
No incoming link
String Concatenate
ConfirmBOD\releaseID
No incoming link
Date and Time
ConfirmBOD\<Sequence>\ApplicationArea\CreationDateTime
No incoming link
Scripting
ConfirmBOD\<Sequence>\ApplicationArea\BODID
ProcessPurchaseOrder\<Sequence>\ApplicationArea
Mass Copy
ConfirmBOD\<Sequence>\DataArea\Confirm
\<Sequence>\OriginalApplicationArea
ProcessPurchaseOrder\<Sequence>\DataArea\PurchaseOrder
\PurchaseOrderHeader\<Sequence>\<Group:DocumentIDsGroup>
\DocumentID\<Equivalent>\<DocumentIDType>\<Sequenece>\ID
Mass Copy
Confirm\<Sequence>\DataArea\BOD\BODSuccessMessage
\NounSuccessMessage\ProcessMessage\ID

In Solution Explorer, right-click the project name and select Build. After successful Deploy.

Create the Orchestration

Orchestrations typically contain processing logic, such as what action to take if a document contains a certain value. In this scenario, we will inspect the value of ConfirmationCode on the ProcessPurchaseOrder request, and if set to “Always,” return a ConfirmBOD. The process of constructing the ConfirmBOD, as well as the AcknowledgePurchaseOrder documents, will be handled by maps located in send ports.

In Visual Studio 2010, create a new BizTalk project to contain the orchestration.
In Solution Explorer, right-click the project name and select Add Reference.  On the Browse tab, select the assemblies containing the BOD, Noun and Component schemas, and then click OK.

Right-click the project name and select properties. In the Project Property Pages, expand the Common Properties entry, select Assembly, and then select the Assembly Key File entry in the right pane. Click the ellipsis (…) button and select the OAGIS.snk file created previously.

Right-click the project name, select Add, and then select New Item. On the Add New Item dialog box, select Orchestration files in the Categories pane, then select BizTalk Orchestration in the Templates pane. Enter “ProcessPO.odx” in the Name field, and then click OK.

Right-click Port Surface, and select New Configured Port. Click Next and enter Receive_Port in the Name field. Continue through the wizard, selecting Next to accept the default values, and then click Finish.

Configure the Send_Ack_Port and Send_Confirm_Port:
- Right-click the Port Surface and select New Configured Port. Click Next and enter “Send_Ack_Port” in the Name field. Click Next.

- Accept the defaults on the Select a Port Type page by clicking Next. On the Port Binding page, set the Port direction of communication field to I’ll always be sending messages on this port, and then set the Port Binding to Dynamic.

- Set the Send pipeline field to Microsoft.BizTalk.DefaultPipelines.XMLTransmit, and then click Next. Click Finish.

Repeat this step to create the Send_Confirm_Port.

In Orchestration View, right-click Messages, and then select New Message. In Properties, enter “PO_In” in the Identifier field. From the Message Type drop-down list, expand Schemas, and then click <Select from reference>.

On the Select Artifact Type dialog box, expand the reference containing the BOD schemas, and select the ProcessPurchaseOrder schema. Click OK.


Add and configure the following action shapes to design the orchestration flow:
ProcessPurchaseOrder Receive

From the Toolbox, drag the Receive shape to the design surface and drop it on the Drop a shape from the toolbox here text. In Properties, enter “Receive_PO” in the Name field and select PO_In as the value of the Message field. Set the value of the Activate field to True to indicate that messages received in this shape should create a new instance of the orchestration.

Confirmation Decision
- From the Toolbox, drag the Decide shape to the design surface and place it immediately below the Receive_PO shape. In Properties, set the Name of the Decide shape to “Send_Confirm.”

- Select the Rule_1 branch of the decide shape, and in Properties, set the Name field to Always. Select the Expression field and click the ellipsis (…) button.

- In the BizTalk Expression Editor, enter the following code, and then click OK:
PO_In(BOD_Schemas.PropertySchema.ConfirmationCode)=="Always"

If the Confirmation Code of the incoming message contains the value “Always,” then this branch of the Decide shape will be processed.
ConfirmBOD Send
Add an Expression shape immediately after the Always shape in the Send_Confirm decision. In Properties, enter Set_Confirm_Address in the Name field. Select the Expression field, and then click the ellipsis (…) button.

In the BizTalk Expression Editor, enter the following:
Send_Confirm_Port(Microsoft.XLANGs.BaseTypes.Address)=PO_In(BOD_Schemas.PropertySchema.LogicalID)+”Confirm.xml”;
This will set the Send_Confirm port to the address contained in the LogicalID field of the incoming message, and a message name of Confirm.xml. This will be the URI used to send the message returned over this port.

From the Toolbox, drag the Send shape to the design surface and place it immediately after the Set_Confirm_Address, inside the Send_Confirm Decide shape. This will be used to send the ConfirmBOD message if the Always rule is triggered. In Properties, set the Name of the Send shape to Send_Confirm. Set the Message to PO_In.
AcknowledgePurchaseOrder Send
Add an Expression shape immediately after the Send_Confirm decision shape. In Properties, set the Name field to Set_Ack_Address, select the Expression field, and then click the ellipsis (…) button.
In the BizTalk Expression Editor, enter the following code:
Send_ACK_Port(Microsoft.XLANGs.BaseTypes.Address)=PO_In(BOD_Schemas.PropertySchema.LogicalID)+”Ack.xml”;
This will set the Send_Confirm port to the address contained in the LogicalID field of the incoming message, with a message name of Ack.xml. This will be the URI used to send the message returned over this port.

From the Toolbox, drag the Send shape to the design surface and place it immediately after the Send_Confirm design shape. This should place it immediately above the red stop symbol. In Properties, set the Name to “Send_Ack” and set the Message to “PO_In.” This port will send the AcknowledgePurchaseOrder message to your trade partner.

To link the Send and Receive shapes to the logical ports, drag the green direction indicator of the port shapes to the Send and Receive shapes:


Drag this
To this
Receive_Port
Receive_PO
Send_Ack_Port
Send_Ack
Send_Confirm_Port
Send_Confirm




In Solution Explorer, right-click the project name and select Build. After successful Deploy.

Create the Messaging Ports

The logical ports in the orchestration will be connected to physical messaging ports. In the following steps you will use the BizTalk Administration Console to create and configure the following ports:


Port Name
Purpose
Receive_PO
Receives the ProcessPurchaseOrder request.
Send_ACK
Sends the AcknowledgePurchaseOrder response.
Send_Confirm
Sends the ConfirmBOD, if requested by the ProcessPurchaseOrder request.

Right-click the send port containing “Send_Confirm_Port” as part of the name, and then select Properties. Select POconfirm map as outbound.


In the Bindings section, select Receive_PO in the Receive Ports field to associate the logical Receive_Port in the orchestration with the Receive_PO message port. Note that the Outbound Logical Ports are already selected. Click OK.


Right-click the orchestration, and then select Start.

At this point the orchestration and ports should be enabled, and ready to process incoming messages.

BizTalk Server will pick up incoming documents from c:\oagis\in, process them, and send the AcknowledgePurchaseOrder, and optionally ConfirmBOD documents. The value of the LogicalId field will be used as the output path for the response documents. In this scenario it should contain the value “file://c:\oagis\out\”.

No comments:

Post a Comment