This content has been marked as final. Show 17 replies
You could set a trace in PeopleCode in the OnNotify Event of the service operation handler.
Trace can be found on the IB application Server
class MyHandler implements PS_PT:Integration:INotificationHandler
method OnNotify(&MSG As Message);
/ *&MSG As Message*/
/* Start Trace PC to trace
Show each statement as it's executed
Show the values fetched for all variables.
Show the results of all assignments made to variables*/
/* Start Trace SQL to trace
SQL statement variables (binds) */
/* your handler code here*/
/* End Trace */
My requirement is to provide the employees to enter there expenses directly from .Net application. So in order to accomplish i have created a WSDL and provided the WSDL to .Net team. When the .Net team tried to consume the WSDL its working perfectly provided if the same employee ID is entered twice with different expense type aslo its throwing up an error saying " Component Interface API. Data being added conflicts with existing data. " . So i need to find where this error occuring and what shall be done to hide it.
The solution provided you were saying about " the OnNotify Event of the service operation handler" . I dont know where to find this . So kindly help me out.
You say you have created a WSDL.
A WSDL is a description of a Web Service. A Web Service has Service Operations. Service Operations have Handler. Handler are written in PeopleCode (most of the cases)
So, how did you create a WSDL if you do not know the Web Service?
Is this a CI based Service?
If so and you are receiving a Component Interface API. Data being added conflicts with existing data then probably the service operation Create is being called with existing keys.
Which operation is being called by the .Net application?
Please provide a bit more detailed information on your 'architecture', so I can help you ...
Edited by: Hakan Biroglu on Dec 17, 2012 11:13 AM
Yeah..its CI based web service. The Create operation is called from .Net with existing Keys created at the WSDL. I am not aware of locating the people code attached with the CI i created for the WSDL. When i tried to access the peoplecode of the CI by right-click on the CI from App Designer its blank and no people code exists. To add more light to the issue, i have taken component " TE_EXPENSE_SHEET2" and created a CI for it with standard methods. And this CI i used to create WS with all service operations enabled i.e create, update, find, etc... I have given the Create method XML generated from the GENERATE SOAP TEMPLATE ---> INVOKE SERVICE OPERATION for the CREATE operation alone. I am not sure whether i can attach the XML here for your refrence if it would be any help in resolving this issue. please let me know if you need any further information ..thanks alot in advance for helping me out
Good morning. I tried creating a Handler for the Service operation but i couldnt able to find OnNotify event in the drop down list. I also searched peoplebooks for setting handlers for the service operation and found using Application Class. I too created an Application class with the example you provided in the previous post. Tell me now where to locate or retrieve the message output?
Do not create a PeopleCode Handler!
I said this before you mentioned you were working on a CI based service.
A CI Based Service has a ComponentInterface as Implementation.
Once you invoke the service the Component Interface method is executed, in your case Create.
Just another this, if you look up the error data being added conflicts with existing data you will get 297 hits on MOS on PeopleSoft.
This occurs when the component buffer of components aren't in sync with the database, usually by incorrect keys or sql injections that effect the buffer.
Since you are creating a CI from a vanilla Component, I would first advice to test the Component Interface from Application Designer.
If this doesn't error then from via the PeopleTools - Integration Broker - Service Utilities - Handler Tester.
First try it with one expense sheet.
Then try to add multiple expense sheets.
It is most likely the keys on the child levels that have not been filled in in the Request.
To summarize it, a difficult one to trace. Even if you turn on trace, this error is not be found in any trace, because it is not PeopleCode that is raising the error, it is core PeopleTools.
Thanks for the reply. I tried testing it from APP Designer and its working fine. The issue is , its creating expense entry for the first time for any Emp ID but if i try to create another expense for the same EMP ID then the error pops up even though the values or expense type is different. very confusing and really strugglin hard to resolve this. if you have any ideas in solving do let me know please. Once again thanks alot for your help
This could also be caused by triggers on the expense sheet component tables
For example see this doc
E-CI/AE: AE program errors out sporadically with "Data being added conflicts err [ID 614716.1]
This document describes this error when a CI is called multiple times from a AE, where a trigger insert another table with a time stamp which is part of the key structure.
The processing of the AE is so fast (or commits all data at the end of the AE) that it causes the triggered table to be inserted with the same time stamp as the previous CI call, which in turn causes a error where the component is in Add mode and rows already exist in the triggered database tables.
You might want to have a look at the triggers of the Expense Sheet records, this might be the cause.
You are trying to add children to an existing parent, so you shouldn't call the Create method message. When adding a new child you should use the Update method instead. You mentioned it yourself; the first time it works, but when calling the method again with the same keys you get an error. This is working as it should. The problem isn't in your WSDL or messaging, you're just calling the wrong service operations. When exposing the CI as a service there should be a set of default CI methods which you can call from an external program. They have the following naming:
I don't know the name of the service, but you should be calling the <service_name>_UP when creating a new child record.
thanks for replyin..I raised an SR with Oracle and they also got back to me sayin this component is not advisable for creating an CI on it. They said its very complicated component and lots of validations happens with it and thats why Oracle didnt provide with delivered CI. They provided some tips for settin trace but that doesnt even solve my issue too. So i dont know whatelse to do with this issue.
Thanks for replying. Actually its not an update process because i am creatin new expense entries for the employees and its not updating an existing expense entry in the database. I would be happy if there is any other solution you can suggest or provide for the same that would help me resolve this issue.