Showing posts with label Peoplesoft Financials. Show all posts
Showing posts with label Peoplesoft Financials. Show all posts

Friday 28 December 2007

Getting Current and Previous EFFDTed Rows

Almost in every project, this is one of the requirements to get the Current and Previous EFFDTed rows (from JOB table).
Most of the times, we will use the Self Join SQL to get the same.
SELECT
            A.EMPLID, A.EFFDT CURR_EFFDT, B.EFFDT PREV_EFFDT
FROM   PS_JOB A, PS_JOB B
WHERE
            B.EFFDT =(SELECT MAX(A_ED1.EFFDT) FROM PS_JOB A_ED1
                        WHERE B.EMPLID = A_ED1.EMPLID
                        AND B.EMPL_RCD = A_ED1.EMPL_RCD
                        AND A_ED1.EFFDT < A.EFFDT)
            AND B.EFFSEQ =(SELECT MAX(A_ES1.EFFSEQ) FROM PS_JOB A_ES1
                                WHERE B.EMPLID = A_ES1.EMPLID
                                AND B.EMPL_RCD = A_ES1.EMPL_RCD
                                AND B.EFFDT = A_ES1.EFFDT)
            AND A.EMPLID = B.EMPLID
            AND A.EMPLID=’KA0002′

Is this the only way to get the results?????
Here is the Simple and Advanced way to achieve the same results without using Self Join
SELECT
            A.EMPLID, A.EFFDT CURR_EFFDT, LAG (A.EFFDT, 1, NULL) OVER (ORDER BY EFFDT) PREV_EFFDT
FROM   PS_JOB A
WHERE            A.EMPLID=’KA0002′

Like this, we can also get the Current and Following EFFDTed rows by using LEAD Function
SELECT
A.EMPLID, A.EFFDT CURR_EFFDT, LEAD (A.EFFDT, 1, NULL) OVER (ORDER BY EFFDT) LEFFDT
FROM PS_JOB A
WHERE A.EMPLID=’KA0002′

Note: Above SQL holds good for Oracle DB. In Oracle, The Function LAG/LEAD is called Analytic Function, which is there right from Oracle 8i onwards.
Read More About  EFFDTed Rows

Monday 27 August 2007

PeopleSoft Flashback…

Flashback query has been a boon from Oracle since its introduction in 9i. In a PeopleSoft environment there are many areas a DBA can utilize this feature. The commands are straightforward and will make your life easier if you remember them.
Consider a scenario where you are doing a data fix in production database. You have been extremely busy today and swamped with 4 high priority problem tickets. You maintain your composure and use your multitasking skills.
The Functional Consultant gave you the below SQL to perform the data fix.
DELETE FROM PS_ABC_VCH_APPR WHERE VOUCHER_ID IN (‘7865419’,’7865438’,’7865428’) AND ENTRY_STATUS IN (‘P’,’X’);
It will delete 12 rows and you confirm the same. You issue commit, close the problem ticket and start working on the next high priority ticket. Phew, one down and 3 more to go…
You get a phone call from the functional consultant 15 mins after you closed the data fix problem ticket. He wants to re-open the problem ticket and request a restore. The fix did not work and they have identified a workaround that can be performed online. He thanks you for taking care of this so quickly and requests you to call him when the data is restored. As you hang up, you begin to feel a little bit of nervousness. Did you or did you not take a backup? Then it strikes you that you forgot to take the backup in your rush to execute the ticket and assuming that the functional team rarely request restore!! Hmm…
In these scenarios, the below SQL will be a life saver!
INSERT INTO PS_ABC_VCH_APPR SELECT * FROM PS_ABC_VCH_APPR AS OF TIMESTAMP (SYSTIMESTAMP – INTERVAL ‘20’ MINUTE) WHERE VOUCHER_ID IN (‘7865419’,’7865438’,’7865428’) AND ENTRY_STATUS IN (‘P’,’X’)
The SQL above will insert into PS_ABC_VCH_APPR all rows that existed for the above criteria 20 minutes ago.
Or
INSERT INTO PS_ABC_VCH_APPR SELECT * FROM PS_ABC_VCH_APPR AS OF TIMESTAMP TO_TIMESTAMP(‘24-aug-07 14:35:00′,’DD-MON-YY HH24: MI: SS’)WHERE VOUCHER_ID IN (‘7865419’,’7865438’,’7865428’) AND ENTRY_STATUS IN (‘P’,’X’)
The SQL above will insert into PS_ABC_VCH_APPR all rows that existed for the above criteria at the date and time mentioned.
þ You get a call at 4am from the Help Desk, an incomplete migration yesterday evening has resulted in messing up the data after the custom SQR process ran and failed, the functional analyst is requesting an emergency restore of the database. He wants the database to be restored to a point in time just prior to running the SQR process, and complete the migration. Why does this always happen when you are on-call??
You know that restoring the database is going to take 3-4 hours and keep your finger crossed (hoping the hot backup and archive logs are valid).
Instead, you call the functional analyst, check out the custom SQR process and determine that the batch job only impacts 12 tables. You tell him that it is not too late and you will use the flashback feature to get back the data in those 12 tables to a state prior to execution of the batch job!! This has saved your client 3+hrs of downtime and we all know that time is $$$.
Note 1 – It is not recommended to use the flashback feature as a backup policy but as an option in emergency scenarios where you forgot to take a backup or the backup got corrupted.
Note 2 – Do not forget to read about the limitations. You can only flashback if your UNDO segments have this information. This is driven by the parameter UNDO_RETENTION and the fact that Oracle can only honor if enough undo space is available for active transactions.
Summary – Though we still do not have the capability to flashback in our real life (oh we wish we could go back in time and correct that one mistake we made in our life) but there are many scenarios in a real world PeopleSoft environment which can utilize the flashback feature. We just have to keep our mind open to the possibilities that this feature provides.

Thursday 23 August 2007

How do you determine PeopleSoft Portal Navigation?

I was composing this post when there was a comment from “Spamboy” for my previous post where he provided the SQL to identify the portal navigation. Thanks for your comments!!
In this post I will share the SQL I use when I want to determine the portal navigation. Here it is …
SELECT LPAD(‘–’,2*(LEVEL-1)) || PORTAL_LABEL “NAVIGATION”
FROM (SELECT PORTAL_LABEL, PORTAL_PRNTOBJNAME, PORTAL_OBJNAME, PORTAL_URI_SEG2 FROM PSPRSMDEFN A
WHERE PORTAL_NAME = ‘EMPLOYEE’ ) B
WHERE B.PORTAL_PRNTOBJNAME != ‘ ‘
START WITH (B.PORTAL_URI_SEG2 IN
(SELECT D.PNLGRPNAME
FROM PSMENUITEM A, PSMENUDEFN B, PS_PRCSDEFNPNL C, PSPNLGROUP D
WHERE A.MENUNAME=B.MENUNAME
AND A.PNLGRPNAME = C.PNLGRPNAME
AND A.PNLGRPNAME = D.PNLGRPNAME
AND PRCSNAME LIKE UPPER(‘&PRCSNAME’))
)
CONNECT BY PRIOR B.PORTAL_PRNTOBJNAME = B.PORTAL_OBJNAME;
NAVIGATION
———————————-
Load Transactions into AM
–Load Transactions
–Send/Receive Information
–Asset Management
Also, if you have built the search index (PeopleTools > Portal > Build Registry Search Index) and know the component name. You can directly enter the component name in the search box. Here is what you get.
Portal_search_2 
Read More about  Peoplesoft

Tuesday 21 August 2007

How to determine the PeopleSoft navigation?

While working on my previous projects, I had some difficulties identifying the menu navigation for a process or report in PeopleSoft. So I developed this SQL that will help determine the navigation.
select distinct b.menugroup||’ > ‘ ||b.menulabel||
‘ > ‘||barlabel||’ > ‘||a.itemlabel||’ > ‘
||d.pnlgrpname||’ – ‘||prcstype||’ – ‘||prcsname“Navigation”
from psmenuitem a, psmenudefn b, ps_prcsdefnpnl c, pspnlgroup d
where a.menuname=b.menuname
and a.pnlgrpname = c.pnlgrpname
and a.pnlgrpname = d.pnlgrpname
and prcsname like upper(‘&prcsname’)
group by b.menuname, b.menugroup, b.menulabel, barlabel, a.itemlabel,
d.pnlgrpname, prcstype, prcsname
/
Navigation
—————————————————————————-
Mana&ge Assets > &Interface Asset Information > &Process > &Transaction Loader > RUN_AMIF1000 – Application Engine – AMIF1000

Read More about Peoplesoft Navigation