Navigate to PeopleTools > Portal > Portal Utilities > System Options and update "Maximum Columns" to 3.
Out Put:
Navigate to PeopleTools > Portal > Portal Utilities > System Options and update "Maximum Columns" to 3.
Out Put:
1. Obtain the row number of Prior Effective date row. Does not use row with same date and sequence number as itself.
Function prior_effdt_row(&EFFDT, &EFFSEQ, &PRIORDT, &PRIORSEQ, &PRIOR_ROW);
&ACTIVE_ROW = ActiveRowCount(JOB.EMPLID);
For &I = 1 To &ACTIVE_ROW;
&FETCH_EFFDT = FetchValue(JOB.EFFDT, &I);
&FETCH_EFFSEQ = FetchValue(JOB.EFFSEQ, &I);
If (&FETCH_EFFDT < &EFFDT Or
(&FETCH_EFFDT = &EFFDT And
&FETCH_EFFSEQ < &EFFSEQ)) And
(&FETCH_EFFDT > &PRIORDT Or
(&FETCH_EFFDT = &PRIORDT And
&FETCH_EFFSEQ > &PRIORSEQ)) Then
&PRIORDT = &FETCH_EFFDT;
&PRIORSEQ = &FETCH_EFFSEQ;
&PRIOR_ROW = &I;
End-If;
End-For;
End-Function;
2. Obtain the row number of Prior Effective date row. If it finds row with same effdt and seq row that is not itself, it uses that row.
Function prior_same_effdt(&EFFDT, &EFFSEQ, &CURRENT_ROW, &PRIORDT, &PRIORSEQ, &PRIOR_ROW);
&ACTIVE_ROW = ActiveRowCount(JOB.EMPLID);
For &I = 1 To &ACTIVE_ROW;
&FETCH_EFFDT = FetchValue(JOB.EFFDT, &I);
&FETCH_EFFSEQ = FetchValue(JOB.EFFSEQ, &I);
If (&FETCH_EFFDT < &EFFDT Or
(&FETCH_EFFDT = &EFFDT And
&FETCH_EFFSEQ <= &EFFSEQ)) And
(&FETCH_EFFDT > &PRIORDT Or
(&FETCH_EFFDT = &PRIORDT And
&FETCH_EFFSEQ > &PRIORSEQ)) And
&CURRENT_ROW <> &I Then
&PRIORDT = &FETCH_EFFDT;
&PRIORSEQ = &FETCH_EFFSEQ;
&PRIOR_ROW = &I;
End-If;
End-For;
End-Function;
3. Obtain the row number of Next Effective date row
Function next_effdt_row(&EFFDT, &EFFSEQ, &NEXTDT, &NEXTSEQ, &NEXT_ROW);
&NEXTDT = Date(30001231);
&NEXTSEQ = 9;
&ACTIVE_ROW = ActiveRowCount(JOB.EMPLID);
For &I = 1 To &ACTIVE_ROW;
&FETCH_EFFDT = FetchValue(JOB.EFFDT, &I);
&FETCH_EFFSEQ = FetchValue(JOB.EFFSEQ, &I);
If (&FETCH_EFFDT > &EFFDT Or
(&FETCH_EFFDT = &EFFDT And
&FETCH_EFFSEQ > &EFFSEQ)) And
(&FETCH_EFFDT < &NEXTDT Or
(&FETCH_EFFDT = &NEXTDT And
&FETCH_EFFSEQ < &NEXTSEQ)) Then
&NEXTDT = &FETCH_EFFDT;
&NEXTSEQ = &FETCH_EFFSEQ;
&NEXT_ROW = &I;
End-If;
End-For;
End-Function;
4. Obtain the row number of First Effective date row.
Function first_effdt_row(&FIRSTDT, &FIRSTSEQ, &FIRST_ROW);
&FIRSTDT = Date(30001231);
&FIRSTSEQ = 9;
&ACTIVE_ROW = ActiveRowCount(JOB.EMPLID);
For &I = 1 To &ACTIVE_ROW
&FETCH_EFFDT = FetchValue(JOB.EFFDT, &I);
&FETCH_EFFSEQ = FetchValue(JOB.EFFSEQ, &I);
If (&FETCH_EFFDT < &FIRSTDT Or
(&FETCH_EFFDT = &FIRSTDT And
&FETCH_EFFSEQ < &FIRSTSEQ)) Then
&FIRSTDT = &FETCH_EFFDT;
&FIRSTSEQ = &FETCH_EFFSEQ;
&FIRST_ROW = &I;
End-If;
End-For;
End-Function;
5. Obtain the row number of row matching date and sequence.
Function det_effdt_row(&EFFDT, &EFFSEQ, &ROW);
&ACTIVE_ROW = ActiveRowCount(JOB.EMPLID);
For &I = 1 To &ACTIVE_ROW
&FETCH_EFFDT = FetchValue(JOB.EFFDT, &I);
&FETCH_EFFSEQ = FetchValue(JOB.EFFSEQ, &I);
If &FETCH_EFFDT = &EFFDT And
&FETCH_EFFSEQ = &EFFSEQ Then
&ROW = &I;
&I = &ACTIVE_ROW
End-If;
End-For;
End-Function;
SELECT menu.menuname, compdfn.pnlgrpname, auth.classid permission_list, CLASS.classdefndesc permission_desc FROM psauthitem auth, psmenudefn menu, psmenuitem menuitm, pspnlgroup comp, pspnlgrpdefn compdfn, psclassdefn CLASS WHERE menu.menuname = menuitm.menuname AND menuitm.pnlgrpname = comp.pnlgrpname AND compdfn.pnlgrpname = comp.pnlgrpname AND compdfn.pnlgrpname LIKE UPPER (:component_name) AND auth.menuname = menu.menuname AND auth.barname = menuitm.barname AND auth.baritemname = menuitm.itemname AND auth.pnlitemname = comp.itemname AND auth.classid = CLASS.classid GROUP BY menu.menuname, compdfn.pnlgrpname, auth.classid, CLASS.classdefndesc ORDER BY menu.menuname, compdfn.pnlgrpname, permission_list;
SELECT a.portal_label AS PORTAL_LINK_NAME, a.portal_objname, a.portal_name, a.portal_reftype FROM psprsmdefn a, psprsmperm b, psclassdefn c WHERE a.portal_reftype = 'C' AND a.portal_cref_usgt = 'TARG' AND a.portal_name = b.portal_name AND a.portal_reftype = b.portal_reftype AND a.portal_objname = b.portal_objname AND c.classid = b.portal_permname AND a.portal_uri_seg1 <> ' ' AND a.portal_uri_seg2 <> ' ' AND a.portal_uri_seg3 <> ' ' AND c.classid = :permissionlist AND a.portal_name = :portalname ORDER BY portal_label;
SELECT DISTINCT b.menuname FROM psclassdefn a, psauthitem b WHERE a.classid = b.classid AND ( b.menuname = 'CLIENTPROCESS' OR b.menuname = 'DATA_MOVER' OR b.menuname = 'IMPORT_MANAGER' OR b.menuname = 'APPLICATION_DESIGNER' OR b.menuname = 'OBJECT_SECURITY' OR b.menuname = 'QUERY' ) AND a.classid = :PermissionList;
SELECT b.rolename, b.classid AS permission_list FROM psclassdefn a, psroleclass b WHERE a.classid = b.classid AND a.classid = :permissionlist;
6. User IDs assigned to a Permission List:SELECT c.roleuser AS USER_IDs FROM psclassdefn a, psroleclass b, psroleuser c WHERE a.classid = b.classid AND b.rolename = c.rolename AND a.classid = :permissionlist GROUP BY c.roleuser;
The following sample code can be used to Schedule App Engine through PeopleCode.
Code to Schedule App Engine thru PeopleCode:
Local ProcessRequest &MYRQST;
&MyAppName = "MY_APP";
&MYRQST = CreateProcessRequest("Application Engine", &MyAppName);
&MYRQST.RunControlID = "TEST";
&MYRQST.RunLocation = "PSUNX";
&MYRQST.Schedule();
If &MYRQST.Status = 0 Then /* if Schedule status is success */
End-If;
Code to know whether the scheduled App Engine ran to success or not:
If &MYRQST.Status = 0 Then /* if Schedule status is success */
&LOOP = 0;
While &LOOP = 0
SQLExec("SELECT A.DISTSTATUS, A.RUNSTATUSDESCR FROM PS_PMN_PRCSLIST A WHERE A.PRCSNAME = :1 AND A.PRCSINSTANCE = (SELECT MAX(B.PRCSINSTANCE) FROM PS_PMN_PRCSLIST B WHERE B.PRCSNAME = A.PRCSNAME)", &MyAppName, &POSTED, &STATUS);
If &STATUS = "Success" And
&POSTED = 5 Then /* Posted */
&LOOP = 1
End-If;
If &STATUS = "Success" And /* Not Posted */
&POSTED = 4 Then
&LOOP = 2
End-If;
If &STATUS = "No Success" Or
&STATUS = "Error" Then
&LOOP = 3;
End-If;
End-While;
If &LOOP = 1 Then
MessageBox(0, "", 27333, 594, ""); /* Success Msg */
Else
If &LOOP = 2 Or
&LOOP = 3 Then
MessageBox(0, "", 27333, 595, ""); /* Failed Error Msg */
End-If;
End-If; /* If &LOOP = 1 Then */
End-If;
The below function can also be used for schedule application engine: (Alternative Function)
Function ScheduleSetupAEProcess(&RESULT_SET_COMP)
&RUN_SETUP_AE_REQST = CreateProcessRequest("Application Engine", "PTLT_SETUP");
&REC_IMPL_RUN = CreateRecord(Record.PTLT_PROJ_RUN);
/* Run Control ID = Configuration Set Name */
&RUN_CNTL_ID = &RESULT_SET_COMP;
&RUN_SETUP_AE_REQST.RunControlID = &RUN_CNTL_ID;
&RUN_SETUP_AE_REQST.Schedule();
If &RUN_SETUP_AE_REQST.Status = 0 Then
&PROCESS_INSTANCE = &RUN_SETUP_AE_REQST.ProcessInstance;
/* Insert into Setup Manager Run Control Record */
&REC_IMPL_RUN.OPRID.Value = %OperatorId;
&REC_IMPL_RUN.RUN_CNTL_ID.Value = &RUN_CNTL_ID;
&REC_IMPL_RUN.PTLT_PROJ_NAME.Value = &RESULT_SET_COMP;
&REC_IMPL_RUN.PROCESSINSTANCE.Value = &PROCESS_INSTANCE;
If Not &REC_IMPL_RUN.Update() Then
&REC_IMPL_RUN.Insert();
End-If;
Else
Error MsgGet(218, 154, "Process cannot be scheduled");
End-If;
End-Function;
What is Object – Based PeopleCode:
• Introduced in PeopleTools 8
• Evolution of procedural-based PeopleCode
• Provides for complex object definitions
• Overcomes procedural data scope limitations
• Similar to Visual Basic notation
• Interpreted (like VB)
• Not completely object oriented (like C++), but it’s getting there!
• Does not support polymorphisms
• Does support multiple inheritance
• Backwards compatible
Why do we need Object Based PeopleCode:
• Greater ability to write generic code
• Release 8 Integration
1. Component Interface
2. Application Messaging
3. Business Interlinks
• Ability to define custom classes (Release 8.4)
1. Application Classes/Packages
2. Replaces FUNCLIB Processing
Advantage of Object and Methods:
• Tight code
• Syntax is validated*
• No or low maintenance required
Object – Based PeopleCode Rule:
• DECLARE the object
• INSTANTIATE the object
Below code can be used to avoid use of SQLExec.
SQLExec Code:
SQLExec to copy a row from ORD_HDR to ORD_HDR_EXT.
&ORD_NO = &NEW_ORD_NO;
SQLExec("select %timeout(order_dt), training_loc, vendor_cd, order_status, status_dt, deliver_method from ps_ord_hdr
where order_nbr = :1", &ORD_NO, &ORD_DT, &TRAIN_LOC,&VEND_CD, &ORD_STAT, &STAT_DT, &SHIP_VIA);
SQLExec("delete from ps_ord_hdr_ext where order_nbr = :1", &ORD_NO);
SQLExec("insert into ps_ord_hdr_ext (order_nbr, order_dt,training_loc, vendor_cd, order_status, status_dt,
deliver_method) values(:1,%datein(:2),:3,:4,:5,:6,:7)",&ORD_NO, &ORD_DT, &TRAIN_LOC, &VEND_CD, &ORD_STAT, &STAT_DT,&SHIP_VIA);
Same logic using Object Based code:
Local Record &REC1, &REC2;
&REC1 = GetRecord(RECORD.ORD_HDR);
&REC2 = CreateRecord(RECORD.ORD_HDR_EXT);
&REC1.ORD_NO = &NEW_ORD_NO;
&REC1.SelectByKey();
&REC1.CopyFieldsTo(&REC2);
&REC2.Delete();
&REC2.Insert();
While installing Tuxedo 10gR3_VS2005 oh higher you may get error because NLSPATH and TUXDIR registry may not be created properly.
So follow the below steps:
Step 1. Create a folder to install Tuxedo and specify the path in the registry as mentioned below.
Step 2. Add the registry content as mentioned below.
Add String value.
Then Edit String as follows.
Step 3. Run the Tuxedo setup.