Search This Blog

Tuesday, December 11, 2012

Get The File Names From A Folder

Ok, when some DOS gurus see this post, they might laugh. But for me, in one of the projects, this was a real life saver and a value add to the client.

So the tip - It is not the quantity of the code which creates value; but, how it is being used :)
Like the saying: Even a grass can be a good tool at the right time.

The command is this: DIR /B /ON *.* > MyMusicList.txt

The example here, is the requirement to get the list of the file names in my music folder, to share with a friend, so that he can select the ones he like.


So first I went to the root folder where I have kept all music collections.And then fired the command and gave a target file name.

Then I can see the file MyMusicList.txt generated under the same path where I have kept the music files, which has all the music file names exported.




Now the real power is not getting some music files. But how to use it for adding value to any application we work on.

What if there are files in the PeopleSoft file server that need to be accessible to the client online? There you go.

Archiving the data

I am not very much into the PeopleSoft data archiving part. 

But in the fast few months, while creating our own applications to sell, we had requirements to create archive tables for most of the app related online tables. And what we used to do it is to create app specific stand alone archiving process.

As you might know being a DBA geek, delivered archiving process is having a best practice in it. And it is not tough to use also. Only thing to fit our history tables into the archiving stack is to add the sub record - PSARCHIVE_SBR.

And then you can populate the values using PS Queries and can run a AE program to clean up the data. Everything can be beautifully configured and execute.

Sweet!

Recommended method.

Wednesday, November 7, 2012

PS_CUST_HOME

PeopleTools has been delivering significant changes to PS_HOME over the past several releases in order to provide a better, more secure organization for the PeopleSoft middle tiers. The improvements began with PS_CFG_HOME (Configuration Home), which was introduced in PeopleTools 8.50. With that release, domain configuration and log files were removed from PS_HOME, allowing us to make PS_HOME read-only. PS_APP_HOME (Application Home) was introduced in PeopleTools 8.52, providing the ability to separate application-specific code from PS_HOME, which helped clarify what must be evaluated at upgrade time.

PeopleTools 8.53 extends this approach to customizations through PS_CUST_HOME (Customization Home). By using PS_CUST_HOME for any customer-specific code, a clear distinction is made between code delivered by PeopleTools and PeopleSoft applications and that produced by individual customers. This change is optional; customers may continue to use a traditional PS_HOME if desired.

Source: PT853RVP Document

Thursday, October 11, 2012

HCM / FSCM 9.2 RVP


PeopleSoft Human Capital Management (HCM) and Financials and Supply Chain Management (FSCM) are world-class solutions for organizations of every size, region, and industry. Oracle’s planned product roadmap for PeopleSoft applications is to deliver valuable, needed features for all of an organization’s constituents along three design principles — Simplicity, Productivity, and Lowered Total Cost of Ownership — as well as new application functionality as prioritized by our customers.

The upcoming 9.2 releases of PeopleSoft Human Capital Management, Enterprise Learning Management, Asset Lifecycle Management, Enterprise Service Automation, Financial Management Solution, Supply Chain Management, and Supplier Relationship Management focus on these themes of Simplicity, Productivity, and Lower Total Cost of Ownership while also delivering robust new functionality to help your organization succeed.

The recently published PeopleSoft HCM and ELM 9.2 Release Value Proposition and PeopleSoft ALM, ESA, FMS, SCM, and SRM 9.2 Release Value Proposition provide overviews of the new features and enhancements planned for these applications for Release 9.2. These documents offer customers a road map intended to help them assess the business benefits of upgrading to the 9.2 release while also helping them plan their IT projects and investments. (Links are to My Oracle Support pages, available to customers and partners.)

Oracle continues to deliver enterprise-wide features that enhance our customer ownership experience and helps them run their businesses more efficiently and profitably. With the HCM and FSCM 9.2 releases, we continue to abide by this firm commitment we’ve made to our customers.

Re-posting from Oracle Blog...

9.2 Release Notes

Last week at Oracle Open World we announced the following changes to PeopleSoft support:
  • The PeopleSoft 9.0 Extended Support window has been lengthened to June 2015. (Includes PeopleSoft HCM, FSCM, CRM)
  • All Extended Support fees for PeopleSoft 9.0 have been waived through the June 2015 date.
  • All Extended Support fees for PeopleSoft 9.1 have been waived through their 2017 dates.
These changes provided customers with more flexibility to plan for the adoption of PeopleSoft 9.2. You can start your upgrade planning today, as PeopleSoft 9.2 Release Notes provide extensive documentation on 9.2 features. Access the Prerelease Notes on My Oracle Support to start planning your upgrade.

PeopleSoft HCM 9.2 Prerelease Notes: Doc ID 1494911.1
PeopleSoft FSCM 9.2 Prerelease Notes: Doc ID 1495347.1

Tuesday, September 18, 2012

AP's that should not be modified

Thanks Ramesh Balakrishnan - for sharing this snippet.

Process Definition
Process Name
Process Type
Accrue Receipts
RECVACCR
APP ENGINE
Ben Admin
PSPBARUN
COBOL SQL
Budget Checking Module
FSPBBCHK
COBOL SQL
Calc Deductions
PSPDCRUN
COBOL SQL
Calc Pay
PSPPYRUN
COBOL SQL
COBRA Admin
PSPCOBRA
COBOL SQL
Confirm Deductions
PSPDCCNF
COBOL SQL
Confirm Pay
PSPCNFRM
COBOL SQL
Delete Balances
PSPDLBAL
COBOL SQL
EDI Manager
ECIN001
SQR REPORT
Final Check Pay
PSPFCBLD
COBOL SQL
Journal Generator
FSPGJGEN
COBOL SQL
OM Billing Interface
OMBILL
SQR REPORT
Payment Predictor
ARPREDCT
APP ENGINE
Paysheet
PSPPYBLD
COBOL SQL
PO Build
POBUILD
APP ENGINE
PO Edit
POEDIT
APP ENGINE
PO Post
POPPENCM
COBOL SQL
PO Reconcile
PORECON
APP ENGINE
PO Reconciliation
PORECON
APP ENGINE
PO Rollover
POCHNG
APP ENGINE
Receivables Update
ARUPDATE
APP ENGINE
Requisition Edit
REQEDIT
APP ENGINE
Requisition Post
REQPOST
APP ENGINE
Requisition Reconciliation
REQRCON
APP ENGINE
Retro Deductions
PSPRDEXT
COBOL SQL
Retro Pay
PSPRPEXT
COBOL SQL
Reversal Process
PSPPYREV
COBOL SQL
Transaction Loader
FSPLOADR
COBOL SQL
Treasury Acct App Engine
TRACCTG
APP ENGINE
Unconfirm Deductions
PSPDCUNC
COBOL SQL
Unconfirm Pay
PSPUNCNF
COBOL SQL


No Changes can be made to any annual and quarterly Tax Reporting Processes/Panels
in HR.

Monday, August 6, 2012

Log XMLP Reports

Create a file named xdodebug.cfg and place it under [PS_HOME]\JRE\Lib] folder.The file should include the following line:

Under Windows 
LogLevel=STATEMENT

LogDir=c:\temp

Under Unix
The file Should look like this (point to an appropriate temporary directory under the Unix box) 
LogLevel=STATEMENT

LogDir=/ds3/ps/dssgrp/t849xr21/appserv/ 

Remove xdodebug.cfg when finished replicating the issue.

The logging is specifically useful for troubleshooting the Template(RTF/PDF) or Data File(XML file) specific issues. The generated XML file is the actual data file which is run from the MS Word Design Helper Preview mode to narrow down the issue.

Contributed by: Rajesh Prasad

Thursday, August 2, 2012

hr828473_01.dms Issue

If you have ever encountered this issue while upgrade,do not change the field property to make it work :)
The solution is available with Oracle Support.
Importing HCM_EO_TXN 
Message Set Number: 200
Message Number: 0
Message Reason: File: Data MoverSQL error. Stmt #: 0 Error Position: 0 Return: 1400 - ORA-01400: cannot insert NULL into ("SYSADM"."PS_HCM_EO_TXN"."HR_PTCS_SERVICEID") 
Failed SQL stmt:INSERT INTO PS_HCM_EO_TXN (TRANSACTION_NAME, EOAWPRCS_ID, DELEGATION_APPR, DELEGATION_INIT) VALUES (:1, :2, :3, :4) (200,0)
SQL Error. Error Position: 0 Return: 1400 - ORA-01400: cannot insert NULL into ("SYSADM"."PS_HCM_EO_TXN"."HR_PTCS_SERVICEID") 
INSERT INTO PS_HCM_EO_TXN (TRANSACTION_NAME, EOAWPRCS_ID, DELEGATION_APPR, DELEGATION_INIT) VALUES (:1, :2, :3, :4)
SQL Error. Error Position: 0 Return: 0 - Error: SQL unable to commit transaction for HCM_EO_TXN 
Ended: Wed Aug 01 06:49:00 2012
Unsuccessful completion
'ORA-01400: cannot insert NULL into' - issue is not one or two in Oracle Support. There are a lot out there reported. For majority of this issue has a patch to resolve the bug.



Efficient Reporting

Join our Directors -John Gilligan & Bruce W. Moore - to have a glance on the new products from Ciber. 

Streamline, Centralize and Simplify Reporting:




Register for the HEUG event:
https://www2.gotomeeting.com/register/931838538

Wednesday, August 1, 2012

Blog is on Google Currents now!

I tried Google Currents few days back on Samsung Galaxy tab and found to be a fantastic app to live with. A direct competitor for Flipboard (which is also my favorite).

The feature which made me love Google Currents is that you can publish your content with ease on it and people can subscribe to it. And the interface to set up the publication - very straight forward & simple.

That's the reason I tried publishing The PeopleSoft Blog on Google Currents and its live now!

You can get the link under Science & Technology division of currents. And try it out. it is really simple to navigate and read through.

Android Smart Phones

iPad

iPhone

Tablet


Tuesday, July 31, 2012

PT 8.52 - Decoupled PS_HOMES

You might have already noted this point. Thought of sharing with the people who might have missed it.




Friday, July 6, 2012

So the need is a Calendar View!

The requirement was to have a calendar view to show the enrolled classes details for a student. And what I had was a narrow right side column to fit it. As and when the student enrolls to various classes he should be able to view the details in a calendar view and I was like - oops!

The requirement came up with a tip - the calendar view in the Student Center. And when I opened the code behind it...oh no and I decided not to go with that approach. First I cannot fit that in the area available in the application, secondly recreating the code was insane. But the final decision was this.


Was trying for the past few days for a way to get this requirement done and finally it is done! Thank god!

I will give you a small example:

The below is the screen capture of the Student Enrollment database.


Conside the student 0136 is logged in. The data is pulled up from the STDNT_ENRL table as given above.

A couple of assumptions here: 
ENRL_ADD_DT is the Class Date
LAST_UPD_TM_STMP is the Class Date and Time


Student sees the calender in the form below:

Now from the database we know that the Class Dates are as follows:
06-JUNE-2012
07-JUNE-2012
08-JUNE-2012
16-JUNE-2012


So in the above screenshot we are in the month of August 2012. So two clicks back...

Now we have his details on the calendar view. Just hover with the mouse on the dates to view the details.






Thursday, June 28, 2012

PeopleSoft Feed Publishing Framework

Has anyone tried out this feature? am stuck in between.

Update: Could configure it end to end and integrate with mobile site :)

Monday, June 18, 2012

New Project

It is been a while since I have written a post. Got stuck between a project which can make a difference. I am now able to build my dreams brick by brick. The execution freedom is what I am going through now. More information on this is coming soon. Till then have  a fantastic day!

Wednesday, April 25, 2012

Taming the COBOL Issue


Never worked before on COBOL in PeopleSoft and that was the reason we were stuck when the COBOL bite us when the instance was build. In all good ways that was a wonderful learning.

The COBOL need to be compiled before you can use the processes which executes these COBOL's. For this you need a compiler. You can download MicroSoft Netexpress verisons from Oracle e-Delivery. And you need to check the certified version of the compiler which depends on the OS and the PeopleTools version.

If the COBOLs are not compiled you might get the 'Child program could not start...' error.

The compiler comes in two shapes. With/without license. You can use the trial version of the compiler and it will last only for 30 days and can compile only upto 2000 lines.

What is meant by compiling?

The delivered COBOL files can be found under PS_HOME\src\cbl\base folder. You can see .cbl/.cfg/.dms files in it. Compilation steps/commands you can Google and find it out. It is all over the place.

Once you compile we have to put the compiled .exe/.gnt/.ini files in the CBLBINA/CBLBINU (which depends on the unicode/non-unicode installation).

with the above step the COBOL process should be live and kicking. However you might confront this error - 'Child program XXX aborted'

Why this error is due to the absence of some DLL files from the compiler base folder. They are these: CBLINTS.DLL,CBLRTSS.DLL,CBLVIOS.DLL,COB32API.DLL

Copy these files from the compiler base folder and paste it in the  CBLBINA/CBLBINU along with the executables. Then it should work.

The above steps is for the non-unicode database.

For non-unicode database you need to compile the COBOLS to unicode compatible format using the conversion .bat file Oracle provides.


Key fields on RECFIELD

Works in Oracle DB only.

 SELECT RECNAME ,FIELDNAME ,(TRUNC((USEEDIT/1),0) - TRUNC((USEEDIT/2),0) * 2) KEY ,(TRUNC((USEEDIT/2),0) - TRUNC((USEEDIT/4),0) * 2) DUPORDERKEY ,(TRUNC((USEEDIT/256),0) - TRUNC((USEEDIT/512),0) * 2) REQUIRED FROM PSRECFIELD WHERE RECNAME = '&RECNAME'

Tuesday, March 27, 2012

Email Address Validation Function

Did some changes in the delivered code. Page fields were hard coded in the delivered code, made it dynamic.

Function validateEmailAddressEntry(&Email_Addr As string, &Page_Field As string)

Local string &Email_After@, &str_Host, &local_part, &Domain_part;
Local number &Loc@, &Loc_dot, &next_dot, &local_LENGTH, &Domain_length, &LOOP;
Local string &ALPHA_STRING = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-";
Local string &char_String = "#$%&'*+/=?^_`{|}~";
Local string &NUM_STRING = "1234567890";

&Email_Addr = RTrim(LTrim(&Email_Addr));

If All(&Email_Addr) Then
&Loc@ = Find("@", &Email_Addr);
&Loc_dot = Find(".", &Email_Addr);

&local_part = Substring(&Email_Addr, 1, &Loc@ - 1);
&Domain_part = Substring(&Email_Addr, &Loc@ + 1, Len(&Email_Addr) - &Loc@);
&local_LENGTH = Len(&local_part);
&Domain_length = Len(&Domain_part);
&Email_After@ = Substring(&Email_Addr, &Loc@ + 1, Len(&Email_Addr) - &Loc@);

/* The e-mail address must contain @ and . characters */
If &Loc@ = 0 Or
&Loc_dot = 0 Then
SetCursorPos(%Page, @(&Page_Field));
Error MsgGet(14100, 895, "The e-mail address must contain @ and . characters");
End-If;

/* The e-mail address shall not contain @ or . at the first character. */
If &Loc@ = 1 Or
&Loc_dot = 1 Then
SetCursorPos(%Page, @(&Page_Field));
Error MsgGet(14100, 896, "The e-mail address shall not contain @ or . at the first character.");
End-If;

/* Two at signs (@) are not allowed */
If (Find("@", &Email_After@) > 0) Then
SetCursorPos(%Page, @(&Page_Field));
Error MsgGet(14100, 899, "Two at signs (@) are not allowed");
End-If;

/* The e-mail address shall not contain - as the first character in Domain name. */
If (Find("-", &Email_After@) = 1) Then
SetCursorPos(%Page, @(&Page_Field));
Error MsgGet(14100, 900, "The e-mail address shall not contain - as the first character in Domain name.");
End-If;

/* The e-mail address shall contain atleast one character between @ and . */
If ((Substring(&Email_Addr, &Loc@ - 1, 1) = ".") Or
(Substring(&Email_Addr, &Loc@ + 1, 1) = ".")) Then
SetCursorPos(%Page, @(&Page_Field));
Error MsgGet(14100, 901, "The e-mail address shall contain atleast one character between @ and .");
End-If;

/* The e-mail address shall not contain @ or . at the last character. */
If ((Substring(&Email_Addr, Len(&Email_Addr), 1) = ".") Or
(Substring(&Email_Addr, Len(&Email_Addr), 1) = "@")) Then
SetCursorPos(%Page, @(&Page_Field));
Error MsgGet(14100, 897, "The e-mail address shall not contain @ or . at the last character.");
End-If;

If (&Loc_dot > 1) Then

/* */
&str_Host = Substring(&Email_Addr, &Loc_dot + 1, Len(&Email_Addr) - &Loc_dot);
&next_dot = Find(".", &str_Host);

While &next_dot > 0
If &next_dot = 1 Then
SetCursorPos(%Page, @(&Page_Field));
Error MsgGet(14100, 902, "The e-mail address shall contain atleast one character between . and .");
Break;
Else
&Loc_dot = &next_dot;
&Email_After@ = &str_Host;
&str_Host = Substring(&str_Host, &next_dot + 1, Len(&str_Host) - &next_dot);
&next_dot = Find(".", &str_Host);
End-If;
End-While;

If Len(&str_Host) < 2 Then SetCursorPos(%Page, @(&Page_Field)); Error MsgGet(14100, 903, "The e-mail address should contain atleast two characters after last ."); End-If; End-If; /* Validate that the local part consists of the ascii characters are described above for local part */ &LOOP = 1; While &LOOP <= &local_LENGTH /* check for alpha in the format */ If ((Find(Substring(&local_part, &LOOP, 1), &ALPHA_STRING) = 0) And (Find(Substring(&local_part, &LOOP, 1), &NUM_STRING) = 0) And (Find(Substring(&local_part, &LOOP, 1), &char_String) = 0)) Then SetCursorPos(%Page, @(&Page_Field)); Warning MsgGet(14100, 904, "Invalid character found in local part of email address."); Break; End-If; &LOOP = &LOOP + 1; End-While; /* Validate that domain name consists letters, digits and hyphens separated by dots */ &LOOP = 1; While &LOOP <= &Domain_length /* check for alpha in the format */ If ((Find(Substring(&Domain_part, &LOOP, 1), &ALPHA_STRING) = 0) And (Find(Substring(&Domain_part, &LOOP, 1), &NUM_STRING) = 0)) Then Warning MsgGet(14100, 905, "Invalid character found in domain part of email address."); Break; End-If; &LOOP = &LOOP + 1; End-While; /* Validate that the local part consists of at least 1 character before the @ sign but not more than 64 characters*/ If &local_LENGTH < 1 Or &local_LENGTH > 64 Then
SetCursorPos(%Page, @(&Page_Field));
Warning MsgGet(14100, 894, "Length of Local part of e-mail address before the @ sign must be >=1 and <= 64.");
End-If;

/* Make sure that atleast two characters are present between @ and . */
&Email_After@ = Substring(&Email_Addr, &Loc@ + 1, Len(&Email_Addr) - &Loc@);
&Loc_dot = Find(".", &Email_After@);
If (&Loc_dot = 0) Then
SetCursorPos(%Page, @(&Page_Field));
Error MsgGet(14100, 895, "The e-mail address must contain @ and . characters");

End-If;
End-If;

End-Function;

>> Tino Simon

Wednesday, March 21, 2012

Dynamic Field Visibility Control

This is a development best practice. You might already know this, however for those people who never used it; this will become handy for you.

There is a configuration page and you want to define what all fields need to be visible or invisible based on certain key values. The field names are stored in the physical table.

Then on the target page, do a CreateSQL and get the field names with the key values passed to it. Then in the while loop you can use the code snippet below. And the requirement is done.

&Field_Control = CreateSQL("”YOUR SQL”);
While &Field_Control.fetch(&Field_Name)
&record.GetField(@("field." | &Field_Name)).Visible = False/True;
End-While;

@ is the game setter here :)

Monday, March 5, 2012

Get a value from the XML

Okay so this is the scenario. You've got a response from the XML request you places via Integration Broker and you want to extract the data from a specific tag for further processing. The below code will help you to accomplish the same.

&lmsgGoRequest = CreateMessage(Operation.OPERATION_NAME, %IntBroker_Request);
&lmsgGoRequest.SetXmlDoc(&lxmlDoc);
&lmsgGoResponse = %IntBroker.SyncRequest(&lmsgGoRequest);
&MyDoc = CreateXmlDoc(&lmsgGoResponse.GenXMLString());
&field1List = &MyDoc.GetElementsByTagName("EMPLID");
WinMessage(&field1List [1].NodeValue);

&field1List is the array of the tags fetched from the XML (which you have specified) and NodeValue gives you the value of the tag.

Hope it helps!

Wednesday, January 25, 2012

Connected Query - PeopleCode Implementation

The link below the PeopleCode implementation of the connected query.

http://mfinchps.blogspot.com/2011/05/how-to-launch-connected-query-xml.html

Connected Query Feature

Forgot to post this for a long time. The below description I took it from PeopleBooks. Why to destroy its beauty :)

Starts here

Connected Query enables you to create a single XML file based on a set of queries with parent-child relationships.

A connected query is a hierarchical object built with existing PeopleSoft queries. A parent query can nest n levels of child queries and any child query can have m sibling queries within a hierarchy. No artificial limits exist for n and m, but typical use involves a single parent-child relationship or a few levels of nesting. Fields in a child query are mapped to related fields in the immediate parent query.

A connected query returns a hierarchical data set in which data returned by child queries is filtered by the results of its immediate parent query.

Connected queries are used to analyze data, supply to other systems with PeopleSoft data using Web Services, and create XML Publisher reports that use connected query as a Data Source.

Connected queries are significantly useful:

• To simplify task for a business user.

• User create a set of linked simple queries to collect data from multiple tables instead of creating a complicated query with multiple equal, outer joins, and grouping conditions.

• When two or more SQL statements are linked with left outer join to the same query.

• Connected Query enables you to collect data similar to query performing left outer joins. In contrast to query, Connected Query enables you to link multiple queries to a single parent query.

• As a tool in the process of replacing Crystal reports (that use subreports) with XML Publisher reports.

Crystal reports can include the main reports and a set of subreports that could be combined in the same template. Using Connected Query, you can replace a Crystal reports having main reports and sub-reports with XML Publisher reports.

• When outputs need to be in structured XML.

A simple query (including a query with multiple joins) creates a tabular plain layout. To have a hierarchical output, you need to use multiple grouping conditions that involve complicated logic and is not always straight forward. Connected Query processing creates a hierarchical output where a single row of data from parent query results in a set of rows in a child query. This data is processed row by row and produces structured data. It has similarity with SQR and Application Engine nested loops processing.

Instead of using Application Engine or SQR to collect data for file processing by XML Publisher, use Connected Query as the data collection tool because no conditional logic involves in this process. However, use SQR for processes with high volume of data or when high performance is required. You can quickly create a single parent-child relationship using the Connected Query Quick Start component (CQ_WIZARD), and create complex connected queries using the Connected Query Manager (PSCONQRS).