App Designer

App Designer Taking a Long Time To Load

If you find that application designer or data mover is taking a long time to load, it could be because tracing is turned on in your configuration manager settings. A good indicator that this is the case is to browse to your temporary files directory (%TEMP%) and look for a file called DBG1.TMP. If this file exists, and is growing steadily, then the application designer/data mover login process is being traced.

To check this and turn it off, open configuration manager, and browse to the Trace tab:

config-manager-trace-enabled.png

As you can see, there are a few trace options enabled there! Click on the Clear Trace Settings button (on the right), and press Apply and OK to turn off tracing and close down configuration manager.

You should now be able to login to application designer/data mover.

App Designer Keyboard Shortcuts

As PeopleSoft developers we spend a lot of time in Application Designer. To speed things up and make you more efficient, it helps to learn some of the common keyboard shortcuts. This wiki article provides a list of some of these shortcuts for your reference (and I'll keep adding to this list with contributions from the PeopleSoft community)

Note many of these shortcuts involve pressing the ALT key to active the menu and the correct sequence of letters quickly.

File Commands Shortcut
Save Current Definition CTRL + S
Save Current Definition As ALT + FA
Save All ALT + FL
Open a Definition CTRL + O
Find In (PeopleCode/SQL) ALT + EF
Definitions Shortcut
Get Properties ALT + ENTER
Tag for Upgrade ALT + EUT
Change Control Shortcut
Lock Definition ALT + TCL (CTRL+L sometimes works)
Unlock Definition ALT + TCU
Tools
Validate Project ALT + TV
Compare Report ALT + TR
Copy To Database ALT + TYD
Copy to File ALT + TYF
Windows
Close Definition CTRL + F4
Switch Definitions CTRL + TAB

App Designer Security

This wiki page covers how to manage and restrict Application Designer security through permission lists.

The first thing to do is identify all permission lists that provide access to the APPLICATION_DESIGNER menu using the following query:

select distinct CLASSID
from PSAUTHITEM
where MENUNAME = 'APPLICATION_DESIGNER'

Then, for each permission list, you will need to go into the permission list and modify the PeopleTools security. The navigation is:

PeopleTools > Security > Permissions & Roles > Permission Lists

You may also want to repeat this to remove definition security by searching for all permission lists with access to the OBJECT_SECURITY menu.

There are two options here:

  1. Untick Application Designer Access - this takes away all access
  2. Go through definition/tools/miscellaneous permissions and change them to an appropriate value

Generally people need application designer access but shouldn't be able to change anything, so the second options is what is needed. Select each of the hyperlinks:

And systematically modify the access as required. You can use the buttons to grant Full/Read Only/No access but double check the result as some changes may not (i.e, there are items that can only have full or no access, not read only).

Make sure you do this for all permission lists otherwise it will not work.

NOTE: anyone with the PeopleSoft Administrator role will automatically have access to application designer however this information is not stored in the database (it is an internal override).

Backup before Migrating a Project

One common problem with migrating Application Designer projects between your environments, is that when you migrate from one environment to another, you might clobber definitions by writing over the top of them. Compare reports will help you pick this up but I suggest also taking the following steps before migrating just in case you need to rollback any changes.

Here are the steps:

Now, if, unluckily you have clobbered a definition, and need it back, you can get it back from the backup file. It's not all that intuitive but it does give you a way to go back if required.

Show Hidden Borders

As of PeopleTools 8.52, there's a nifty application designer feature called "Show Hidden Borders" which displays the borders of page items that have the hidden border property set.

The setting is enabled in Application Designer through:

Tools > Options > General > Show Hidden Borders

This is an example of what this does on a group box where the borders have been hidden in the group box properties. Notice the dashed lines around the hidden border.

show-hidden-borders.png

Copying Fields to a new Record

This is a time saving tip for application designer. If you are creating a new record definition and you want all or most of the fields from an existing record, you can simply open the existing record, select the fields you want and drag them over to your new record as shown in the screenshot below.

copying-fields-to-a-new-record.png

Hold the SHIFT key and click on the first and last fields to select a group. Hold the CTRL key and click to select or deselect individual fields.

NOTE: If you attempt this in an environment with change control locking, this trick will not work if the source record you are copying the fields from is not locked by you. So you will need to first lock the source record (if appropriate) before copying the fields over.

Definition Not Copied Check Copy Options

While copying application designer projects, if you receive an error like this:

Definition Name RECNAME.FIELDNAME.FieldFormula not copied, check copy options (62,30)

It means that you did not selected the language type COMMON in your project copy options. This can happen if in the copy dialog, the user selects options and then selects a specific language (e.g. English).

app-designer-copy-options.png

Note this setting can continue to apply to a project even if another person is performing the copy. Behind the scenes this setting is stored in the PeopleTools table, PSPROJECTSEC.

The first workaround is to simply select all languages.

If this continues to be an issue the next time you copy the project, you may also need to remove the project rows from the table PSPROJECTSEC.

Portal Labels

When you register a component with the component registration wizard, there are a few places where you need to define the descriptive label for your component/content reference so it will show up correctly.

The component page item label sets the label for the tabs in your component.

portal-labels-component-pages.png

The menu item text sets the label for the search page.

portal-labels-menu-item-search-page-text.png

The content reference label sets the label on the portal menu and the content reference long description sets the description underneath. Note this can be set at the component registration phase or later through the portal structure and content setup.

portal-labels-cref-label-description.png

Record Lookup Exclusion

PeopleTools options allow for certain prompt records/tables to be excluded from an auto look up. This can be extremely useful when the prompt table deals with a large data set or has unavoidable slow performance, but still needs a prompt table for validation purposes.

A good example is the PEOPLE_SRCH view in PeopleSoft HRMS/Campus Solutions. This view is used for row level security and validation of EMPLIDs and used on a number of delivered search pages. If it is not excluded from auto look up, whenever a user gets to one of these search pages and presses the prompt button on the EMPLID field, the system performs a full search of all EMPLIDs! Slow to say the least.

To add a record/table to the look up exclusion list:

PeopleTools > Utilities > Administration > Lookup Exclusion Table

lookup-exclusion.png

Behind the scenes this is stored in the single table, PSRECXL.

Effective Dated SQL Definitions

An interesting property with standalone SQL definitions (not record-view SQL or application engine SQL) is that you can make them effective dated.

This is available in the Advanced tab when you look at the SQL properties (where you specify the description and comments). To enable effective dates, check the Show Effective Date check box.

Once enabled, an effective date option is available in the SQL definition and you can add new entries as shown.

effdt-sql-definition.png

As expected, the latest effective dated SQL definition less than or equal to the current date will be used. So you can have future effective dated rows that take effect from a certain date.

One of the benefits of this is that it lets you keep versions of your SQL, and you can track what changes were made over time.

There are a couple of drawbacks:

View Build Sequence

If you have views that depend on each other in an application designer a project, you'll soon run into a situation where if they are built out of order, the build process will error.

Fortunately there is a way to specify the order in which to build views: Build Sequence No which you can find in the Record Type tab of a view definition.

build-sequence-no.png

By default the value of this field is 1. You could specify a sequence for every view, but all you really need to do is increase the build sequence number of any views to be greater than the view they rely on (i.e greater than 1).

For example:

That way, BUILD_1ST_VW will always be built before BUILD_2ND_VW. Test by building all views and checking the build script to make sure BUILD_2ND_VW is further down in the script than BUILD_1ST_VW.

Repeat until you have a build script that is in the correct order for any build dependencies.

Page Field Size

Certain fields just don't display all that well when you select average for the page field settings in application designer. For such fields, consider using maximum to cater for the fact that there might be data that will be cut off otherwise.

An example where this was not done is the Run control ID field in the Schedule Jobset Items page:

PeopleTools > Process Scheduler > Schedule JobSet Definitions

example-average-field-size-issue.png

This turns out to be a real pain because if you have a long run control ID as you can't be quite sure exactly what value was entered into that field!

Migrations

Here's a checklist of steps when migrating Application Designer projects between a source and target database. For example the source might be a development environment and the target a test environment.

Source database

  1. Validate the source Project
  2. Compare the Project to the target environment. Ensure you have the right compare settings
  3. Check the upgrade flags for all object types and ensure they are correct (be especially wary of deletes)
  4. Copy the project to the target enviroment. Again, ensure you have the right copy settings
  5. Re-compare your project with the target enviroment and check the flags - make sure it seems everything has been copied

Target database

  1. Validate the project. This will more than likely tell you of most migration problems.
  2. Build the project script in the target environment with the appropriate build settings.
  3. Run the build script. Track if anything fails.

The most likely causes for the build script failing are the order in which the objects are created (e.g. a view is being built before a record that the view uses) or there are objects missing in the target environment (either left out of the project or due to a dependency on another project).

When the migration is complete:

Find Message Catalog Entries Missing From Your Project

When you're working on a large project in Application Designer, you can end up creating or updating a number of message catalog entries. Because this is done outside of Application Designer, there is a good chance you might end up leaving some of them out of your project.

The following SQL is my attempt to find message catalog entries that were modified in the last 14 days for a particular message set and to check whether or not they exist in your project definition. Obviously this isn't going to be accurate in all cases, but scanning through the results of the query may help you identify message catalog entries that were missed.

To use this SQL:

select
    MESSAGE_SET_NBR,
    MESSAGE_NBR,
    MESSAGE_TEXT,
    LAST_UPDATE_DTTM
from 
    PSMSGCATDEFN MCD
where 
    MESSAGE_SET_NBR = 99999
    and trunc(LAST_UPDATE_DTTM) >= sysdate - 14
    and not exists (
        select  1
        from    PSPROJECTITEM
        where   PROJECTNAME = 'YOUR_APP_DESIGNER_PROJECT'
        and     OBJECTTYPE = '25'
        and     OBJECTVALUE1 = MCD.MESSAGE_SET_NBR
        and     OBJECTVALUE2 = MCD.MESSAGE_NBR
    );

Dropping Tables for Deleted Record Definitions

While application designer makes it easy to delete record definitions, it doesn't drop the table or view in the database after the record definition has been deleted. So you can be left with orphaned tables or views that have no application designer record definition.

select
    RDEL.RECNAME,
    RDEL.VERSION,
    nvl(AT.TABLE_NAME, AV.VIEW_NAME) as TABLE_VIEW_NAME
from 
    PSRECDEL RDEL left outer join ALL_TABLES AT
    on RDEL.RECNAME = replace(AT.TABLE_NAME, 'PS_', '')
    left outer join ALL_VIEWS AV
    on RDEL.RECNAME = replace(AV.VIEW_NAME, 'PS_', '')    
where
    nvl(AT.TABLE_NAME, AV.VIEW_NAME) != ' '
;

The PSRECDEL table stores record definitions that have been deleted through application designer.

If you want, you can use the following query to automatically generate drop table and drop view statements for any orphaned tables or views that are found:

select    
    (case when AT.TABLE_NAME is null 
     then 'drop view ' || AV.VIEW_NAME || ';'
     else 'drop table ' || AT.TABLE_NAME || ';'
     end) as DROP_STATEMENT
from 
    PSRECDEL RDEL left outer join ALL_TABLES AT
    on RDEL.RECNAME = replace(AT.TABLE_NAME, 'PS_', '')
    left outer join ALL_VIEWS AV
    on RDEL.RECNAME = replace(AV.VIEW_NAME, 'PS_', '')    
where
    nvl(AT.TABLE_NAME, AV.VIEW_NAME) != ' '
;
NOTE: this SQL was written and tested on an Oracle database though it could be easily adapted to SQL server if required.

Impact Analysis

Impact analysis is about determining what impact if any a change made to a PeopleSoft definition will have. A classic scenario for example is what would happen if you increased the length of the EMPLID field? What other definitions and processes could potentially be impacted?

At minimum your impact analysis should cover:

You may also need to cover other batch objects such as nVision templates, Crystal Reports, Winword documents, XML Publisher reports etc. What I'm getting at is that a simple find-object references is not enough!

I've found the best way to perform an impact analysis is to grep the relevant files. I usually set up directory structure like this:

ImpactAnalysis
+ COBOLs
+ SQRs
+ PeopleCode
+ SQL

And place the relevant files in each.

You will need to export PeopleCode to a file. You'll also need to export/copy the contents of the table PSSQLTEXTDEFN to a file (e.g. CSV).

Software like SQLTools++ makes this pretty easy as you can export query results directly to a CSV file. TOAD and most other SQL clients can do something similar.

There are also custom tools like iMPACTUS! for this purpose you can look into.

Grid Row Selection Indicator

PeopleSoft grids have the option of using a single or multi-row selection indicator. A single row selection indicator is a radio button (one option) while a multi-row selection indicator is a check box. You can use this functionality to get the user to select the row(s) they are interested in.

These settings are in the page field properties of the grid (under the Use tab):

grid-row-selection-indicator.png

This all works really well, but what is the event triggerred by user when they use these selection indicators? Well, there isn't one — well not in the sense of a field change anyway. However, there is a Set Component Changed option in the grid properties, which, when set, will trigger a save event when the user sets or changes the selection indicator(s).

So, if a user selects a row in the grid (single selection radio button), when they press save, PeopleSoft will recognise this event and fire off any code in SaveEdit, SavePreChange, or SavePostChange.

Here is a snippet of PeopleCode you could use to process the row(s) selected by the user and perform an action:

Local Rowset &rs_YOUR_RECORD;
Local integer &i;
 
&rs_YOUR_RECORD = GetLevel0()(1).GetRowset(Scroll.YOUR_RECORD);
 
For &i = 1 to &rs_YOUR_RECORD.ActiveRowCount
 
    If &rs_YOUR_RECORD(&i).Selected = True Then
        /* This is a row selected by the user, do something here */
    End-If;
 
End-For;

Target Operator ID has No Access to Upgrade

If you are attempting to migrate a project between environments through application designer you might get a message saying:

Target Operator ID has 'No Access' to Upgrade. (62,14)

In the explain text, it states that:

In order to access the target database, your target Operator ID must have 'Full Access' to Upgrade. This setting can be changed in the target database by launching Security Administrator and editing the APPLICATION_DESIGNER menu item.

So it sounds like a security issue, but what's missing?

Start by querying the PSAUTHITEM record for the menu suggested - APPLICATION_DESIGNER:

select distinct CLASSID
from PSAUTHITEM
where MENUNAME = 'APPLICATION_DESIGNER'
and AUTHORIZEDACTIONS > 0

This will give you a list of the permission lists (CLASSID) that have access to APPLICATION_DESIGNER menu. Now you need to check if you have any access to any of them:

select OPRID, OPRCLASS
from PSOPRCLS
where OPRID = 'YOUR_OPRID'
and OPRCLASS in (
    select distinct CLASSID
    from PSAUTHITEM
    where MENUNAME = 'APPLICATION_DESIGNER'
    and AUTHORIZEDACTIONS > 0
)

No access? Well you'll need to give yourself a role with one of the permission lists that has access. Find such a role with this query:

select distinct ROLENAME
from PSROLECLASS
where CLASSID in (
    select distinct CLASSID
    from PSAUTHITEM
    where MENUNAME = 'APPLICATION_DESIGNER'
    and AUTHORIZEDACTIONS > 0
)

Filtering Upgrade Options

App designer allows you to filter the upgrade options for your project definitions. To use this feature, open a project, then choose:

View > Filtering

app-designer-filtering-options.png

Here's a brief summary of the options available:

Setting What it does
No filtering (default) Shows you everything, filtering is turned off
Tagged for upgrade Shows only those definitions with the Upgrade flag set (checked)
Not Tagged for upgrade Shows only those definitions with the Upgrade flag not set (unchecked)
Done Shows only definitions with the done flag set (checked)
Not Done Shows only definitions with the done flag not set (unchecked)
Custom Filtering Gives you the full set of target/source filtering options as a matrix

You can use Tagged/Not tagged for upgrade in conjunction with Done/Not Done. Giving you four combinations:

Using custom filtering gives you the follow options matrix:

custom-filtering-matrix.png

This lets you choose any combination of customisation levels between your source and target environments after a compare report. For example, if you click on the report filter button, you'll get the source/target differences for your customisations. Note to use this option, you first need to do a compare report between your source and target environment for your project. It uses the information in the source, target and action columns of your upgrade tab for each definition type. You also get these same report filter settings when you perform a compare report in the report filter tab.

Record Naming Conventions

This is the naming convention (prefixes/suffixes) recommeded by PeopleSoft in PeopleBooks for Record objects. Make sure you use the appropriate suffix based on the record type to be consistent with this convention.

Prefixes

Prefix Description
AUDIT_ Identifies record definitions that store audit information for other records.
DERIVED_ Identifies shared record definitions (across an application module or group) that have fields for PeopleCode events.
FUNCLIB_ Identifies record definitions that contain written PeopleCode functions, as opposed to built-in functions. You can include these records in the component and call them as functions. These self-developed functions are generally located in FieldFormula events, and the records are usually derived.
R_ Identifies work record definitions for Structured Query Report reports. The remainder of the record name consists of the program or report ID.
WEBLIB_ Identifies record definitions that store internet scripts. Internet scripts are generally located in FieldFormula PeopleCode events. You must grant access in the Security component for a WEBLIB record with an internet script before it can be run in a PeopleCode program.

Suffixes

Suffix Description
_DVW Identifies a dynamic view.
_TBL Identifies an edit or prompt table that contains data that is used for validation, as opposed to data that is maintained by the application. Prompt tables store commonly used values. They include, but are not limited to, control tables, which store company-wide values. For example, the location table (LOCATION_TBL) stores values for all operating locations in which your company does business; the country table (COUNTRY_TBL) stores values for all valid countries.

Note this is the convention for setup tables - transaction tables do not normally have the underscore _TBL suffix
_QVW Identifies a query view.
_SBR Identifies subrecords (partial records that are used in other record definitions for common fields)
_VW Identifies a record definition that is physically implemented by defining a SQL view.
_WL Identifies the record as a worklist record definition.
_WRK Identifies derived work records.

Dynamic Views

Dynamic views are SQL statements executed on the fly by the PeopleSoft component processor. This is different to a regular PeopleSoft view which is a database view that needs to be built and exists in the PeopleSoft database.

So why use dynamic views? Well, they are really handy for situations where you need slightly different combinations of the same underlying SQL. They are also good for really simple views that you don't want to store in the database. Another useful application is to use them as hollow views for application packages.

However the best application I have found for dynamic views is when you have the scenario where you have slightly different combinations of the same underlying SQL and you need different key/search key/alternate search key combinations.

Here's an example using Campus Solutions. Say you have a prompt table that caters for four scenarios:

This can be simplified into a truth table based on the fields campus and academic group like so:

Scenario Campus Academic Group
Scenario 1 True True
Scenario 2 True False
Scenario 3 False True
Scenario 4 False False

You could create four views and alter the keys and SQL accordingly. However, you would then have four almost identical views that don't really serve any purpose in the database other than for your prompts.

The other solution (provided the view is not too complicated) is to create four dynamic views, each with the appropriate keys and SQL and use these as prompts. These only exist as objects in the PeopleSoft database and don't need to be built as database views. In this respect, dynamic views are really about minimising development overhead.

One very important thing to note about dynamic views - they are limited in the complexity of the SQL they can handle. Typically, you should be selecting from one underlying table/view as joins may not always work or cause performance issues.

PeopleTools Definitions

The following is a list of the PeopleSoft Definition Types as of PeopleTools v8.48 mapped with the numerical representations of these object types used in the PeopleTools tables:

Change Control

Change control is used in Application Designer to lock definitions and track the history of changes to definitions. This shouldn't be mistaken with version control, it is simply a mechanism for indicating that a developer is working on a particular definition and to keep a history of who has modified a particular definition and why.

You should have change control activated in your master development environment.

Change control is activated through Application Designer using:

Tools > Change Control > Administrator

The options are to:

Once change control locking and history are turned on, you'll also have the ability to lock all definitions through change control administrator.

Depending on your version of PeopleTools, locking and unlocking definitions may not be that intuitive.

Generally there are a few ways to lock a definition (providing it is unlocked):

Similarly there are a few ways to unlock a definition:

Sometimes these two ways just don't seem to work (in particular on Application Packages!). In that case, you need to find who has the object locked (you can find this out by opening the object and reading the message dialog). Then navigate to:

Tools > Change Control > View Locked Definitions.

Specify the definition type, and then the user. Right click on the definition you want to unlock and select Unlock Object.

Change control security is defined through permission lists. Specifically, under PeopleTools permissions for the permission list and Tools permissions. The delivered PTPT1200 permission list is a good example to look at.

There are three levels of access:

On larger development teams you'll want to limit who has Supervisor Access to avoid people working around change control locking and development processes.

Reusing Fields

Wherever possible you should re-use fields in PeopleSoft rather than creating your own. This minimises customisations and if used appropriately it reduces development effort. A good compromise you can achieve with fields is that you can use an existing field but add a new label if the field format is fine but the field label does not suit.

Its always a good idea in any case to do a quick search before creating a new field. The following query will help you find fields for reuse:

NOTE: this SQL was written for Oracle databases but shouldn't be hard to convert.
select
    F.FIELDNAME,
    (case
        when F.FIELDTYPE = 0 then F.FIELDTYPE || ' = Character'
        when F.FIELDTYPE = 1 then F.FIELDTYPE || ' = Long Character'
        when F.FIELDTYPE = 2 then F.FIELDTYPE || ' = Number'
        when F.FIELDTYPE = 3 then F.FIELDTYPE || ' = Signed Number'
        when F.FIELDTYPE = 4 then F.FIELDTYPE || ' = Date'
        when F.FIELDTYPE = 5 then F.FIELDTYPE || ' = Time'
        when F.FIELDTYPE = 6 then F.FIELDTYPE || ' = DateTime'
        when F.FIELDTYPE = 8 then F.FIELDTYPE || ' = Image OR Attachment'
        when F.FIELDTYPE = 9 then F.FIELDTYPE || ' = ImageReference'
        else 'Unknown' end) as FIELDTYPE,
    L.LABEL_ID,
    L.LONGNAME,
    L.SHORTNAME,
    L.DEFAULT_LABEL,
    F.LENGTH,
    F.DECIMALPOS,
    F.FORMAT,
    F.FORMATLENGTH,
    F.IMAGE_FMT,
    F.FORMATFAMILY,
    F.DISPFMTNAME,
    F.DEFCNTRYYR,
    F.IMEMODE,
    F.KBLAYOUT,
    F.DESCRLONG,
    F.LASTUPDDTTM,
    F.LASTUPDOPRID
from
    PSDBFIELD F inner join PSDBFLDLABL L
    on F.FIELDNAME = L.FIELDNAME
where
    F.FIELDTYPE = 'field_type_0-9'
    and F.FIELDNAME like '%field_search%' 
    and L.LONGNAME like '%label_search%'
order by
    F.FIELDNAME
;

Simply replace the field_type_0-9 with the appropriate numeric code (not sure what happened to field type 7?):

Then replace %field_search%with your partial field name search e.g. %OPR% or replace %label_search% with a partial label search e.g. %User%. If you want to wild card either of these, just use a single %.

You may want to add more restrictive conditions such as the field length (e.g. LENGTH = 30) or if you want to get adventurous, the appropriate field format code but you'll have to reverse engineer that one yourself.

No Colon Page Field Property

PeopleSoft delivers a property No colon which you can set in the label tab of any page field with a label. By default this field is checked meaning that the label will not have a colon (:) character put at the end of its text.

label-no-colon-property.png

Unfortunately, the the default setting for every new field is for the No colon property to be set even though PeopleSoft delivered pages usually have colons in field labels.

So, when you are developing a page, you need to manually go through and unset the No colon property on every field with a label. If you've done this in the past, you'll know that this can get rather tedious!

An alternative is to update the value in the PeopleTools table. This property is the LBLLOC field in the record PSPNLFIELD. A value of 1 in the LBLLOC field means the No colon property is on (default). A value of 0 will turn it off. However, you want to be careful that you only change this value if the field has a label ID (LABEL_ID) and the label type (LBLTYPE) is greater than 0 (there is a label being used).

The following SQL will find any pages in your project where the No colon property is set and the page has a field with a label. Remember to replace {PROJECT_NAME} with the name of your project.

select
    PNLNAME,
    PNLFIELDNAME,
    FIELDTYPE,
    LABEL_ID,
    LBLTYPE,
    LBLLOC
from
    PSPNLFIELD
where
    PNLNAME in (
        select OBJECTVALUE1 as PNLNAME
        from PSPROJECTITEM
        where PROJECTNAME = '{PROJECT_NAME}'
        and OBJECTTYPE = 5
    )
    and LABEL_ID != ' '
    and LBLTYPE > 0
    and LBLLOC = 1
;

Now, provided you accept the risks of updating a PeopleTools table, here is the update statement you would use to unset the No colon property on all page fields that have a label for a given page. Remember to replace {PAGE_NAME} with the name of the page.

update PSPNLFIELD
set LBLLOC = 0
where PNLNAME = '<PAGE_NAME>'
and LABEL_ID != ' '
and LBLTYPE > 0
and LBLLOC = 1;
NOTE: while I've tested and haven't had any issues, I do have to caution that this is a modification to a PeopleTools table and could have unexpected results.

Also, caching can cause you grief. If you find that after you have run the update statement, colons are still not appearing, try altering something slightly on the page in application designer, resetting it and then saving the page. This should cause the colons to start appearing.

Designing Pages

There are a few things you can do to make editing pages with Application Designer a little easier.

NOTE: that you need a page definition open to access these features.

Select Group

Use select group (or the big hand cursor as I like to call it) to select multiple objects and move them together.

This is the select group toolbar icon:

select-group-toolbar-icon.png

This is the big hand cursor:

big-hand-cursor.png

Default Ordering

Use default ordering to reset your tab ordering once you have your fields in right order in your page order tab. This will make sure that when the user presses the tab key, their cursor moves correctly through the data entry fields (and doesn't jump around everywhere) - quite important from a usability standpoint.

This is the default ordering toolbar icon:

default-ordering-toolbar-icon.png

Grid Layout Settings

Change your grid settings for finer-grain movement of page objects. From the menu:

Layout > Grid Settings

Reduce the spacing from the default (width = 4px, height = 4px) to width = 2px and height = 2px. This will put the dots on your grid closer together and let you move objects with more accuracy.

NOTE: that if you reduce this to width = 1px and height = 1px the grid is not shown by default. If you do show the grid, everything goes black (because there's no gap between the dots).

page-finer-grid-layout.png

Test Mode for Tab Order

Use the Test Mode toolbar icon to test your tab order. This is what test mode is for. Click on the test mode switch then try pressing tab through the fields to make sure the cursor moves in the order you expect.

This is the test mode toolbar icon:

test-mode-toolbar-icon.png

Testing in Different Web Browsers

Configure browsers and test your page out in AS MANY browsers as possible. Use:

Layout > View in Browser

This is heaps faster than saving and refreshing pages, especially if the navigation to your page is not simple! Also, you can test your page layout without actually saving the page. So no more changing page layouts and saving hundreds of times (which is even more painful when using change control locking). Once you learn to use this, it will save you hours!

When you use the view in browser feature you can also view the page source to see things like scripts and stylesheets associated with that page.

Page Field Settings

This wiki page is dedicated to explaining the page-field settings available on the properties of a field on a page in Application Designer. Some of these settings may not do what you expect and have some caveats that are worth knowing about.

The size of a page-field can be set in the size attribute of the page-field properties for that field (under the record tab).

page_field_size_settings.png

Size is dependent on the following:

The following size options are available for each field:

NOTE: custom is not supported on all browsers so be careful.

The following page-field display options are available under the "Record" tab of page-field properties. They are used to control how the page field will display the data it contains/entered into it.

page_field_display_options.png

Display Zero

This will display a zero instead of blanks for a numeric field. Can be useful to display zeros instead of blanks to indicate that field is not in fact empty.

Display Century

Displays a date with a four digit century. Allows users to enter a different century to the current one based on system date (e.g. 1907 when the system date year is 2007). If this option is not set, and user enters 07 it will be set to 2007.

Password

Hides the value entered in the field and sets them to the asterisk character (****).

Currency Symbol

Displays the currency symbol based on regional settings. Will increase the size of the field!

Show Prompt Button

Shows the prompt button next to the edit box.

1000 Separator

Automatically displays thousand separator character (e.g. 1,000,000)

Auto Fill

Auto fills with the specified auto-fill character. Direction of auto-fill depends on field alignment. Fill character is specified in the fill character box. Be careful with this one as auto fill may change the value of the field and what is stored in the database.

Auto Decimal

Will automatically enter a decimal point if none is provided on data entry.

Display Time Zone

Displays the time zone on a date/time field.

Enable Spell Check

Enables spell check option on the field. See the Message Catalog explanation text box for a delivered example of how spell check works.

Setting the Processing Mode

You can set processing modes (deferred/interactive) at a number of different levels.

Processing modes follow a bottom-up approach from Page-Fields to the component.

Page-Fields Properties > Use > Allow Deferred Processing
Page Properties > Use > Allow Deferred Processing
Component Definition > Allow Deferred Processing
Component Properties > Internet > Processing Mode
NOTE: that setting processing mode at the component will determine whether or not the refresh button appears on the component toolbar. The refresh button is only required for deferred processing.

Automatic Login

As a developer you need to sign in to application designer a LOT.

Unless you have single sign on this means entering your user name and password on a regular basis. Even after installing PeopleTools locally and setting up your own configuration file, you'll still need to enter your password and change databases as required.

Here's an alternative. Create the following batch script in the same folder as pside.exe (usually %PS_HOME%\bin\client\winx86) and call it pside.bat.

Warning! Make sure only do this on your local PC and not a network share as the batch script will contain your PeopleSoft password.
@echo off
start pside.exe -CT <DBTYPE> -CO <USERNAME> -CP <PASSWORD> -CD %1

Modify this code as follows:

To run this script, simply call it as follows from the command line:

$ pside.bat <DBNAME>

Or from the run dialog box as:

%PS_HOME%\bin\client\winx86\pside.bat <DBNAME>

Remember to replace %PS_HOME% with the local root folder of your PeopleSoft files.

DBNAME is the name of the PeopleSoft database you are connecting to (e.g. DMO). If you call it without the <DBNAME> parameter it will simply sign you into the last environment you were in (providing your credentials are correct).

If you have multiple environments and want to create desktop shortcuts for each one, follow these instructions:

Note that these MUST exist in the same directory as pside.exe.

Create a desktop shortcut by dragging each of the scripts to your desktop Right click on the properties of each script and in the target box enter the database name in the target box after pside.bat as shown:

pside-shortcut.png

If you use different user names and passwords for different environments, simply modify the batch script for each environment and specify the appropriate user name in the -CO parameter and the appropriate password in the -CP parameter.

You could also just hard code the environment instead of %1 in the batch script itself. So replace %1 with DMO for connecting to the demo database.

NOTE that as far as I'm aware you can only use command line parameters to log into application designer and data mover in 2-tier (database) mode. I haven't found a way to use 3-tier (application server) mode, so if you know how, please comment.

Deleting Definitions

Occasionally you may create definitions in your development environment that you discover you no longer need.

For example, I recently created a URL definition through:

PeopleTools > Utilities > Administration > URLs

You can put a URL definition into an application designer project using:

Insert > Definitions into Project or CTRL + F7

But you can't modify it directly through application designer. If you go back to where you create URL definitions you'll find there isn't a way to delete a URL once it has been created (that I know about). I want to remove the URL since it is no longer necessary and I don't want to leave it in my development environment as it may cause confusion. So what do you do?

Well, you can be brave and attempt to work out which PeopleTools table(s) the definition lives in and then delete it from the appropriate table(s). Sure, that will work, but are you sure you deleted from all the relevant tables and that it won't cause other issues?

A better approach is to use the delete flag to export the project to a file, then to re-import the project from file and delete the definition.

Here is how you do this:

Before you start, I strongly suggest making a file backup of your project by copying it to file (make sure your upgrade flags are set accordingly to copy everything). Also it mind be prudent to try this on a test environment first.

Create a project and find the relevant definitions. In the upgrade tab change the action to delete for each definition you want to delete and ensure that the upgrade flag is ticked.

It is a good idea to create a project just for that purpose and with only the definitions you want to delete so you don't accidently delete anything else.

Copy (export) your project to file using:

Tools > Copy Project > To File

Next copy (import) your project file back to your database using:

Tools > Copy Project > From File

Find your exported project and press select. In the dialog presented, make sure you use the project definition from the database. Why? Because if you use the project definition from the file you may accidentally replace your project definition with an incomplete version (based on what you exported in the first place).

When you choose the definition types to copy, just select the one want to delete in e.g. URL definitions. This is precaution to ensure you don't overwrite/delete anything else. Press Copy.

Check that the definition has been deleted by either checking in PeopleSoft or by using:

Insert > Definitions into Project (CTRL + F7) and searching for the definition.

Hopefully it is gone (and nothing else that you didn't expect).

If the definition doesn't need to be removed from any other environments, I suggested deleting it from your project through the upgrade tabs. I would also perform a Tools > Validate Project to ensure the integrity of your project.

One of the real benefits of this approach is that it tracks what was deleted in the appropriate PeopleTools delete record (if there is one). For example, deleted URLs are stored in the record PSURLDEL with the version of the definition that was deleted.

It also ensures that version numbers are maintained so you don't run into issues with your PeopleTools version numbers. Much safer and easier than trying to find and delete the definition from the PeopleTools tables.

Browser Compare Reports

I find that browser compare reports are a lot easier to use than standard compare reports as they provide a nice dash-board style interface that lets you drill down from a high level summary of differences to the individual differences in definitions. They also provide a nifty search option.

To generate a browser compare report: perform a compare and report as usual in app designer.

Tools > Compare and Report

compare-report-options-browser-reports.png

Note the report output directory (C:\Oracle\PeopleSoft\reports in the example). This is where the browser reports will be generated. You can also change the font size and settings.

If you want to change the output location of the browser reports, you can set it in:

Tools > Options > General (tab).

Once the report has been generated, you can open it by double clicking on the Browser Report Created message that appears in the application designer output window:

open-browser-compare-report.png

Alternatively, you can navigate directly to the report output directory and open the file CompareViewer.html.

If you can't open the file CompareViewer.html make sure that you have the setup folder in your PS_HOME directory, particularly if you have installed PeopleTools locally.

You can also generate browser compare reports by running application designer through the command line. To do so:

NOTE: that migrate project generates browser compare reports for you with the compare option.

Here's an example of the syntax you would use to generate a browser report by calling pside.exe (application designer) from the command line:

pside.exe -HIDE -PJM %project% -CT %dbtype% -CO %user% -CP %pwd% -CD %srcdb% 
-TD %tgtdb% -TO %user% -TP %pwd% -QUIET -AF 0 -DDL 1 -PPL 0 -CFD 0 -CFF 0 -CMT 1 -TGT 1 
-ROD %browser_report_dir% -CMXML 1

Run this from the directory where pside.exe is located OR add this directory to your system path. Replace the following parameters accordingly:

Migrating Web Services

Once you've developed a component interface based web service, how do you migrate it between environments?

I've found the best way is to migrate just the component interface (and security if appropriate) and then to recreate the CI-based service and provide the web service. This is a lot cleaner than copying IB definitions (services, service operations, handlers, routings etc) between environments as you still need to validate the CI-based service in the target environment and provide the web service again.

Migrating the IB definitions also leads to multiple versions being created that aren't used, and therefore more definitions than what is actually necessary. This is because you need to validate the CI based service, recreate the operations and provide the web service again.

This article goes through how to migrate your web services between PeopleSoft environments including the additional steps required to get your web service up and running again.

The steps involved are:

Create and migrate the project

Create a new application designer project and add your component interface to it. If appropriate add the permission list(s) that give you access to your component interface. Alternatively, you can set up security in your target environment to give you access to the component interface after the migration.

Create the CI-Based service

The steps here are the same as what is covered in detail in the article on CI-based web services. Briefly, they are:

PeopleTools > Integration Broker > Web Services > CI-based services

Provide the web service

Again the steps here are what is covered in detail in the article on CI-based web services. Briefly they are:

PeopleTools > Integration Broker > Web Services > Provide Web Service

Confirm that your web service is working using the WSDL URL.

Deleting a web service

You can use the deleting definitions application designer trick to delete a web service and all corresponding IB definitions.

First, create the delete project. Then, select Insert > Definitions into Project (or CTRL + F7) and select a definition type of Services. Find your web service name (e.g. CI_MESSAGE_CATALOG) and highlight all the related definitions and insert them all into the project as shown in the screenshot below:

import-service-definitions-into-a-project.png

Next, go into upgrade view and open up one of the definition categories. In the window that appears, right click and select Set Action for Project followed by Delete as shown:

set-action-for-project-to-delete.png

If deleting from the same environment, copy the project to file and then re-import it. If deleting in another environment, migrate the delete project to that environment.

Verify that the web service has been deleted by navigating to the following and confirming that your web service no longer exists.

PeopleTools > Integration Broker > Web Services > Provide Web Service

Tips for Creating Views

Generally you should try to re-use views whenever possible and PeopleSoft has literally thousands of them so have a look first.

The majority of views I've created are to return the latest effective dated/sequenced/active rows from a table. I refer to these as current data views. So my view name usually includes the CURR in the name which is short for current. For example, a view for current people's names in the system might be called:

PB_CURR_NAME_VW

Remember, you have 15 characters to work with:

That leaves you with 9 characters, one of which is probably going to be an underscore (_) to separate words. So think about that when you go to name your view.

A few other tips when creating a new view that you want others to use:

Project Verification Checklist

This article provides a check list of steps you might want to perform for your application designer project after you have finished your initial development and before migrating it to other environments for testing.

Yes, this takes a bit of work, but it will ensure the internal consistency of your project and save you a lot of time and effort after migration. Trying to figure what is missing from the migration of a large project can be very frustrating, especially when you have a small outage window to get it into production!

Internal Documentation

This refers to the description and comments for PeopleTools definitions that you can modify through application designer.

Project Validation

This is about ensuring that you don't have any invalid or stray definitions in your project and that the definitions in your project are valid.

Upgrade Options

You need to check your upgrade options to ensure all relevant definitions are migrated correctly to other environments (and that nothing has been missed).

Unlock Definitions

This is about ensuring that you don't leave any definitions unlocked. You can also perform a mass unlock of definitions if you find you have a lot of them locked and want to unlock them all at once.

Copying Projects

Copying to a File

Before copying any project to file, make sure you have verified the following:

1 . Navigate to the Upgrade tab in Application Designer (normally this is on the Development Tab) 2. Go through each definition (Component Interface, Component, Page, Record, Field etc) and verify that they all have an action fo Copy (where appropriate) and that the Upgrade flag is ticked. Any definitions where this is not the case WILL NOT be copied to file.

You can also use the following SQL to check your project. Verify that UPGRADEACTION is set to 0 for Copy and TAKEACTION is set to 1 for Upgrade.

select
    OBJECTTYPE,
    OBJECTVALUE1,
    OBJECTVALUE2,
    OBJECTVALUE3,
    OBJECTVALUE4,
    UPGRADEACTION,
    TAKEACTION
from PSPROJECTITEM 
where PROJECTNAME = 'YOUR_PROJECT_NAME';

Once you have verified these setting you can then copy your project to a file.

NOTE: that some PeopleSoft definitions will NOT copy to a file. For example: Message Catalog Entries and Roles.

Copying from a File

This means importing a project from a file.

There are two files associated with all exported projects:

The .ini file contains meta-data about the project while the .xml file contains the actual project definitions, so it can be quite large. There are some catches when copying a project from a file to watch out for:

The above situations will cause the copy from project dialog to not show the project in the list box. So if you think you are in the right folder but can't see the project file, check these conditions.

Validating a Project

The validate project command in Application Designer is very important for ensuring that your project is correct before migration. It checks that your objects are valid (especially components and component interfaces) and finds any invalid definitions that you should remove or fix before migration. The command is located in Application Designer under:

Tools Menu > Validate Project

A good tip is to perform validate project on a project after it has been migrated to the target environment. This provides signs of any migration issues. Migration issues found through validate project are typically the result of objects missing in the target environment.

You should ensure that you have the appropriate validate options selected:

Tools Menu > Options > Validate (tab)

At least the following should be enabled:

Project has been updated by another user

If you are migrating projects between environments and you have modified the project in the target environment, copied the project from the source, then tried to save the project in the target environment without reloading it first, you will get an error along the lines:

PROJECT - ENG has been updated by another user. (3,2)

This is PeopleSoft telling you that there are synchronisation (version) issues between the project in the database and the one you are trying to save. For this case you can simply reload the project using these steps in Application Designer:

File > New Project [OK] File > Open > [Your Project]

However, if you get nastier errors like this:

Illegal uncommitted SQL cursor detected. Close down all windows and reboot. (22,3)

Then it really is time to close and restart Application Designer (and possibly even restart your PC)! Don't keep working with such errors, you'll pay for it as Application Designer will most likely crash soon!