‘File-Export” ..why not ‘Report - Export’

Many of EBS users take advantage of the ‘File-Export’ functionality. This functionality was specifically designed for use on ‘Folder’ forms so users could export the data displayed on the screen to Excel. This is one of the option that allows users to export information from a row based data set into a desktop file so that [...]

‘File-Export” ..why not ‘Report - Export’

Many of EBS users take advantage of the ‘File-Export’ functionality. This functionality was specifically designed for use on ‘Folder’ forms so users could export the data displayed on the screen to Excel. This is one of the option that allows users to export information from a row based data set into a desktop file so that [...]

Another Nano 9s - This time on Inventory Fundamentals






As the OCP blog survey results indicate, three out of every four readers of this blog are preparing or intended to prepare for EBS R12 beta exams.




For 11i OCP SCM track and R12 Supply Chain Expert track one has to take the following exams: 1Z0-221 Oracle Inventory Management 11i Fundamentals, 1Z0-225 Oracle EBS R12: Inventory and Purchasing Fundamentals, 1Z0-226 Oracle EBS R12: Inventory and Order Management Fundamentals. This set of Nano 9s is based on Inventory Fundamentals that are part of the above exams.


Before you click on the Nano9s link and submit another entry for the exclusive OCP blog t-shirt, let's discuss a few minutes on the differences between the 11i Inventory Fundamentals exams (1Z0-221) and its R12 avatars - 1Z0-225 and 1Z0-226. The R12 exams consist of two modules: Inventory+Purchasing or Inventory+Order Management.


The exam content for the Inventory Fundamentals section is mostly the same for R12 and R11i exams. There are minor changes in the exam topic names - '11i Receipt to Issue Overview' and '11i Defining Inventory Organizations' for the R11i exam is 'Overview of Oracle Inventory' and 'Inventory Structure' respectively for the R12 exam. Some R12 topics are now independent topics like 'Unit of Measure' (R12) and '11i Inventory Controls' is split up in the R12 exam content as 'Lot and Serial Control' and 'Material Status Control'. R12 exam content also mentions the topic of 'Table Information' where one needs to identify the Oracle Inventory tables (for this eTRM is the reference of choice)

Please enjoy the Nano 9s on Oracle Inventory Fundamentals while sipping your hot cup of java and also enter for a chance to win the OCP Blog T-shirt to a lucky winner with all correct answers.


Please click here for the direct link to Nano 9s: http://www.zoomerang.com/Survey/?p=WEB227ZVJBVEYK

The right people on the bus

Meg Bear | Jul 8, 2008 23:10 -0600

I’ve gushed before about how lucky I am and what a great team we have.  As someone who puts a lot of herself into her work, a great team is a big part of my own personal engagement

In the past few weeks I’ve been thinking about great teams I have worked with in the past.  Specifically those people who I would rehire if ever an opportunity were to arise.

In most cases my interest in rehiring someone is not as much about the current job opening, it is usually more about them being the right people to have on the bus.  So, what makes someone right for my particular bus? 

Been thinking about that too and here is what I’ve decided

  • People who solve problems – you give them a problem and they find a way to solve it.  Sure they ask for help, clarification, etc. but they will wrestle the problem to the ground.  You are never exactly sure why they are able to solve the problems they do, but there are some people who get stuck easily and there are others who find a way through.  It’s those who consistently get out the other side that I want back on my bus.

  • People who Lack ego– ok, this is not really true.   It’s not the lack of ego, it’s the ability to have an ego that does not require others to be lessened.  Inclusive egos.  People who see their accomplishments and achievements as better for the sharing, get those people on my bus.

  • Smart - yes, I admit it.  I have a strong bias toward people who are smarter then me.  Those who I have worked with in the past who have helped me learn, I want them around, preferably close to hand because I tend to have a lot of questions.

  • People who follow through - I am very much a “fire and forget” kind of girl.  People who are comfortable completing action items without reminders are absolutely people I want in my life.  I am a very competent nag, but boy is life better when you don’t have to exercise that skill.  If getting work from you is a lot of work for me, odds are I’m lukewarm about having you back on the bus.

  • Fun/Funny - I just can’t be serious for too long.  People who appreciate my own “special” sense of humor, who can tolerate my love of profanity.  People who do not take themselves too seriously.  Get them on my bus, you never know when you might need a party-bus.

Anyway, this is the list for my bus.  What about you?  What traits have the best people you worked with had?  What about them makes you wake up at night saying “I could totally solve that problem at work if only I had XXX back on my team“?

Where do I get the XML file or request output file for my BI Publisher Report / Concurrent Request?

Gareth | Jul 8, 2008 19:10 -0600

A quick post ... it's been a frenetic few months, so blog posts a bit thin lately but plenty of good stuff in the pipeline!

Generally when I'm designing a BI Publisher/XML Publisher report I'll create a concurrent program that generates XML, I'll follow the usual steps:

  1. Setup the concurrent program to output Text
  2. Run it to ensure its working
  3. Switch the concurrent program to output XML
  4. Run the concurrent program to output XML
  5. SFTP/copy the o*.out XML file from $APPLCSF/$APPLOUT
  6. Load it into Word via the BI Publisher Desktop plugin and design the layout "on the run".
  7. Setup the BI Publisher Data Definition/Template
  8. Perform system/unit tests

Is there an easier way to get the XML file from a concurrent request? Sure is - nice and easy through the front end.

Get the XML File from a BI Publisher based concurrent request/report:

  1. View->Requests
  2. Find the request you're interested in
  3. Click on Diagnostics button
  4. Click the View XML
  5. Save the file to your PC by doing File->Save As, *.xml

But where does the XML file live?

Well, by default it is $APPLCSF/$APPLOUT/o{REQUEST_ID}.out.

But if that's the XML file, then where does the actual output file reside as the location of the XML file is where normal request output resides?

Get the Request Output File for a BI Publisher based concurrent request/report:

The output is $APPLCSF/$APPLOUT/{REPORTNAME}_{REQUEST_ID}_{COUNT}.PDF|RTF|EXCEL|HTML

Where

  • REPORTNAME is the concurrent program short name,
  • REQUEST_ID is the concurrent request ID
  • COUNT is a counter based on the number of times a request has been re-published.
  • One of PDF, RTF, EXCEL, HTML is the file extension/type dependent on the output formats chosen.

An example is: XXXX_FNDSCURS_2803880_1.EXCEL

Output file location courtesy of Tim's post here.

Cool, file locations identified!

 

StarOffice 8 and E-Business Suite

Vikram Das | Jul 8, 2008 17:10 -0600
We are currently evaluating whether Microsoft Office can be replaced with StarOffice 8. For this one of the steps is to define how E-Business Suite will be affected. The first thing which comes to mind is export to excel functionality. E-Business Suite has this functionality in XML publisher, Discoverer and Web ADI. I have logged an SR to find out whether Oracle certifies this officially. Will update more when I find out.

Multi-Modal and Ubiquitous Computing

How multi-modal capabilities empower ubiquitous computing.

Centered around the user, multi-modal computing is as much a hybrid approach to user input as multiple drive trains are to a Prius. we will attempt to answer the following questions:

  • What is multi-modal and how is this different
  • What are it's uses?
  • And most importantly how does this benefit companies adopting it?

 

Flow

Fig 1a: Tethered Modern Worker

We are all used to carrying multiple devices with us and the modern forklift warrior is also encumbered by having to use a number of devices and input devices to update a system with what he/she has done. Depending on the work situation, this would include any number of inputs and communications types.

For example if the user is working in a distribution center handling returns or maintenance/repair, a typical workflow would look like the following:

  • Scan received carton/case.
  • Inspect the item received for damages, special instructions etc.
  • Confirm the quantity into mobile unit after inspection
  • If this is a custom high value line e.g. custom trucks like Peterbilt, there may be a need to possibly call the customer/returnee to get more details
  • If the DC has implemented task interleaving and it is high volume season, then tasks alerting and dispatching is done using a mechanism that can page
  • If there is speech available as a capability, then a worker could use this input variation along with scanning
  • If there are sensor capabilities like RFID, which is one of the top uses of RFID returns for high value goods, and a hazmat or hands free operation is required then scanning, RFID and speech may all be used in conjunction.

As you can surmise, the above operations in combination or singly can involve one or many modes of inputs in the form of scanner, sensor, speech, manual mobile input and some form of automation.

Multi-modal or Aria as branded by some industry exponents, is as much a device solution capability as well as software that enables the orchestration of these machine events and inputs into a synchronized business flow.

Keep a lookout for key capabilities, TCO impact and ROI measures.....

 

 

 

 

 

Blog:: up, down, up, down, left right??

admin | Jul 8, 2008 13:10 -0600

As some of you may have noticed, my server has been experiencing a lot of problems this past month.. :’(
Going down, coming back up, emails breaking, not recieving, not sending its a complete nightmare..

So if you’ve emailed me in the past month I probably did not receive it unless it was fluke..

Everything seems to be back and stable so fingers crossed it was just the gremlins in my friends server room in Slovenia playing god…

Guide:: jdbc:jtds MS SQL2000/2005 instance - setting connection string

admin | Jul 8, 2008 13:10 -0600

Recently I came across a small problem with setting up Oracle UCM 10gR3 on a MSSQL2005 instance.
Using the net.sourceforge.jtds.jdbc.Driver class.

The DBAs had setup a clustered SQL environment and had given me MSSQLDB0001\ARCHIVETR.
ARCHIVETR being the SQL instance which I needed to install the UCM to.

For future reference all you need to do is append ‘;instance=ARCHIVETR’ to the connection string like the following:

jdbc:jtds:sqlserver://<SQLServer>:<PORT>/;instance=<SQLInstanceName>

Example:
jdbc:jtds:sqlserver://MSSQLDB0001:1433/UCM;instance=ARCHIVETR

nVision using Queries intricacies

Larry Grey | Jul 8, 2008 12:30 -0600
We've been having an ongoing conversation with one of our loyal blog readers with respect to nVision, Business Units, and Queries. One of the things she found was that Queries didn't quite behave as expected with settings on the report request and was interested in learning more about it.

A Brief History of nVision and Queries

Let's start this discussion by going back to the beginning of nVision, where it was initially developed as part of the GL product and there was no such thing as PS/Query yet. It was built to perform reporting against the ledger and that was pretty much it. In PeopleTools 3, there was a bunch of new things that came in the reporting area: nVision was moved from being part of the GL development team to becoming a PeopleTool, Query and Crystal were introduced as additional reporting capabilities, and nVision received several new features out of the mix, allowing it to perform analysis against content other than Ledgers (as well as drilling into supporting transactional detail through queries).

On the nVision side, this was accomplished by extending the product to support Query as a data source in addition to ledgers as well as support of tabular layouts (in addition to Matrix layouts).

More about Query Support

Adding support for queries as a data source was a very elegant way of identifying data to be used while still leveraging much of the metadata in the PeopleSoft system. This allowed a business user to identify fields of interest, specify how to aggregate data to be analyzed, as well as leveraging effective dating logic.

nVision has special logic inside it to handle the additional criteria specified in a report layout, or to apply scope criteria to the report (it actually modifies the query on the fly to add the additional value or tree criteria and process it). However, a Query simply does not have the same level of metadata as a ledger does, which means that there are limitations. For example, there is no calendar mapping to queries as there is for ledger (which is the primary key to identify what a timespan means). Therefore, although the scope and criteria extensions of queries in nVision work seamlessly, much of the other extensions that are part of the report request are not applied (in the circumstance in question, the business unit specification in the report request is not used to filter the data, although it is used for setid indirection.

Tabular Layouts

One other thing that has intracies (or rather inconsistencies) with how it works is tabular layouts. For example, it would be nice to be able to take a query and apply worksheet criteria to it in a tabular layout. Unfortunately, worksheet criteria does not work and if you want to apply additional criteria to a tabular report without modifying the query, you will need to use a scope.

iProcurement: Catalog Bulk Load

Dave | Jul 8, 2008 12:10 -0600
Just over a year ago we implemented Shared Application Filesystem in our EBS environment. This reduced maintenance time by my guesstimate of 25-50%. Its hard to say exactly how much time we have saved but previously we would have to apply a patch to two application tiers (web, forms) and a database tier (cm, db). If patches took an equal amount of time per tier it would be easy to say how

REPAIR:: SQL Injection Attack

admin | Jul 8, 2008 07:20 -0600

Recently one of my clients servers were attacked by the ASCII Encoded/Binary String Automated SQL Injection Attack. [Info Here]

They had an old ASP web application which allowed the injection through a HTTP GET..
They should of really used store procedures!

Unfortunatly the database wasn`t being backed up. :(

But good news… here`s the query you can use to tidy up your database if your are ever injected ;)
Hope this helps. As for hope to prevent sql injection in future learn to use store procedures!! Or you can find another not so great solution here:[Info Here]

Read On for the sql query..

SET NOCOUNT ON

DECLARE @SCRIPT VARCHAR(1024)

DECLARE @T VARCHAR(255)

DECLARE @C VARCHAR(255)

DECLARE Table_Cursor CURSOR FOR

SELECT [A].[Name], [B].[Name]

FROM sysobjects AS [A], syscolumns AS [B]

WHERE [A].[ID] = [B].[ID] AND

[A].[XType] = ‘U’ /* Table (User-Defined) */ AND

([B].[XType] = 99 /* NTEXT */ OR

[B].[XType] = 35 /* TEXT */ OR

[B].[XType] = 231 /* SYSNAME */ OR

[B].[XType] = 167 /* VARCHAR */)

OPEN Table_Cursor

FETCH NEXT FROM Table_Cursor INTO @T,@C

WHILE (@@FETCH_STATUS = 0)

BEGIN

print ‘Updating [' + @T + '].[' + @C + ']…’

SET @SCRIPT = ‘<script src=http://www.asodbr.com/ngg.js></script>’

EXEC(‘UPDATE [' + @T + '] SET [' + @C + '] = REPLACE(cast([' + @C + '] as nvarchar(4000)), ”’ + @SCRIPT + ”’, ””)’)

SET @SCRIPT = ‘<script src=http://www.dbgbron.com/ngg.js></script>’

EXEC(‘UPDATE [' + @T + '] SET [' + @C + '] = REPLACE(cast([' + @C + '] as nvarchar(4000)), ”’ + @SCRIPT + ”’, ””)’)

SET @SCRIPT = ‘<script src=http://www.browsad.com/ngg.js></script>’

EXEC(‘UPDATE [' + @T + '] SET [' + @C + '] = REPLACE(cast([' + @C + '] as nvarchar(4000)), ”’ + @SCRIPT + ”’, ””)’)

SET @SCRIPT = ‘<script src=http://www.ucomddv.com/ngg.js></script>’

EXEC(‘UPDATE [' + @T + '] SET [' + @C + '] = REPLACE(cast([' + @C + '] as nvarchar(4000)), ”’ + @SCRIPT + ”’, ””)’)

Print ‘Done’

Print

FETCH NEXT FROM Table_Cursor INTO @T, @C

END

CLOSE Table_Cursor

DEALLOCATE Table_Cursor

Print ‘Clean-up Complete.’

CedarCrestone HR Systems Survey - Available Now


I came across this interesting survey from CedarCrestone, the HR Systems Survey 2008 -2009. I have been following their surveys for quite sometime and find them to very insightful and information oriented.

This time around the survey would cover broad HR technology adoption including
• Talent management and business intelligence applications
• Self service, portal, and Web 2.0 innovations
• Sourcing choices. Do you keep processes, technology, and people in-house or do you
outsource?
• Current year expenditures and next year’s budgets
• Metrics such as employee/HR staff ratios, administrative costs per employee, and many others that will be invaluable benchmark metrics

Some of the benefits of taking this survey for your organization.
This survey would provide you an opportunity to understand your current systems adoption for HR systems and sourcing, and benchmark it against your peers in the industry. It would also help you identify leading trends and how they could help you.

How to take the survey

The survey would take approximately 30 min and is available on http://www.cedarcrestone.com/hrssv53. Though it has many sections, you need not take all at the same time.
The deadline for completing this survey is 30th July,2008.

Darth Ellison Visits SAP

Lee Kroon | Jul 7, 2008 21:50 -0600
While the JD Edwards Advisor strives to provide comprehensive news and analysis to our readers, we also like to have a good laugh. That’s why we post the occasional picture or video that gives us a chuckle, even if it pokes fun at our own foibles or (heaven forbid!) at Oracle itself. The following video from [...]

PeopleSoft telephony two factor authentication

At the end of the previous blog entry on PeopleSoft telephony integration, we were able to initiate telephone calls from within PeopleCode to an end user and prompt them to enter a PIN code so that we could authenticate them. We could even see in the logs whether the user typed the correct PIN on their phone or not.

What we didn't cover was how we can figure out in PeopleCode whether the user typed the correct PIN or not. If we can't do that, then there's not much point to the whole exercise, eh? :-)

To make a long story less long, you can't (easily) find out the answer with just PeopleCode. There are a couple of reasons for this. One was hinted at yesterday; the Asterisk Manager API call origination only allows you to get the call going. Once the call has been successfully initiated, then the call origination reports success. Even if the user does not answer the phone, the call itself was successfully originated.

If you want to find out what happened, then you have to use another part of the Asterisk Manager API, the events API. That allows you to listen to various events happening within Asterisk. So after we originate the call, there will be a series of events triggered (Dial events, Hangup events, Callerid events, etc.) that we can use.

The good news is that the Asterisk-Java library that we're using has great support for the events API. There are Java classes for all of the different events that occur within the Asterisk server. For example, here's someone else's sample Java code of catching the Dial event and using that for screenpops.

In order to register which events that you are interested in though, the Asterisk-Java library require you to implement a Java interface called ManagerEventListener. Implementing interfaces is no big deal when you're writing Java code; it's just a list of methods that you have to provide the actual code for. However PeopleCode can't implement Java interfaces, so we're going to need to write some Java code ourselves.

In order to make this work, I needed to create two separate Java classes. The first one is called PSoftLoginManager. In addition to implementing the ManagerEventListener interface, I moved the PeopleCode logic for doing the call origination into this class as well.

The other class that I needed to create is called PSoftLoginEvent and it extends the delivered UserEvent class. The Authenticate command that we are using in Asterisk does not actually create any events for us to listen to. However, Asterisk supports the notion of user defined events, so we can use that. At the moment the PSoftLoginEvent includes the PeopleSoft user ID and whether the login attempt was successful or not.

The Java code wasn't too bad. 100+ lines or so, but let's look at how the PeopleCode looks now first. All of the variable declarations at the top stay the same, but the rest of the code is now just
Local JavaObject &loginMgr = CreateJavaObject("com.greysparling.asterisk.PSoftLoginManager", &host, &user, &pswd);
Local JavaObject &loginEvt = &loginMgr.challengeUser(&userID, &phone, &pinCode, &channel, &context, &exten);
If &loginEvt.isSuccess() Then
Warning ("Successfully validated user " | &userID);
Else
Warning ("Off with " | &userID | "'s head!");
End-If;
We create our PSoftLoginManager object with the Asterisk server information, and then call challengeUser to initiate the call and get the result back. Instead of having challengeUser return a binary result of success or not, I return the actual PSoftLoginEvent object itself which can be queried for success or failure. That keeps things easy later if we need to expose any additional data back from the Asterisk side.

On the Asterisk configuration side, we need a small change in order to trigger our login event.
[challenge-psft-user]
exten => 7189,1,Answer()
exten => 7189,2,Playback(vm-intro)
exten => 7189,3,NoOp(Authenticating user ${PSFTUSERID})
exten => 7189,4,Authenticate(${PIN},j)
exten => 7189,5,NoOp(Successful login ${PSFTUSERID})
exten => 7189,6,UserEvent(PSoftLogin|userId: ${PSFTUSERID}|result: SUCCESS)
exten => 7189,7,Hangup()
exten => 7189,105,NoOp(Unsuccessful login ${PSFTUSERID})
exten => 7189,106,UserEvent(PSoftLogin|userId: ${PSFTUSERID}|result: FAILURE)
exten => 7189,107,Hangup()
The main difference is the use of the Asterisk UserEvent command. That takes the name of our login event as it's first parameter. The additional parameters are the ones that we have defined for our event. The Asterisk-Java library will automatically map these extra parameters that we have defined into the appropriate setter calls on the Java PSoftLoginEvent object (e.g. userId maps to setUserId() ).

Now when we run the App Engine program, here's what the Asterisk console looks like.

    -- Executing [7189@challenge-psft-user:1] Answer("IAX2/123456789-2", "") in new stack
-- Executing [7189@challenge-psft-user:2] Playback("IAX2/123456789-2", "gs-demo-login") in new stack
-- Playing 'gs-demo-login' (language 'en')
-- Executing [7189@challenge-psft-user:3] NoOp("IAX2/123456789-2", "Authenticating user PTDMO") in new stack
-- Executing [7189@challenge-psft-user:4] Authenticate("IAX2/123456789-2", "4554|j") in new stack
-- Playing 'agent-pass' (language 'en')
-- Playing 'auth-thankyou' (language 'en')
-- Executing [7189@challenge-psft-user:5] NoOp("IAX2/123456789-2", "Successful login PTDMO") in new stack
-- Executing [7189@challenge-psft-user:6] UserEvent("IAX2/123456789-2", "PSoftLogin|userId: PTDMO|result: SUCCESS") in new stack
-- Executing [7189@challenge-psft-user:7] Hangup("IAX2/123456789-2", "") in new stack
== Spawn extension (challenge-psft-user, 7189, 7) exited non-zero on 'IAX2/123456789-2'
-- Hungup 'IAX2/123456789-2'


You can see the addition of the UserEvent here, plugged in with the name of our event, the PTDMO user and the result value of SUCCESS. Since this event is what our challengeUser function returns to PeopleCode, we can now properly do the two factor authentication from PeopleSoft.

Here's the Java code for the PSoftLoginEvent class. The things that are worth noting is that it extends the org.asteriskjava.manager.event.UserEvent class, and that it has setters for the values that we want to receive. It appears as though you can only get strings from the Asterisk side, so I adopted the convention that result has to be the string SUCCESS for a successful login.

package com.greysparling.asterisk;

import org.asteriskjava.manager.event.UserEvent;

public class PSoftLoginEvent extends UserEvent {
private String userId;
private String result;

public PSoftLoginEvent(Object source) {
super(source);
}

public String toString() {
return "PSoftLogin for " + getUserId() + " (" + result + "),"
+ super.toString();
}

public boolean isSuccess() {
return "SUCCESS".equals(result);
}

public void setResult(String result) {
this.result = result;
}

public String getUserId() {
return userId;
}

public void setUserId(String userId) {
this.userId = userId;
}

private static final long serialVersionUID = 1L;

}


Here is the Java code for the PSoftLoginManager class. This is a little bit more complex, but not too bad. We implement the ManagerEventListener class so that the Asterisk-Java library knows we want to receive events. That means that we have to provide an "onManagerEvent" method.

Our implementation of onManagerEvent is pretty simplistic - we just check if the event is a PSoftLoginEvent, and whether the user ID in that event matches the one that we just sent. A more robust implementation would use some unique IDs for matching up the exact logins; not just check the user ID. We'd also want to check for other related events such as the user hanging up without even trying to enter the PIN code.

Another thing worth pointing out here is that in the Asterisk-Java library, event notifications come in on a different thread. PeopleCode only runs single threaded, but when you are calling Java from within PeopleCode, there may be multiple threads running from within the Java Virtual Machine.

In this demo implementation, we're cheating a bit by just sleeping on the main thread while we wait for the login event to come back. It works just fine for our purposes here, but it's definitely not production ready code. We'd probably also want to have some sort of a connection pool instead of logging in to the Asterisk server on every request.
package com.greysparling.asterisk;

import java.io.IOException;
import java.util.HashMap;

import org.asteriskjava.manager.AuthenticationFailedException;
import org.asteriskjava.manager.ManagerConnection;
import org.asteriskjava.manager.ManagerConnectionFactory;
import org.asteriskjava.manager.ManagerEventListener;
import org.asteriskjava.manager.TimeoutException;
import org.asteriskjava.manager.action.OriginateAction;
import org.asteriskjava.manager.event.ManagerEvent;
import org.asteriskjava.manager.response.ManagerResponse;

public class PSoftLoginManager implements ManagerEventListener {

private ManagerConnection connection;
private boolean keep_running = true;

private String userId;
private PSoftLoginEvent event;

static final String USERID = "PSFTUSERID";
static final String PIN = "PIN";

public PSoftLoginManager(String host, String user, String pswd) throws
AuthenticationFailedException, TimeoutException, IOException {

ManagerConnectionFactory factory =
new ManagerConnectionFactory(host, user, pswd);

connection = factory.createManagerConnection();
connection.addEventListener(this);
connection.registerUserEventClass(PSoftLoginEvent.class);
connection.login();
}

public PSoftLoginEvent challengeUser(String userId, String phone,
String pinCode, String channel, String context, String exten)
throws InterruptedException, TimeoutException, IOException {

this.userId = userId;
this.event = null;

HashMap vars = new HashMap();
vars.put(USERID, userId);
vars.put(PIN, pinCode);

OriginateAction action = new OriginateAction();
action.setChannel(channel + "/" + phone);
action.setContext(context);
action.setVariables(vars);
action.setExten(exten);
action.setPriority(new Integer(1));

ManagerResponse response = connection.sendAction(action, 30000);
System.out.println(response.getResponse());

while (keep_running)
Thread.sleep(100);

return this.event; // caller can check isSuccess()
}

public void onManagerEvent(ManagerEvent event) {
if (event instanceof PSoftLoginEvent) {
PSoftLoginEvent login_event = (PSoftLoginEvent)event;
System.out.println("Login event: " + login_event);
if (userId.equals(login_event.getUserId())) {
System.out.println("Matched user");
this.event = login_event;
this.stop();
}
else {
System.out.println("User was " + login_event.getUserId());
}
}
else {
System.out.println("Event: " + event);
}
}

public void stop() {
keep_running = false;
}

}
So there you have it. We've successfully made phone calls from within PeopleSoft, challenged user for a PIN code, and take action accordingly. Everything that we need for two factor authentication of PeopleSoft users, and our total cost is still under one dollar.

11gR1 Database Certified with Apps 11i for Windows Server 2003 x64

Steven Chan | Jul 7, 2008 15:50 -0600

Rounding out our ever-growing set of 11gR1 Database certifications, I'm pleased to let you know that our Applications Platform Group has certified E-Business Suite Release 11i (11.5.10.2) with the 11gR1 Database version 11.1.0.6 on Microsoft Windows Server 2003 x64 (AMD64 / EM64T).

Microsoft Windows Server 2003 x64 Editions logo

Note: This is a database tier only certification (also known as a 'split configuration'). The application tier must be on a fully certified E-Business Suite 11i platform.

References

Related Articles

DB Sesions from JVM are very very high

Vikram Das | Jul 7, 2008 14:10 -0600
For past few months, there was an issue of too much swapping on a shared box in our environment. After the high SGAs were size down, the problem was still at large. One of the experts monitored and saw that JVM sessions were very high on OS level. He inquired about any known issues after RUP6. Metalink Note 459353.1 which describes post ATG RUP 5/6 issues, shows a bug 6841295 which has a similar behavior. It says:

After RUP6 Patch 5903765 is applied there are a large number of idle JDBC connections owned by the APPLSYSPUB user. These connections build up and cause performance issues.

AppsLocalLogin.jsp is leaking connections when the initial login is not successful.

Note: Although the title of the bug and patch suggests that this issue appears after RUP6 + JDK 1.6 the problem will manifest after RUP6 and does not require JDK 1.6 to be triggered

There are lots of idle database connections coming from the APPLSYSPUB user.

Use this script to identify if you are experiencing this problem:
select s.sql_hash_value, t.sql_text, s.last_call_et
from v$session s , v$sqltext t
where s.username = 'APPLSYSPUB'
and s.sql_hash_value= t.hash_value
and t.sql_text like '%fnd_security_pkg.fnd_encrypted_pwd%';


These connection leaks are NOT reported in ""AOL/J Database connection pool status" page.

Last SQL executed shows :

BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5,:6,:7,:8); END;
or
BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;

The fix can be obtained via Patch 6841295 "DB SESSIONS FROM JVMS ARE VERY VERY HIGH AFTER ATG RUP6 + JDK 1.6 UPGRADE"

This patch is password protected - please contact Oracle Support

We executed the SQL:

SQL> select s.sql_hash_value, t.sql_text, s.last_call_et
from v$session s , v$sqltext t
where s.username = 'APPLSYSPUB'
and s.sql_hash_value= t.hash_value
and t.sql_text like '%fnd_security_pkg.fnd_encrypted_pwd%'; 2 3 4 5

SQL_HASH_VALUE SQL_TEXT
-------------- ----------------------------------------------------------------
LAST_CALL_ET
------------
2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
6712

2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
472085

2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
363139


SQL_HASH_VALUE SQL_TEXT
-------------- ----------------------------------------------------------------
LAST_CALL_ET
------------
2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
472085

2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
1140226

2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
472095


SQL_HASH_VALUE SQL_TEXT
-------------- ----------------------------------------------------------------
LAST_CALL_ET
------------
2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
471800

2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
1140221

2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
1140219


SQL_HASH_VALUE SQL_TEXT
-------------- ----------------------------------------------------------------
LAST_CALL_ET
------------
2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
1133010

2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
472089

2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
472094


SQL_HASH_VALUE SQL_TEXT
-------------- ----------------------------------------------------------------
LAST_CALL_ET
------------
2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
1140216

2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
472090

2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
472090


SQL_HASH_VALUE SQL_TEXT
-------------- ----------------------------------------------------------------
LAST_CALL_ET
------------
2656254451 BEGIN fnd_security_pkg.fnd_encrypted_pwd(:1,:2,:3,:4,:5); END;
472082


16 rows selected.

That matches roughly with:

$ top -b 5000 -s size | grep applmgr
25809 applmgr 73 59 0 1140M 356M sleep 39:01 0.00% java
15528 applmgr 65 59 0 361M 187M sleep 28:49 0.00% java
15548 applmgr 62 59 0 1051M 275M sleep 22:02 0.00% java
15770 applmgr 62 59 0 1051M 269M sleep 21:59 0.00% java
15538 applmgr 62 59 0 1051M 283M sleep 21:23 0.00% java
19372 applmgr 62 59 0 1136M 345M sleep 12:28 0.00% java
19435 applmgr 62 59 0 1140M 338M sleep 11:53 0.00% java
19409 applmgr 62 59 0 1112M 306M sleep 9:39 0.00% java
19395 applmgr 62 59 0 1111M 315M sleep 9:31 0.00% java
19399 applmgr 62 59 0 1111M 313M sleep 9:29 0.00% java
19414 applmgr 62 59 0 1111M 304M sleep 9:11 0.00% java
19421 applmgr 60 59 0 1144M 343M sleep 8:59 0.00% java
19452 applmgr 61 59 0 1114M 307M sleep 8:55 0.00% java
19384 applmgr 59 59 0 1114M 307M sleep 8:40 0.00% java

Strangely this instance was not on RUP6 but on RUP4. Maybe this issue occurs on RUP4 too. Since this patch is password protected, I have logged an SR with Oracle to get the password. We'll be applying this in one of the affected instances and check if it solves the issue. Will update this post once it is done.

Tips: Add your Oracle Mix profile into your email signature

Don’t hesitate to add into your email signature some informations like your Linkedin profile or Facebook ID, and for all Oracle lovers add your Mix Profile link like that :

View Didier Wojciechowski's profile on Oracle Mix
or like that (proposition of template):

EBS R12 Database Tier Only Certification with Oracle DB 10.2.0.3 on IBM zLinux

Oracle E-Business Suite Release 12 (12.0) is now certified with Oracle Database Server 10gR2 version 10.2.0.3 on IBM Linux on System z (zLinux).
Note: This is a database tier only certification (previously known as a ’split configuration’ in 11i). The application tier must be on a fully certified E-Business Suite R12 platform.

Linux on mainframe (Red Hat and SUSE) is just like any other Linux deployment from Oracle’s perspective.  The novelty of a mainframe deployment is that  Linux server instances are completely virtualized through z/VM — their virtualization software (this is how they compete effectively with very large Linux/Unix server farms). In Japan we have the largest pure Oracle customer on System z deployment running 3 RAC clustered mainframes with 300 processors (huge).   There are dozens more in production.   The customer may only be thinking server consolidation to realize management, power and other environmental savings.

Where can I find more information?

Certify’s E-Business Suite -> EBS Release 12 -> Database Tier Only page for details

Interoperability Notes: Oracle E-Business Suite Release 12 with Oracle 10g Release 2 (10.2.0) (OracleMetaLink Note 454750.1)

Using Oracle E-Business Suite Release 12 with a Database Tier Only Platform on Oracle 10g Release 2 (OracleMetaLink Note 456197.1)

Export/Import Process for Oracle E-Business Suite Release 12 Database Instances Using Oracle Database 10g Release 2 (OracleMetaLink Note 454616.1)

The difference between MDM Systems and Data Warehouses

In many ways, the processes are similar to those used in populating a data warehouse or datamart, particularly with the...