Component Interface

We are considering using PeopleSofts component interface to write a java
front end to some of the primary HR functions such as Hire Employee, Job
Changes etc. Has anyone used the Component Interface for something like
this? My concerns are that the CI is new with 8 and I suspect that not many
people are using it. I'd like to know if anyone is using it and if so what
their experiences have been. Given that we would like to use it to front
end some of the more complex pages in PeopleSoft we must have confidence
that it will perform as if the user entered the data directly into the page.

Popular White Paper On This Topic

I started using it today and I found it to be very easy to use. In one day
I created a Component Interface to read a flat file and enter users into the
PeopleSoft Portal database using the User Profile Component. We used VB as
that is our native language outside of the PeopleSoft realm. If you feel
comfortable with Java it shouldn't be a problem.

We have played around with it as well. We wrote some
ASP code that gets data from PSFT as well as some JSP
code that does the same thing. It is a straight
forward environment for any object oriented program.
What's nice about it is that all your business logic,
events, workflow,security is all enforced through CI
so you don't have to maintain multiple environments.
Just make the business level changes in 1 place.

Brent,
Can you let me know what version of PeopleTools was used. For when tried
with People 8.12 to intgerate PeopleSoft 8.0 using Java we failed
miserable, I would interested in knowing the design you used and the if you
do not mind a copy of the code for an ened to end transaction. Where you
able to update PeopleSoft dayabase using the JSP.

Does better examples and documentation exist for the "Component Interface"
besides the sparse documentation in PeopleBooks? Is there a good book that
covers the "Component Interface" out there? Is there a good document on the
Customer Connection site?

I am looking for a few friends who may be doing the same work I have been
for the past week. I am developing a component interface that accesses the
Purchase Order component in version 8.00, Service pack 2, tools 8.15. I am
populating the component interface with data from an incoming message. I
have created the message definition as four levels including po_hdr,
po_line, po_line_ship, and po_line_distrib. I am now involved in writing
the peoplecode to populate the component interface.

Has anyone done this sucessfully out there? If so could you please contact
me as I would love to compare notes. I have a lot of business requirements
that are to be followed outside of the normal (%editpromttable and
%edittranslate). I'd like to get a more streamlined approach to retrieving
a row from the message data, qualifying that data, then inserting that into
the component based on the PSCAMA action.

I guess the first thing to say about Component Interface is that you're not
doing inserts, updates, deletes, etc. These are SQL commands, and you could
execute these by connecting directly to the database without bothering with CI.
With CI, you're actually interacting programatically with the pages within a
component...for instance, some of the API methods are find() and save(). To
retrieve information you'd use a method like getXxx() (Xxx corresponds to the
name of a field on a page) and to save information you'll use setXxx(value) and
save(). Then it's just as if you were online entering data into a page - all
(well, almost all) the PeopleCode fires, all the edits execute, etc.

I've done some research on Component Interface. Using CI in PeopleCode is fine,
but using the external API (which you're talking about) is troublesome - the
APIs in tools 8.17 for both Java and COM are buggy. I had envisioned great
things for our self service apps using CI Java API, but it's just not
production-ready yet. I haven't used the C API, so I can't speak to its
stability.

Some of the problems I had in Java were
- Data cannot be obtained from Grid controls (!!!)
- There are coding mistakes in the API classes that cause exceptions
- Servlets/JSPs written with the Java API would eventually crash WebLogic,
though I never traced this specifically to the API.

A colleague has been working with the COM API - some of the problems he had with
it were:
- There's some kind of problem with the way the library is declared...is it
PeopleSoft_PeopleSoft or just PeopleSoft?
- We have yet to work past an instantiation problem that has cripped
efforts in the ASP area.
I will say that we got a COM version of the external API working in the
PeopleSoft University Integration Tools class (rel 8.12).

If you're going to use Component Interface, I would recommend the Integration
Tools class. It also covers business interlinks, application messaging, and a
little application engine.

You need to add the new fields to the component
interface. Email templates prompt on CI's rather than
the record directly so you can grab any piece of data
across the entire case, such as notes, etc... which
are not necessarily in the base case table.

Good luck!

in reply to:

Hi,

I am trying to figure out how to include a field in an
email template. The
template is Send Selected Notes for RC_CASE_SW. When
I add a new token,
number it, select the primary record as RC_CASE, I
can't find a field that
exists in the record. I have checked the record
(derived) in tools and the
field exists, but it doesn't show in the drop down of
available fields.

Hi karen,
Its pretty much simple. Just create a new Component Interface Object
in the application Designer, then select Component for which you want to
develop a interface.
You will also be provided with an option to go with all the
PeopleCode in the component or without any peoplecode.
Then you can remove the unwanted fields from the interface and save
it. Thatz it!!

I am building an App Engine program to enter in company data from a csv
through a component interface (RDFCOMPANY_2_CI). After moving the company
name to the company field and moving data to a level 1 scroll, code is
executed to move the company name into the toolbar window. However, the
error I am receiving is a change error on the company field because the
component variable &oToolbar is NULL. I am looking for any suggestions on
how to get the Component Object &oToolbar instantiated so that the code can
execute the objects method.

We have just upgraded to PT 8.19.09. After doing so one of our App Engines
that uses Component Interface bombs. It is a delivered process- but as
delivered it actually never ran so we have had to customize a bit. However
we have not touched the CI part of the process.

Last week I posted a question because it looked as though it could not find
the keys. Since then we have made a slight update to the process to make
sure that the keys are committed to the record behind the CI before the CI
is called. Unfortunately the get() still fails. From what I can tell it is
failing on the empl_rcd. Below is the code where we assign the values. We
have put in writelines to see what values are getting populated before it
does the get() and though the first writeline for the empl_rcd (the one
writing the value in the state record) writes a 0- the next writeline for
empl_rcd - the one printing the &CI.EMPL_RCD - writes 'False'

If FGHR004A_AET.PROCESS = "W" Then
/* Calling program is for probation notifications */

We have built the API's in App Designer but have not done anything on any of
the servers. From reading PeopleBooks it says that when using PeopleCode to
implement the CI- you do not and they do not recommend building an API. In
the past we have never done anything in particular to configure the API's
for the servers. Though most people are recommending that we build the
API's - it is hard for me to sell that to our UNIX guy who has been the one
responsible for all of our installs in the past.

By recreating manually - do you mean by deleting in App Designer and
recreating. We have done that many times and that has not worked. If you
don't mean by App Designer can you give me more details. This is really my
first run in with Component Interface - so I am learning as I go.

Hi All,
am facing a unique problem with respect to Component Interface.InCRM 8.4 i have created a Component Interface based on the existing BO
Componet(OOTB) and tried to use this CI to create a new BO Record.After
creating the componet i have set the values for the level 0 fields but when
i tried to access the level 1 to assign the values it throws an error like
" the first operand of . is not an object.." while saving the Componet.

What I observed is before setting the level 1 values
need to save the component interface and then again u
have to get the level 0 object and then u can get the
level 1 object .. I know this seems weird … Even I am
trying for a right implementation…. Let me know if you
get any other solution

Can anybody send me the sample code of enterning new data into multilevel componnet(means scrolls) using component interface , like in HCM we are having CI_PERSONAL_DATA... i am not getting how to insert rows into componet using CI which is having scrolls. i am able to retrieve data from Component....

otherwise tell me where i have to make changes in the code ...

here i am giving the sample code(i took one example) pls give me any suggettions ...
this is a simple example of Company (which contains Company details at 0th level , and business unit details at 1st level , dept details at 2nd level and emp details at 3rd level) ... pls sugeest me changes in this code to enter new data into component....

/* =3D=3D=3D>

This is a dynamically generated PeopleCode template to be used only as a helper

to the application developer.

You need to replace all references to '[*]' OR default values with references to

I will be happy to help once you've made the attempt
yourself. I've done this both for entering Contracts
and Pending Items. It is not that complicated, but you
will learn alot more by attempting it yourself and
doing some research - including auto-generated code in
your e-mail is not quite enough!

You first need to get one row of data to save
correctly, so remove the <*> from your code and get
the component to save. Then you can look at Inserting
multiple rows.

Remember the CI is just a representation of the
component. You need to understand the data structure
of the component to know at what level the insert
needs to happen. Using the CI tester is a big help
too.

Thanks for u r reply , i have done single level insertions and i know how
to insert the rows in scrolls using collections and insertitem, item methods
we can insert delete thje rows in scroll level . but in my case i want to
upload the data from CI using file layout. i am not getting how to
defrentiate the rows in the flat file while inserting..... pls give reply as
soon as posible.......

There could be a mistake in the way i tried to asess your problem=2E=2E=2E

But in case its very urgent for you and if you are totally stuck, then why dont you try use an app engine program to get all the data in the file into a staging table(I guess the records in the file are all of fixed length)and then from the staging table to the database through your Component interface=2E

Obviously the data structure of the staging table you create would match exactly as the file layout data structure=2E

Also the staging table could have a column called status and then a key filed called batch id and then as soon as the data is read from the staging table, through rowset class methods just place it in the compontnt interface and save=2E

Every time you get the record from staging table, update the column status as "DONE" so that it is not read again=2E

I hope this would work and you should be able to get the task done=2E

Hope i have addressed your problem right=2E=2E=2E=2E
All the best, friend!!

U can put multiple values also.For ex,a student can apply for more than 1
course

First u need to make record objects for each record.Here 3.
Similarly make array of records for each record
In the CI code,u first read each row into each record object.
Here each field value from the flat file goes to the coresponding record
object.
Then push those record object values into the corresponding array of
records.
Repeat this process for each multiple rows.So whenever each multiple row for
a student gets inserted into the array,call the CI & insert the array values
into the CI & save it.

U have to initialize the arrays after this..

This logic is a bit complex but works well...Refer peoplebooks before doing
it..

My question is how to write peoplecode to insert new rows to the system by using component interface. I wrote this which succeffully loaded data to the citizenship compnent in HCM:
/***************************************/
rem ***** Get the Component Interface *****;
&oBgIdentificatnData = &oSession.GetCompIntfc(CompIntfc.BG_IDENTIFICATN_DA TA);
If &oBgIdentificatnData = Null Then
errorHandler();
throw CreateException(0, 0, "GetCompIntfc failed");
End-If;

rem &oCitizenPssprtCollection = &oCitizenshipCollection.citizen_pssprt;
&count = &oCitizenshipCollection.count;
&item = &oCitizenshipCollection.insertitem(&count);
&item.COUNTRY = "ARG";
&oCitizenPssprtCollection = &item.citizen_pssprt;
&itempass = &oCitizenPssprtCollection.InsertItem(&oCitizenPsspr tCollection.Count);
&itempass.passport_nbr = "0123456789";
/********************************************/
But when I used the same logic to another component, one of which page has three levels, level 1 is a view. It bombed.

Can someone tell me how to modify the above code for the component with a view?

My question is how to write peoplecode to insert new rows to the system by using component interface. I wrote this which succeffully loaded data to the citizenship compnent in HCM(all three levels are sql tables, not views):
/***************************************/
rem ***** Get the Component Interface *****;
&oBgIdentificatnData = &oSession.GetCompIntfc(CompIntfc.BG_IDENTIFICATN_DA TA);
If &oBgIdentificatnData = Null Then
errorHandler();
throw CreateException(0, 0, "GetCompIntfc failed");
End-If;

rem &oCitizenPssprtCollection = &oCitizenshipCollection.citizen_pssprt;
&count = &oCitizenshipCollection.count;
&item = &oCitizenshipCollection.insertitem(&count);
&item.COUNTRY = "ARG";
&oCitizenPssprtCollection = &item.citizen_pssprt;
&itempass = &oCitizenPssprtCollection.InsertItem(&oCitizenPsspr tCollection.Count);
&itempass.passport_nbr = "0123456789";
/********************************************/
But when I used the same logic to another component, one of which page has three levels, level 1 is a VIEW. It bombed.

Can someone tell me how to modify the above code for the component with a view?

I'm writing Peplecode to manage a CI of component INV_ITEM_UOM and have
one question:

In Level one of component there is a button (Select All) thats has a
Peplecode in FieldChange Event thats by user click automatically inserts
3 UOM types on Level two. In PeopleCode I assign value "Y" to
ALL_UOM_TYPE field thats is in INV_ITEM_UM_WRK Record but an error is
generated: This is an invalid property
{CL_MIG_UOM_CI.INV_ITEM_UOM(1).ALL_UOM_TYPE} (91,15). I try using
CL_MIG_UOM_CI.INV_ITEM_UM_WRK but results on another error.

Yes, you need to add manually.
If you are not sure how to add -> you need to grad and drop that particular field from Component view to Component Interface view. It will automatically be aligned at the proper level.

The JoltMessageBundle.properties file is present in the jolt.jar and the jolt.jar is present in th classpath of the servlet webarch.util.WebArchUtilServlet. The web server that i am using is I-Planet 4.1 along with Tuxedo 6.5 with jolt 1.2

I have newly installed the web server on a new Solaris 5.8 machine and moved all the jars from existing setup (which is working properly). The error appears when i instantiate JoltSessionAttributes for the first time in my code.

We are installing HRMS 8.9 with PeopleTools 8.48.02. I would
like to manage a component interface base on component JOB_DATA
from a VB application. I'm quite new with CI so I would like to
use pscitester for get to know how it works. I'm using Visual
Studio 2005 for developping my VB program. Does any of you
have a working example of PSCITESTER that would work in Visual
Studio 2005

VS2005 should prompt you to convert the VB6 to a VB.NET project. It is
wizard-based and the PSCITESTER program is pretty simple, so the process
should be fairly smooth. Not much more than clicking 'Next'.

Also, assuming your environment for API development is setup per
PeopleBooks
(that is, the COM components generated by PeopleTools are registered on
the
machine) VS 2005 should automatically generate .NET wrappers for the
PeopleSoft COM components since they are referenced in the project.

Thanks for your advice... Here are some more explanation about my
problem. First, pscitester is not provide with tools 8.48. I
though hey! No problems... I copied the VB project provided with
tools 8.22 (which is another version we are using)... I copied
the files over to my server and tried to open the pscitester
project in VS 2005. VS 2005 does exactly what you are
describing. The only problem I have is that inside te project
there is a reference to another version of Peoplesoft COM object
and the project does not get converted to VS 2005. I want to
use the object generated from 8.48... How should I go about to
change the reference inside the project so that it convert
properly to VS 2005?

Try opening the VBP file with a text editor to remove the reference
(assuming you don't have a copy of VB6.)

Near the top there will be lines starting with "Reference=" which are
listings of the referenced libraries. The GUID will come first but at
the end there is the description so you can tell which is which. Remove
the PeopleSoft_PeopleSoft.tlb one.

I don't know if the project will convert if it doesn't compile, but I
think there's a fighting chance. If it won't, you'll have to find the
GUID of the PT 8.48 COM bindings and put it in that Reference= line,
along with updating the path.

I have a component in HCM , where if I save any record that record
should get inserted in Finance also. Thing is both the Domain are in
diff servers.
I have tried by creating a interface on Fin Component and copied that
code under HCM component save edit event.

After that I have added the CI in Permission List(FIN) ........

Thing is when try to save the record in HCM ... instead of saving the
same record in FIN .. it's saying like 'NOT AUTHORIZED' , even after
adding the CI to a permission list.

What is the issue ,... I am not getting that ...

Do we need to copy the whole CI in HCM also ?

Thanks
Sharath

**************** CAUTION - Disclaimer *****************
This e-mail contains PRIVILEGED AND CONFIDENTIAL INFORMATION intended
solely for the use of the addressee(s). If you are not the intended
recipient, please notify the sender by e-mail and delete the original
message. Further, you are not to copy, disclose, or distribute this e-mail
or its contents to any other person and any such actions are unlawful.
This e-mail may contain viruses. Infosys has taken every reasonable
precaution to minimize this risk, but is not liable for any damage you may
sustain as a result of any virus in this e-mail. You should carry out your
own virus checks before opening the e-mail or attachment. Infosys reserves
the right to monitor and review the content of all messages sent to or
from this e-mail address. Messages sent to or from this e-mail address may
be stored on the Infosys e-mail system.
***INFOSYS******** End of Disclaimer ********INFOSYS***

Now I am not getting the previous error 'Not Authorized"
Now my code is able to connect to another server , but the thing is not
able to get the Component Interface...
While executing the GetComponentInterface() method , I am getting a
error like ' First operand of the object is Null. '

It seems to be my code is not able to initialize the session object...

Sharath,
With due respects the objective of the CI is to validate the component
of that particular server. So it is very much server oriented. For the
specifications on what you are trying, you can have it achieved by using
the IB.

We are in the process of integrating an external java system with
PeopleSoft. Basically the java system will create new row of
data in the PS database.

As per my knowledge, I feel that I can go for any one of the
following two methods:

1) Using programming CI in Java - Creating APIs and use it in
java.

2) Using SOAP and Webservices - Publishing the Component
Interface over the EIP and the SOAPTOCI message parse the SOAP
msg and insert data into PS database.

I would like to know which is the best method to use. What is the
advantages and disadvantages of using these methods?

Also I have the following doubts to be clarified:

1) If I use Programming CI in java method, and if the java
application is running in different server other than the PS
application server, how does the java program which is calling
the CI identify the application server? Is it by server name &
port in the java template generated?

2) If I use SOAP and Webservices(Publishing CI over EIP method
but not Application messaging), what are all the steps do I need
to follow including the debuggine and message monitoring?

I would go for method 2 in this SOA world. It all depends upon
whether the service you expose from PeopleSoft, is going to be
utilized by just your application or several other
applications.

Method 1 would tightly couple Java App and PeopleSoft app, means
it for some reason PeopleSoft server information changes or the
business logic changes on CI, you would need to recompile java
program on your java side. Yes, java application would talk via
the application server, but remember you have to have psjoa.jar
in you JVM path.

For method 2, you just need to enable SOAPTOCI message, generate
a SOAP template and start calling service operations.

We are currently using 8.45.14 PelpleTool version. Can you please
send me the IB configuration and other steps to configure the
Webservice & SOAP?

Also I would like to know, If I use CI APIs in Java, is there any
performance degradation if no of users are more? Each time it
will create a app server session to connect to the CI and
because of that is there any impact on JVM side also? I am not
very familiar with this and the question may not make sense
too.

I haven't use the SOAP stuff, so i am only speaking to the CI
part. SOAP is a lot more complicated to setup/debug/maintain,
but i beleive there are vast performace improvements and
stability gained with using it. CI API works, and can work well,
just can get bogged down.

I would like to send back some information to an java external system after updating the data into PS database using Webservice and SOAP. Do I need to configure another node for this and associate the node to SOAPTOCI?

2.After clicking “Generate a Java Template”, is it necessary to
place the generated Java file into
<PSHOME>\WEB\Psjao\PeopleSoft\Generated\CompIntf c from
C:\Documents & Settings\Locals\Temp\Filename.java?

3.While compiling the “Filename.java” file from
<PSHOME>\WEB\Psjao\PeopleSoft\Generated\CompIntf c after copying
it from C:\Documents & Settings\Locals\Temp\Filename.java, it
shows an error says Class IFilename_CI doesn’t exists, in which
the same file already exists?

4.Which java files need to be compile from
<PSHOME>\WEB\Psjao\PeopleSoft\Generated\CompIntf c after Java
Template get generated?

I had created a CI, which worked correctly. But the underlying
Component Structure was changed by adding a new field to the
component. Now on execution the CI gives and error saying that a
"record.field" is invalid (it refers to the newly added field) I
have tried deleting and recreating the CI, but the problem
persists, any solutions would be appreciated.

A new field was added to a component recently. But a CI which uses this component as a source component, fails giving the following error message:
"Unknown field REASON for property REASON (91,63)" (REASON field was recently added)

I mad sure to add the reason field to CI object, I also tried deleting the existing CI object and recreating the CI object.But the error keeps reappearing.

Yes there is but it is lengthy. First of all make sure you do a commit
after each record this is not added in the CI. Then what you want to do
is find some of the junk you don't need and code around by adding if CI
ci_name skip the stuff you don't need like different country codes ect etc

You really can't tune a CI, except for any custom methods. It's simply a list of fields in a component exposed to a calling process.

Performance all depends on the component - how many records are in it, scroll levels, peoplecode, etc.

I've done several App Engines which calls CIs, and my results vary, one-page components with little processing have CIs processed in the hundreds per second, while complex components sometimes take about 2 seconds each to update via CI.

I am on tools 8.49.08. I am trying to integrate some Peoplesoft functionality into a third party web portal product. I built a Component Interface for a delivered component (SS_CC_EMERG_CNTCT) from Campus Solutions. This has one level-1 scroll on it that contains the list of a students emergency contacts. Next, I generated a CI based webservice for it. This created 5 different messages: Create, Find, Get, UodateData, and UPdate. I got all the permissions right and setup the IB node as well. I used soapUI to test the webservice (this just parses the WSDL and allows me to send the SOAP requests and see the responses). I can call Get and Find in this fashion and get the data back in a SOAP Response. I have also been able to call the Create (I tested on other CIs such as URL - creates a level 0 record). Now I am trying to delete and add records to this level-1 scroll. I can use CI Tester, right click the scroll and call DeleteItem and InsertItem successfully. My question is this: How do I call these methods (InsertItem & DeleteItem) from the Webservices SOAP request? Can this even be done? Ultimately, I want to be able to manipulate this data (add, delete, modify) for this Component as well as several others.

Hi, im having some troubles testing a component interface.
Im' trying to update some field, but wen i execute the SAVE event y returns me an error that says "Insuficient Memory" and i tried doing it from an Excel to CI but returns the same error message.
Any suggestions?
Thanks ind advance.
Im Using Peopletools 8.48 for campus solutions

Unexpected exception in CApiObjectAdapterObjRef::GetProperty for
GVT_60_DAY_REV.EMPL_RCD (-1,-1)
and
&CI.EMPL_RCD - writes 'False'
=>
this was because there was mismatch with the datatype for EmplRCD.
please check with the customizations done in the CI.
because False value is assigned to Empl_RCD which terminates the process amid of its completion with succeding rows.

Hi, we have created Component interface on component 'X'. Now the structure of component 'X' has been changed.So my program is thrwoing an error.How to synchronise the component with CI?Is there any automatic process or do we need to do it manually?

Copyright 1998-2015 Ziff Davis, LLC (Toolbox.com). All rights reserved. All product names are trademarks of their respective companies. Toolbox.com is not
affiliated with or endorsed by any company listed at this site.