Wednesday, August 27, 2014

Bookmarklet for Oracle Support

This is a bookmarklet I use for Oracle Support, it has been working for a couple of weeks. Click the button below to copy the bookmarklet and search it for the sting "your.email@domain.com" and replace this with your Oracle sign on email address and replace the 'yourpassword' text with your Oracle support password. If want to make it more secure you can add a input similar to the switch user bookmarklet in the previous post.

Bookmarklet for Switching Users

Here is a neat bookmarklet for switching users for testing purposes.  It requires the user id and password to be the same, this is pretty common testing scenario.

Had to make some modifications to the orginal posting to allow it to work with IE, but leaving my original bookmarklet below that works well with Firefox and Chrome.  Use the Click to Copy button to copy the bookmarklet to your clipboard.

javascript:var pswd = prompt("Enter TestUser", "");if (pswd!= null) {var1=window.top.location.pathname.match(/^\/ps[pc]\/(.+?\/)(.+?\/)(.+?\/)/);l=window.top.location.origin;l=l+"/psp/"+var1[1]+"?cmd=login";d=document;f=d.createElement("form");h=d.createElement("input");h1=d.createElement("input");f.setAttribute("method","post"); f.setAttribute("action", l);h1.setAttribute("type","hidden");h1.setAttribute("name","pwd");h1.setAttribute("value",pswd );h.setAttribute("type","hidden");h.setAttribute("name","userid");h.setAttribute("value",pswd);f.appendChild(h);f.appendChild(h1);d.body.appendChild(f);f.submit();}

Thursday, August 7, 2014

Rebuilding Component Interface's Structure

We have added custom pages to components like JOB_DATA and PERSONAL_DATA to track organization specific data associated to those transactions.  I consider these types of customization as high value as they tend to meet the business needs without much maintenance.  But one of the maintenance cost is rebuilding the component interfaces that are built off of these two components, often when you add a custom page to the component you will need to also modify the delivered component interface's structure.  Simply search for objects that related to your modified component and start opening the component interfaces, if you get this error message then you should rebuild the CI's structure.


Simply open the CI and search for the Red 'X' over the Collection that needs to be rebuilt.


In the image above you can see that the COLL_JOB_USF needs to be fixed, to correct this delete the Collection and re-add it back to the CI.  Then you will need to re-label all the Properties to "PROP_" or "KEYPROP" and the Collection to "COLL_".  The Collection is of just one item so just key that manually, however the Properties can be a whole bunch of items.  In this example I had 125 to key, use the sql below to update all the properties to 'PROP_'.


UPDATE PSBCITEM SET BCITEMNAME = 'PROP_'||BCITEMNAME  WHERE   bcname = ':1' AND BCITEMPARENT = ':2';

:1 = CI_JOB_DATA
:2 = COLL_JOB_USF

Then add the 'KEY' to the KEY fields in the Collection.

Tuesday, July 15, 2014

Quick Macro for Scanning PeopleCode Compare Reports

Today I am preparing for our Upgrade and I was doing some analysis on the Record PeopleCode Compare reports that I had saved as Tab Delimited text files and imported into excel.  What I was doing was analyzing the deltas and documenting the event I found them.  This analysis would occasionally require me to scroll 100's of excel rows without finding a change in event or code!  This was starting to frustrate me.

Compare Report for Record PeopleCode

What I needed was a Macro that could scan the report for me and stop on either the column 1 having a value or column 8 having a value; both are highlighted in red above.  This was my simple Macro that I executed when I wanted to quickly scan to the next change or to the next event.

Sub scan()
Dim i As Long
Dim s As Long
Dim o As Long
 s = ActiveCell.Row
 For i = ActiveCell.Row To Rows.Count
  
 If Cells(i, 8).Value > " " Or Cells(i, 1) > " " Then
  o = i - s + 1
  ActiveCell.Offset(o, 0).Select
  
  Exit For
 End If

Next i
End Sub

Thursday, July 10, 2014

Technology Radar

Being in IT for the past 15 years I have learned that technology changes quickly and what is hot today, often is not relevant tomorrow.  This makes learning new technology challenging as you don't want to invest your time into something you will have no use for in the future!  Since then I have learned about the Technology Radar, this website can help IT Staff, Managers and even CTO's keep current on the latest trends and stay on top of the ever changing landscape that is IT.

Tuesday, July 8, 2014

8.53 tools Site Name Bug

We recently upgraded our tools from 8.51 to 8.53 in preparation for our 9.2 Upgrade and by far this tools upgrade has caused us more issues then any tools upgrade I can remember.  The most dubious issue we have discovered is related to our Interaction Hub's site name.  We use the string 'PSP' in our site name and this was preventing the delivered Activity guides from working and we opened a case with vendor regarding this issue and they recommended that we remove the "PSP" from our site name as they knew about the bug, but they had not begun analyzing the fix.

We considered modifying or site name, but the effort would have caused a delay in our upgrade project and we were not willing to move our date to remove the "PSP" from our site name.  So I was asked to analyze the delivered JavaScript and determine the root cause of the "PSP" bug.

I traced the issue to the following Regular Expression that attempts to derive the URI from the current location.  Below is the Regular Expression:
      
       /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\

I have bolded the “?” since this appears to be the issue with the expression above.  A question mark tells the regular expression to match on one or zero times on the last “/”.  This means that the expression will match anything that begins with ‘/psc’ or ‘/psp’.  So if you remove the ‘?’ from the expression it will match only ‘/psc/’ or ‘/psp/’.    I believe this is the fix to the Sitename issue.


Below are all the locations I have modified in Portal, HCM and FIN to fix this Bug.

 

Portal

Searching for match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^...
EPPSC_ADDSC_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("/psp/", "/psc/");
PORTAL_REFRESHPAGE.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PORTAL_REFRESHPAGE.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp','psc');
PORTAL_REFRESHPAGE.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PORTAL_REFRESHPAGE.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0];
PTAI_NAVSUBPAGEHTML.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psp", "psp");
PTAI_PAGELET_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAL_JS_PAGE.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psp", "psc");
PTPANEL_PAGELET_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psp", "psc");
PT_COMMON.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0];
PT_COMMON.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PT_COMMON.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp','psc');
PT_HP2_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PT_HP2_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0];
PT_IFRAME_HDR_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PT_IFRAME_HDR_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp','psc');
PT_PORTAL_AS_JS.4 -- match(/\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp', 'psc'),
21 occurrence(s) have been found.

HCM


Searching for /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\...
PORTAL_REFRESHPAGE.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PORTAL_REFRESHPAGE.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp','psc');
PORTAL_REFRESHPAGE.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PORTAL_REFRESHPAGE.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0];
PTAI_NAVSUBPAGEHTML.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psp", "psp");
PTAI_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAL_JS_PAGE.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psp", "psc");
PTPANEL_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psp", "psc");
PT_COMMON.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0];
PT_COMMON.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PT_COMMON.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp','psc');
PT_HP2_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PT_HP2_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0];
PT_IFRAME_HDR_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PT_IFRAME_HDR_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp','psc');
PT_PORTAL_AS_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp', 'psc'),


FIN

Searching for /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\...
PORTAL_REFRESHPAGE.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PORTAL_REFRESHPAGE.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp','psc');
PORTAL_REFRESHPAGE.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PORTAL_REFRESHPAGE.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0];
PTAI_NAVSUBPAGEHTML.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psp", "psp");
PTAI_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAI_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psc", "psp");
PTAL_JS_PAGE.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psp", "psc");
PTPANEL_PAGELET_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace("psp", "psc");
PT_COMMON.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0];
PT_COMMON.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PT_COMMON.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp','psc');
PT_HP2_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PT_HP2_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0];
PT_IFRAME_HDR_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//);
PT_IFRAME_HDR_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp','psc');
PT_PORTAL_AS_JS.4 -- /\/ps(c|p)\/?([^\/]*)?\/?([^\/]*)?\/?([^\/]*)?\//)[0].replace('psp', 'psc'),
20 occurrence(s) have been found.

Wednesday, June 4, 2014

Unified Navigation Setup

If you are looking for a good resource for setting up Unified Navigation check out this Blog Post at Remote PSAdmin.  Now if you get through this blog and everything is working through the folder setup, but not in your Navigation Collections? Then you need to look a these additional setup steps.


One, make sure all users have access to the PTCS_GETAUTHORIZATION service operation in all environments that are going to utilize Unified Navigation.  This Service Operation is used in the PORTAL_CREF_ADM.PORTAL_OBJNAME FieldFormula peoplecode when building the user's homepage to determine if they have access to links within Navigation Collections or Pagelets from remote nodes.  


Second, make sure that your portal URI for your content provider matches the Integration Broker node for that content provider. So when you define a remote node for a navigation collection and you use the HRMS node in your Portal environment there is a function, isIBNetworkNode, in the PORTAL_CREF_ADM.PORTAL_OBJNAME FieldFormula peoplecode that is using the Portal URI to match the Portal Node to the Integration Broker node.  If this function cannot match your HRMS nodes Portal URI to an Integration Broker portal URI then it will not fire the message from step one and your Navigation Collection link will not be presented to your users.

  
HCM nodes defined in my Portal Environment.