PRB: Partner Agreement Wizard Does Not Set the Envelope Information for Outbound Channels When You Use a Newly Imported PIP (822874)



The information in this article applies to:

  • Microsoft BizTalk Server Accelerator for RosettaNet, version 2.0

SYMPTOMS

You can import a new partner interface process (PIP), and then you can create an agreement that includes this PIP by using the Partner Agreement Wizard. However, the element name and the generated document type definition (DTD) name envelope properties of the resulting outbound channel or channels are not set correctly. When an outbound message is sent through one of these channels, the envelope does not contain the correct reference to the RosettaNet DTD for the process that is running.

The following sample code is an example of a RosettaNet XML document that does not have this reference. (This example was derived from a sample document. The sample document was generated from a channel that was created after the user imported a 6C1 PIP.)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PiP6C1ServiceEntitlementStatusResponse SYSTEM"">
<PiP6C1ServiceEntitlementStatusResponse>
The following sample code is an example of a RosettaNet XML document that has the correct reference:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE PiP6C1ServiceEntitlementStatusResponse SYSTEM "6C1_MS_D01_00_ServiceEntitlementResponse.dtd">
<PiP6C1ServiceEntitlementStatusResponse>
Because the syntax of the resulting document is correct, the BizTalk RosettaNet parser validates the document without error. However, the trading partner rejects the document because the reference to the DTD is missing.

CAUSE

This problem occurs because the Partner Agreement Wizard cannot populate the DTD value for a PIP definition. Without this information, the Accelerator for RosettaNet cannot determine the correct values for the envelope properties. Therefore, the Partner Agreement Wizard does not set the envelope properties for the outbound channel.

RESOLUTION

To resolve this problem, do one of the following:
  • Change the PIP definition that is stored in the BTSKInstances database to include the correct DTD information, and then run the Partner Agreement Wizard again to create the channels that have the correct element name and DTD name envelope properties. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:

    823198 HOW TO: Import a Custom PIP to the BizTalk Server Accelerator for RosettaNet BTSKInstances Table

    -or-
  • Change the existing outbound channels. Add the correct element name and the correct generated DTD name to the envelope that is used for the outbound channels that are created for each trading partner. You can add this information manually or programmatically.

    Note When you change the existing channels, the PIP template that is stored in the BTSKInstances database is not automatically updated. Therefore, you must also change any channels that are created later (that use the existing PIP) until the PIP template is updated. For additional information, click the following article number to view the article in the Microsoft Knowledge Base:

    823198 HOW TO: Import a Custom PIP to the BizTalk Server Accelerator for RosettaNet BTSKInstances Table

    329082 How to Change or Reset the PIP Templates in the BTSKInstances Database

Change the Outbound Channels Manually

To manually change the envelope properties for the outbound channels, identify the outbound channels that submit documents to the trading partners. Typically, there are three outbound channels for each trading partner relationship: signed out, unsigned out, and failure out. Change each of these channels as follows:
  1. In BizTalk Messaging Manager, right-click the channel, and then click Edit to start the Channel Properties Wizard. Click Next in each dialog box that appears in the Channel Properties Wizard until the Advanced Configuration dialog box appears.
  2. In the Advanced Configuration dialog box, click Advanced to open the Override Messaging Port Defaults dialog box.
  3. In the Override Messaging Port Defaults dialog box, click the Envelope tab, and then click Properties.
  4. Type the following values in the Root Element Name and Generated DTD Name text boxes.

    Note Root Element Name and Generated DTD Name are placeholders. The actual names of these text boxes are the corresponding values for the PIP that you are using.
    • Root Element Name: PIP6C1ServiceEntitlementStatusResponse
    • Generated DTD Name: 6C1_MS_D01_00_ServiceEntitlementResponse.dtd

Change the Outbound Channels Programmatically


To programmatically change the channel envelope properties, identify the channels that submit documents to the trading partners. Typically, there are three outbound channels for each trading partner relationship: signed out, unsigned out, and failure out. Change each of these channels as follows:
  1. In a text editor such as Notepad, paste the following sample code, and then save the file by using a .vbs file name extension.

    Note Before you run this script, make sure that you substitute the correct BizTalk Messaging port name for the LoadPort function. Also, make sure that you substitute the correct channel names for the call to the ConfigureChannel function. You must run the ConfigureChannel function one time for each channel that you want to add the appropriate envelope information for.
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    'This file will automatically generate objects for BizTalk
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    <Package>
    <job id="SetupBTM">
    <?job debug="1" error="1"?>
    <reference object="BizTalk.BizTalkConfig" version="1.0"/>
    <script language="VBScript">
    
    Dim MessagePortHandle
    
    'Get handle to standard message port
    MessagePortHandle = LoadPort("org2 unsigned out")
    
    'config channel
    ConfigureChannel "org1 to org2 unsigned", MessagePortHandle
    
    MsgBox "Complete"
    '
    ' CREATEPORT
    '
    Function LoadPort(strPortName)    
    Dim BTConfig
    Dim Port
    Dim PortHandle
     
    Set BTConfig = CreateObject("BizTalk.BizTalkConfig")
    Set Port = BTConfig.CreatePort
     
    'try and load the port
    'On Error Resume Next
    Port.LoadByName strPortName	
    LoadPort = Port.Handle
    
    Set Port = Nothing
    Set BTConfig = Nothing
    End Function
    
    '
    ' CREATECHANNEL
    '
    Sub ConfigureChannel(strChannelName, lngPortHandle )
    Dim BTConfig
    Dim Channel  
    Dim objDictMapping, ObjDictconfig
    
    Set BTConfig = CreateObject("BizTalk.BizTalkConfig")
    Set Channel = BTConfig.CreateChannel		
    
    'try to load the channel
    Channel.LoadByName strChannelName	
    
    Set objDictMapping = CreateObject("Commerce.Dictionary")
    Set ObjDictconfig  = CreateObject("Commerce.Dictionary")
    	
    objDictMapping.Value("PiP6C1ServiceEntitlementStatusResponse") = "6C1_MS_D01_00_ServiceEntitlementResponse.dtd"
    Set ObjDictconfig.Value("dtd_mapping") = objDictMapping
    
    Channel.SetConfigData 5, lngPortHandle, ObjDictconfig
    Channel.Save
    		
    Set objDictMapping = Nothing
    Set objDictConfig = Nothing
    Set BTConfig = Nothing
    Set Channel = Nothing
    End Sub
         
    </script>
    </job>
    </Package>
  2. Double-click this .vbs file to run it.

STATUS

This behavior is by design.

Modification Type:MajorLast Reviewed:7/10/2003
Keywords:kbprb KB822874 kbAudDeveloper