PeopleSoft Integration with ASP.NET Using CI based(In-Bound) Web Services

My previous posts have been about outbound messages from PeopleSoft (sending a synchronous message from PeopleSoft to Amazon to search for available books, sending a message to Google to get the search results).

Today, I am going to show how to send messages into PeopleSoft using web services over integration broker. Our source page (third party) system page is going to look like this. As you notice, I am using ASP.NET as our third party system. We will call a PeopleSoft exposed web service from the button “Send to PeopleSoft”. When PeopleSoft web service is created based on CI, standard methods (get, find, create, update, update data) are exposed as methods in WSDL. We are going to call the “Create” method of the web service.


This is simple web page in ASP.NET which takes Employee ID, first name and last name as inputs and inserts data into PeopleSoft.

We are going to verify that our integration has worked by verifying the data in the page. I have created a component interface based on this component. This is very simple CI with EMPID as search key.


I have used simple CI with no levels as idea here is the integration between third party systems with PeopleSoft as opposed to CI tutorial.

Prerequisites

  • Working knowledge of the PeopleSoft Component Interface.
  • Integration setup has been completed for the gateway. You can refer to my previous posts on setting up Google web service for complete description.
  • Some knowledge of ASP.NET. I have to admit I am not an expert .NET but a simple Google would provide you with enough information about consuming web service in .NET.
  • (Optional) BPEL working knowledge, since I am not a well versed with the .NET technology I used BPEL to test my initial CI integration. This is optional if you are .NET developer.
  • PeopleTools 8.4 have bug with respect to the CI based integration. So if you are not on the 8.5 PeopleTools you need to
    • Copy file $ORACLE_HOME\j2ee\<component-name>\applications\<application-name>\PSIGW\WEB-INF\lib\xercesImpl.jar to $ORACLE_HOME\j2ee\<component-name>\applib folder
    • Copy file $OAS_HOME\j2ee\<component-name>\applications\<application-name>\PSIGW\WEB-INF\lib\xml-apis.jar to $ORACLE_HOME\j2ee\<component-name>\applib folder
    • Remove the file $ORACLE_HOME\j2ee\<component-name>\applications\<application-name>\PSIGW\WEB-INF\lib\xalan.jar
    • Remove the file $ORACLE_HOME\j2ee\<component-name>\applications\<application-name>\PSIGW\WEB-INF\lib\xerces.jar
    • Remove files xercesImpl.jar & xml-apis.jar from $ORACLE_HOME\j2ee\<component-name>\applications\<application-name>\PSIGW\WEB-INF\lib folder
    • Open file $ORACLE_HOME\j2ee\<component-name>\application-deployments\<application-name>\PSIGW\orion-web.xml and remove the line <web-app-class-loader search-local-classes-first=”true” />.

     

Please Note: This is mandatory step otherwise you will get an error like

“Loader constraints violated when linking org/w3c/dom/NamedNodeMap class”

 

Steps

Here are the steps we are going to follow

  1. Create a custom record, page , component and component interface in PeopleSoft.
  2. Configure CI based web service.
  3. Create WSDL using provide web service wizard.
  4. Create a page in ASP and call our web service from the button.

     

    1. Create a custom record page, component and CI in PeopleSoft.

    Record:MY_EMPL_TBL

     


     

    Page: MY_EMPL_TBL

     


     

     

    Component: MY_EMPL_TBL

     


     

    Component Interface: MY_EMPL_TBL_CI_2

     


     

     

    1. Configure provide web service wizard.

      Navigate to the PeopleTools >Web services> CI-Based services. CI just created. In my case, it is MY_EMPL_TBL_CI.

Before you can actually see CI just created, security needs to be setup. You can setup security for the CI by adding the CI to existing permission list or creating a new permission list.

 



 


 

Select the CI and click on the Review CI status


 

Select all the available actions and click display selected actions


 

Enter Service alias and method alias names, Select all the service actions and click “Perform Selected Actions”.

 


 

After the methods are created, page returns to the review status page.


 

3. Create WSDL using provide web service wizard.

 

Navigate to the PeopleTools>Integration broker>Web services>Provide Web Service. Select the Service name created


 

Click next and select all the methods available


 



 

Click finish and copy the WSDL location generated. In my case it is

 

http://localhost:4040/PSIGW/PeopleSoftServiceListeningConnector/CI_MY_EMPL_TBL_CI_2.1.wsdl

 

Make sure you can open WSDL in any internet browser. If you paste the URL in the address bar you should see WSDL, something like this below. If you get error then some of the configuration steps were not done. Review your gateway configuration.


 

  1. Create a page in ASP and call our web service from the button.

     

    I am using Visual web developer to create the ASP.NET web site.

     

    Create a simple page with three text boxes and button.


     

    Click on the website and click add web reference.


     

    Enter the PeopleSoft WSDL URL generated before and click go. After click go you should get something like this. You can change the web reference name to “MyEmployeeWebService” and click “Add Reference” button.

    .

     

    Import the web service with using

    “using MyEmployeeWebService”

     


     

    Here is the complete code.

    using System;

    using System.Configuration;

    using System.Data;

    using System.Linq;

    using System.Web;

    using System.Web.Security;

    using System.Web.UI;

    using System.Web.UI.HtmlControls;

    using System.Web.UI.WebControls;

    using System.Web.UI.WebControls.WebParts;

    using System.Xml.Linq;

    using MyEmployeeWebService;//This is the name provided during the add web reference in ASP.NET.

     

    public
    partial
    class
    _Default : System.Web.UI.Page

    {


    protected
    void Page_Load(object sender, EventArgs e)

    {

     

    }


    protected
    void Button1_Click(object sender, EventArgs e)

    {


    /*Create the service object.Notice the name of service name is alias we provided during the CI service creation.*/


    MyCreateEmplyoeeRecord emplSrvc= new
    MyCreateEmplyoeeRecord();

     


    /*Create the request object.*/


    Create__CompIntfc__MY_EMPL_TBL_CI_2TypeShape EmplRqst = new
    Create__CompIntfc__MY_EMPL_TBL_CI_2TypeShape();

     


    /*Create Emplid,lastname and firstname objects*/


    EMPLIDTypeShape emplid = new
    EMPLIDTypeShape();


    LAST_NAMETypeShape lastname = new
    LAST_NAMETypeShape();


    FIRST_NAMETypeShape firstname = new
    FIRST_NAMETypeShape();

     


    /*Assign the values from the page to the objects*/

    emplid.Value = EMPL_ID.Text;

    lastname.Value = LAST_NAME.Text;

    firstname.Value = FIRST_NAME.Text;

     


    /*Assign each object to the request object*/

    EmplRqst.EMPLID = emplid;

    EmplRqst.FIRST_NAME = firstname;

    EmplRqst.LAST_NAME = lastname;

     


    /*Create Response object*/


    Create__CompIntfc__MY_EMPL_TBL_CI_2ResponseTypeShape emplResp = new
    Create__CompIntfc__MY_EMPL_TBL_CI_2ResponseTypeShape();

     


    /*call the web service.Notice the name of the method called.This is name of alias we provided in PeopleSoft*/

    emplResp = emplSrvc.EmpCreate(EmplRqst);

    }

    }

    Test the page. Enter the values and click “Send to PeopleSoft” Button.

     


     

    Check if the data is inserted in PeopleSoft


     

    And we have our data entered in ASP


     

    If we want to see the messages coming in, we need to configure the routings to log into the monitor like this


     

    Configure the security to see the messages by clicking ” service security operation”



     

    Enter another transaction and see the messages generated.


     

    Check the web service monitor.


     


     

    Here is the request XML


     

    And here is the response

     


     

    As you can see this is very simple integration setup where data from third party(ASP.NET) can be brought into PeoopleSoft. For this integration to work you either need to be on PeopleTools 8.45 or do the steps mentioned in the prerequisites.

     

    It is important to note that Oracle, in my opinion, is moving towards using extensive CI based integrations for ADF. If that is indeed the case PeopleSoft front end will seize to exist as we know it and ADF will become new PeopleSoft front end. Since most of the business logic in PeopleSoft is in table there will be a number of CIs build over these tables and exposed as web services which can be called from service data object from with in ADF. Given the performance of CI, it will be interesting to see how it will fit into overall Fusion application architecture. But let us see what Oracle will eventually come out with……during Xmas, 2010.

     

     

     

     

Advertisements

38 Comments on “PeopleSoft Integration with ASP.NET Using CI based(In-Bound) Web Services”

  1. Nadaraj says:

    Hi,
    We are trying to implement CI Based Web Services. but in our case, third party system is “JAVA”. We had followed the same steps and i have provided the WSDL to the Third Party. But they got the below error.

    Gateway Unmarshalling: The MimeContent of the message is not a MimeMultipart message as expected.
    Integration Gateway Message Unmarshalling: The MimeContent of the message is not a MimeMultipart message as expected.

    Please help.

    • addsrikanth says:

      Check the message that is being sent from the third party. In your case, you can get this message from errorLog.html.

      This file is usually at http://yourpswebservername:port/PSIGW/errorLog.html
      Check the content type HTTP header element it should be,
      Content-Type: text/xml
      if this is not the case you need ask the third party(Java) to add/update this element. PeopleSoft is complaining about this element being something else(most likely).

  2. Interested Party says:

    Thanks for the great article; very clear and well documented!

    I am concerned with needing to make these changes to the j2ee env.

    How does these changes (the Prerequisites) effect the PeopleSoft installation? According to:

    http://www.ncoaug.org/archives/ncoaug_20070613/MARCH%2012%2007%20PRESENTATIONS/Chemers_Oracle%20BI%20XML%20Publisher%20Installation-John%20Chemers.ppt

    is required for Enteprise IB (xml) publisher to work. Do you know if removing it effects how PS uses IB publisher?

  3. AO says:

    Thanks for the great article.

    Any clue why my alias’s dont show up? I have tried recreating the CI on multiple occasions and then publishing the Web Service with the new CI with no luck.

  4. Palanivel.C says:

    it is very helpful document..thanks

    • Raghava says:

      Hello Sri,

      I have created CI-Based Web services and tested using soapUI tool. everything is working as expected. The only issue have encountered is, get method is pull all effective dated rows for specific department. I have created a sample department page with two level and added multiple rows at scroll level. The get method pulls all rows instead of max effective dated row. Is there any special logic i am missing here? Please advise me.

  5. Timothy Murray says:

    Great Post.

    But it does not go into detail on how you were able to have the return parameter EmployeeID.

    How do I configure PeopleSoft to return values once I call the web service?

    Thanks in Advanced,

    Timothy Murray

  6. Jairo Rey says:

    But, now web service in .net to consume from PeopleSoft…. and response a bit array

  7. Mohamed says:

    Excellent article for starter getting into PS Integration. Rest we learn from Docs.

    thanks,

  8. MN says:

    Thanks for the great article; very clear and well documented!

  9. Varun says:

    Very good document.
    Thanks

  10. Kamesh says:

    Sri

    We have requirement of PS Integration with WebServices with .Net. It is Inbound Sync webservice.

    PS provided the webservice to .Net which they are able to test successfully. But with SSL enables Webservice URL we are not able to test the webservice.

    Can you help us in getting to know steps need to be taken in case of WebServices Integration over on SSL

  11. sriram says:

    Sri,

    I have been asked to take up a project in my current organization. Our HR system is in peoplesoft. During appraisal process due to time out issues and since everyone is busy accessing their performance documents, the system turns to be too slow and is unusable for other tasks.

    Due to this, our management has taken a decision of letting the users, download the appraisal document as a template. Fill it up offline in the respective pc’s and upload it. This process can happen any number of times. My company employees are in US, India, UK, Singapore. Total number of resources who take up appraisal and fill up their objectives in the performance document amount to 10,000. I have thought of various ways to do this but after reading your document on CI as a webservice, i thought why not choose this way. But i have quite a few clarifications on this. Pls let me know if i can get in touch with you regarding this. Would be of great help.

    Thx

    • GSR says:

      Thanks for your article. Your article is superb for learners like me.

      Now I need some information on how to syncgronous from PeopleSoft personal data and Job data to JD Edwards.
      1.Can we do it through personal data CI as well as Job Data CI
      2.or else can we write the Publish peoplecode on both components SavePreChange event to send the message synchronously?
      If we go with SavePreChange peoplecode (2 option), what third party’s job to update into their system like would they need to write subscription code their side?

      If go with 1 option, in this case what third party has to do?

      Please respond back to me asap as it is an urgent requirement.

  12. itban says:

    hi Sri,, million thanks for the wonderfull blog..

    actually I need small help.. there is case where I have to copy a XML file from url or website..say http://wwww.gov/fscm/test.xml.. aftaer copying this file I ahve to transfer this to our own unix server for further processing…I heard we can do this by using integration broker.. but I dont know the web ion..service of the url or website mentioned above..dont know whether it is exposed or not… pls need help for this or who ever is reading my question..

    Itban

  13. Jesus says:

    If I set the service operation to require a Username/Password, then I have a problem.

    To consume the web service from Visual Studio, I use “Add a Web Reference” and provide the URL of the WSDL provided by PeopleSoft. The object created by Visual Studio does not seem to provide a method or property to add “Username/Password”…. That is my problem. I don’t know how to provide that information to the web service and relay them to PeopleSoft.

    Does anyone know how to pass Username/Password to a PeopleSoft web service consumes in Visual Studio using VB. I read that I need to use a Soap Header to pass the credentials to the service but again, I have no clue how to do this and the API provided by the object I instantiated (using the WSDL web reference) does not provide any function for appending Soap Header.

    Any help would be appreciated

    Thanks…

    • Mnelson23 says:

      Jesus, did you ever figured this out? I’m having the same issue as you

    • Joy says:

      It has drives me crazy. I can’t find any document about how to pass Username/Password to a PeopleSoft web service as well. Did you ever figured this out and share with us? I’m having the same issue as you.

  14. PaulQ says:

    Hey All,

    Great article and this really helped me out a lot but I have ran into a problem when I am trying to send the information over to the webservice… It is Failing and the final statement 😦

    **************************
    Client found response content type of ‘text/html’, but expected ‘text/xml’.
    The request failed with the error message:

    SOAP-ENV:ServerserverURL Property is empty. Check integrationgateway.properties file.Integration Broker Response2010733
    –.
    **************************

    I know the last comment was in 2010 but it would mean alot if someone can help

    Cheers

    • addsrikanth says:

      Paul, I think you did not set up the gateway properities. As part of the gateway setup you are required to setup ServerURL

      • PaulQ says:

        Hey…

        Thanks for the reply… I actually figured this out yesterday and was going to respond this morning when I got to work 🙂

        I was getting this error because in our environment we have several instances and we don’t have a default instance selected in the config… I had to add my server name to the WSDL location string that the system generated and user that new string when I generated my web service… I had to also go through my web config and all of the web service files in my ASP.NET project and change the connection strings / schema server locations / ServerserverURL strings and add the instance name to all of the URLs… WSDL string had to change to:

        http://%5BServerName%5D/PSIGW/PeopleSoftServiceListeningConnector/%5B**InstanceName**%5D/%5BCIWebServiceName%5D.wsdl

        I hope this info helps someone else 🙂

        Cheers,
        Paul

  15. PaulQ says:

    My bad… I had to add my Instance name (Not server Name) to the WSDL location string…

    When I was working this out I also ran into another problem… Make sure the anonymous node is setup correctly. Also you have to make sure the user that is set up on that node is an active user…

    Cheers,
    Paul

  16. praveen says:

    Hi All,

    When I am trying to consume the peoplesoft CI based web service in .net application. I am getting below error reported in PeopleSoft –
    “Record names must be in pairs to perform a CopyRowset”

    Please let me know if you have any solution for it.

  17. Swati says:

    Hello Srikanth,

    We are trying to call people soft WS from DOt net Client. We created proxy class from .WSDL file.
    Moment we try to access the update method it gives us error “Unable to automatically step in to server. Connection to server failed. Bad User Name and Password”
    “Client found response content type of ‘text/plain; charset=UTF-8’, but expected ‘text/xml’.”

    Is it beacuse we don’t have acces to server?
    Is it because we don’t have access to particular Web service?
    Is it because we don’t have access to CI?
    or any code error?

    Please see the below code. Will highly appreciate your help.

    Namespace PeopleSoftConsoleApplication
    {
    class Program
    {
    static void Main(string[] args)
    {

    N_CI_NEXTGEN_PERS_DATAService ns = new N_CI_NEXTGEN_PERS_DATAService();

    N_CI_NEXTGEN_PERS_DATATypeShape n = new N_CI_NEXTGEN_PERS_DATATypeShape();

    SecurityTypeShape sec = new SecurityTypeShape();

    UsernameTokenTypeShape ut = new UsernameTokenTypeShape();

    UsernameTypeShape u = new UsernameTypeShape();
    u.Value = “NEXGEN”;

    PasswordTypeShape p = new PasswordTypeShape();
    p.Value = “NEXGEN”;

    ut.Username = u;
    ut.Password = p;

    sec.UsernameToken = ut;
    ns.Security = sec;

    EMPLIDTypeShape empid = new EMPLIDTypeShape();
    empid.Value = “1304329”;
    n.EMPLID = empid;

    Update__CompIntfc__N_CI_NEXTGEN_PERS_DATAResponseTypeShape up = new Update__CompIntfc__N_CI_NEXTGEN_PERS_DATAResponseTypeShape();

    Update__CompIntfc__N_CI_NEXTGEN_PERS_DATATypeShape uc = new Update__CompIntfc__N_CI_NEXTGEN_PERS_DATATypeShape();
    uc.EMPLID = empid;

    up = ns.Update__CompIntfc__N_CI_NEXTGEN_PERS_DATA(uc);

    }
    }
    }

    • addsrikanth says:

      You should check your connector properties. One of the properties in the HTTP header need to be changed from text/plain to text/xml.

  18. Arvindh says:

    hi Srikanth,

    Not sure if your would view this post.
    i have done a similar approach to create a CI BASED WEB SERVICE.
    When i add the web reference in visual studio it throws an error that ,

    ‘THE DOCUMENT WAS UNDERSTOOD. but it could not be processed’
    -the wsdl document contains links that could not be resolved.

    Can u help me with this??

  19. Pankaj Chandak says:

    wow.. great.. can anyone worked with JDE/DB2 database with ASP.net.
    please…

  20. PS says:

    Hello,
    I am not a ASP pro, i could understand till ASP page creating, can you please elaborate the steps and event name where we have to paste your code, Thanks in advance, your help is greatly appreciated.

  21. Elder says:

    Hi ;

    How can peoplesoft pass a response to a transaction back to the 3rd party app?
    for example, 3rd party app inserts a row in a peoplesoft table, so the seq_num go up by 1, so now as a response to this insert action, I would like to 1- que ry the max seq_num in ps-no problem, say it is now 3.
    so now I would like to send the value 3 as a response to this insert?
    i am not sure if i am making myself clear

  22. Elder says:

    the above situation is a situation where a 3rd party is sending punch times ( ins,outs)to peoplesoft TL,
    so for today it send time in so seq_num is 1, i need to sedn seq_num =1 to 3 rd party
    then someone come online and enter a row for this ee, so seq_num is now 2
    then 3rd party sends another in or out time so now i need to send seq_num=3
    so every tm e the 3rd party sends a message/a row in ps, I need to tell it the new updated seq_num

    thans for your help

    p.s. the system is already in place and working, except that the remote system does not know what the sequence number in the peoplesoft table is, I just need to sedn that nimber as a response

    thc

  23. Kiwi says:

    Hi Sri,

    I need a small clarification on Message Timeout during Inbound Sync Call to PS System.

    We received an inbound message from a third party and the message went on processing due to some DB deadlocks. The response was never returned to this original message. Then in 5 minutes time we did receive the same message with a different Transaction Id. Third party confirmed that they never sent the second message. The second message was successfully processed and returned a response to third party. Third party confirmed that they got the message response to the original message only after 5 minutes. I have the following questions:

    1> Is the message service restarted and the message is resent based on the server timeout settings specified in the configuration file?
    2> I know a way to over ride the message timeout in outbound calls from PS, but how do we over-ride in case of handling Inbound messages (both sync and async)?
    3> Can we suppress the second message being sent to PS system in case of message timeout?
    4> Which server governs this timeout?

    Thanks

  24. khaja shaik says:

    Hi srinath,

    we created CI based webserivce,while testing create method in SOAP UI with correct data its returning value ‘1’ in SOAP notification.

    but while performing with incorrect values its returning following error

    SOAP-ENV:Server
    Component Interface API.

    Integration Broker Response
    20
    180
    118
    Overlap with an existing absence has been detected. (1000,361)

    XXXXX

    we are consuming the service from PeopleSoft to dot net.our dot net resource is consuming only .But they have to capture the .
    how can we achieve this

    Thanks in advance
    khaja


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s