By | 01 April 2013

HTTP Post to PeopleSoft Integration Broker using Python

In this post, I will lay out a simple script that will show how to use Python to post to the PeopleSoft Integration Broker HttpListeningConnector. This will be a trivial example that will hopefully help someone jump start an integration project using python. In the example laid out below:

  • We are using Python 3.3 standard libraries.
  • We are posting to an asynchronous Service operation in PeopleSoft
  • We are not actually doing anything with the data in PeopleSoft other than echo it to an email in-box
  • We are not doing too much error handling in the python script.

The PeopleTools Setup

First let’s setup the PeopleSoft side.

Step 1 – Setup a Node to represent your python program

First we need a node to represent your application. This can be done here: PeopleTools > Integration Broker > Integration Setup > Nodes

Node Attribute Value
Name PTEST
Node Type External
Authentication Option Password
Default User ID PS (or some valid user in your system. )
Password ^secret^ (Note this is NOT the password for any user. This is more like a “key” for the node)
Active Checked

Step 2 – Create a New PeopleSoft Message Object

Now we need a PeopleSoft message object that will represent the XML that the python program will post.

PeopleTools > Integration Broker > Integration Setup > Messages

Message Attribute Value
Name CHG_TEST
Version V1
Type Nonrowset-based

Step 3 – Create a new Service

In this example, we create a new service. You can easily re-use another service if you wish.

PeopleTools > Integration Broker > Integration Setup > Services

Service Attribute Value
Name CHG_TEST

Step 4 – Create the Handler PeopleCode

Now we need to create some PeopleCode that will run when a new message is posted to the integration broker for this Service Operation.

  • First install the dataDumper application class in your database. You can find the dataDumper code here.
  • Create an Application Package and Class with the following Package:Class Naming: CHG_I_TESTER:TESTER
  • Paste in the following code into the Class:
import PS_PT:Integration:INotificationHandler;

import CHG_DEBUG:dataDumper;

class TESTER implements PS_PT:Integration:INotificationHandler
   method OnNotify(&_MSG As Message);
end-class;

method OnNotify
   /+ &_MSG as Message +/
   /+ Extends/implements PS_PT:Integration:INotificationHandler.OnNotify +/
   /* Variable Declaration */

   Local CHG_DEBUG:dataDumper &Z = create CHG_DEBUG:dataDumper("Z.TXT");

   Local XmlDoc &doc;
   &doc = &_MSG.GetXmlDoc();
   &Z.dumpString(&doc.GenXmlString());
   &Z.emailDumpFile("your.name@yourdomain.com");
end-method;

This is some example code that will just take whatever XML was submitted to the integration broker and email that using the DataDumper class.

You will need to change the email address in the emailDumpFile method call.

Step 5 – Setup new Service Operation

Now we need to setup the actual Service Operation. There are several steps here.

PeopleTools > Integration Broker > Integration Setup > Service Operation

Service Operation Attribute Value
Name CHG_TEST
Type Asynchronous – One Way
Version V1
Active Checked
Message Version CHG_TEST.V1
Queue Name IB_EXAMPLES (or create a new queue )
  • Click on the “Service Operation Security” link
    • Input a permission list that you have on your user profile.
    • Additionally, assign permission lists grants to a permission list that is on your “default user id” from your node definition.

Now we need to hook the CHG_I_TESTER:TESTER application class to execute when a service operation is posted. We do this on the Handler tab of the Service Operation.

Service Operation Handler Attribute Value
Handler Name Test
Handler Type On Notify
Implementation Application Class
Description Tester
Package Name CHG_I_TESTER
Path :
Class ID TESTER
Method OnNotify

Now we need to setup the routing to make this node able to send Service Operations.

Service Operation Routing Attribute Value
routing name IN_P_TEST
sender node PTEST
Receiver Node HRMS (whatever your default local node is )
External Alias CHG_TESTER.V1
Active Checked

Now our PeopleTools system should be ready to receive messages from some HTTP client.

Python Script

  • Download the posttopsoft.py python code
  • Replace the following pieces of code for your environment
    • Change the assignment to url with your PeopleTools host.
    • Change any headers['xxx'] assignments to reflect the nodes and other attributes for your installation.

Now call the python script from the command line: python posttopsoft.py

If everything when well you should see some output like this:

status :=>  200
Success
XML was Posted to PeopleSoft
Transaction ID => 7373d6dc-97ee-11e2-98ab-897d0a2926a3

The post just means that the XML made it to the Integration Broker and an “Operation Instance” was created. No code in PeopleSoft has actually fired yet. The Subscription contract still needs to be created and executed by the application. Once the subscription contract executes, you should see an email in the in-box. Generally, this happens almost in real time but any number of factors could impact the code from not firing right away. T

The PeopleSoft integration broker is a “funny bird”. It will return HTTP status 200 (OK) for all sorts of successes and errors. You actually have to parse the response message XML to determine the actual error messages. In the python script I have given, if the response header TransactionID contains a value then we assume that the integration broker accepted the XML and it will be processed whenever. If that header is not present then we assume an error occurred and just dump out the XML. I will leave it as an exercise for the reader to fill in more detailed error handling and response parsing.

We will also note that the example python script just submits an XML document that looks like this:

<?xml version="1.0" ?>
<test>Testing the HTTPListeningConnector.</test>

The XML structure submitted really does not matter as long as the handler PeopleCode knows how to decipher it. The PeopleCode handler could parse the XML and extract data and do any sort of processing like update data via SQL or Component Interface, Schedule a process, or choose to ignore the data all together. Since this is an asynchronous service operation there is no way for the handler code to pass information back to the python script. For that we would have to invoke a synchronous operation which we documented in the Synchronous HTTP Post to PeopleSoft Integration Broker using Python article.

Additional Reading

Do you want to become a CI Expert?

If you want to learn more about developing using Component Interface then check out our CI Training Video.