<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-4937749025372274058</id><updated>2009-09-18T09:54:28.608-07:00</updated><title type='text'>War Diaries of an Oracle Apps Consultant</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ebsconsultant.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default'/><link rel='alternate' type='text/html' href='http://ebsconsultant.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Wham my testes</name><uri>http://www.blogger.com/profile/17360969032431930956</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4937749025372274058.post-7253037055882931837</id><published>2008-10-08T01:20:00.000-07:00</published><updated>2008-10-08T01:31:05.351-07:00</updated><title type='text'>Table statistics for staging / interface tables</title><content type='html'>Let's say you have an interface table which is usually empty. Let's say you also have a dilligent DBA who runs Gather Schema Stats periodically. Chances are the stats for this table will indicate that it is empty. This can lead to atrocious performance of queries involving this table when you actually fill it with data and run the associated interface program.&lt;br /&gt;&lt;br /&gt;In the past I'd resolve this by altering the interface program to explicitly gather stats for the table before executing. However, in 10g at least, there is a much more pleasant way to deal with this - at least for situations where there are only a few SQL operations over the data in the table (if there are lots then it might still be worth gathering stats once at the start of the operation).&lt;br /&gt;&lt;br /&gt;If Oracle encounters a table with missing statistics it will usually automatically do dynamic sampling of the table as part of determining the execution plan (unless dynamic sampling is turned off) - which is great!&lt;br /&gt;&lt;br /&gt;So all we want to do is:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Delete the statistics for the interface table&lt;/li&gt;&lt;/ul&gt;&lt;pre space="preserve" class="oac_no_warn"&gt;DBMS_STATS.DELETE_TABLE_STATS (&lt;br /&gt;  ownname          VARCHAR2,&lt;br /&gt;  tabname          VARCHAR2,&lt;br /&gt;  partname         VARCHAR2 DEFAULT NULL,&lt;br /&gt;  stattab          VARCHAR2 DEFAULT NULL,&lt;br /&gt;  statid           VARCHAR2 DEFAULT NULL,&lt;br /&gt;  cascade_parts    BOOLEAN  DEFAULT TRUE,&lt;br /&gt;  cascade_columns  BOOLEAN  DEFAULT TRUE,&lt;br /&gt;  cascade_indexes  BOOLEAN  DEFAULT TRUE,&lt;br /&gt;  statown          VARCHAR2 DEFAULT NULL,&lt;br /&gt;  no_invalidate    BOOLEAN  DEFAULT to_no_invalidate_type (&lt;br /&gt;                                    get_param('NO_INVALIDATE')),&lt;br /&gt;  force            BOOLEAN DEFAULT FALSE);&lt;br /&gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Lock the stats so that none are gathered the next time Gather Schema Stats is run&lt;/li&gt;&lt;/ul&gt;&lt;pre space="preserve" class="oac_no_warn"&gt;DBMS_STATS.LOCK_TABLE_STATS (&lt;br /&gt;  ownname    VARCHAR2,&lt;br /&gt;  tabname    VARCHAR2);&lt;br /&gt;&lt;/pre&gt;Now, every time our interface runs, Oracle will dynamically sample whatever data is in the interface table - which ought to result in a much better plan than one based on the assumption of an empty table.&lt;br /&gt;&lt;br /&gt;Best of all no code change was required.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4937749025372274058-7253037055882931837?l=ebsconsultant.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ebsconsultant.blogspot.com/feeds/7253037055882931837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4937749025372274058&amp;postID=7253037055882931837' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/7253037055882931837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/7253037055882931837'/><link rel='alternate' type='text/html' href='http://ebsconsultant.blogspot.com/2008/10/table-statistics-for-staging-interface.html' title='Table statistics for staging / interface tables'/><author><name>Wham my testes</name><uri>http://www.blogger.com/profile/17360969032431930956</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07208510287718225368'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4937749025372274058.post-4114737774079005383</id><published>2008-09-29T05:16:00.000-07:00</published><updated>2008-09-29T05:23:11.047-07:00</updated><title type='text'>Changing a user password programmatically</title><content type='html'>Silly users - always locking themselves out - forgetting their passwords and so forth. As indicated in a previous post - EBS can now be configured so that users can reset their passwords - having the new password emailed to the email address associated with their user account. However, not all clients enable this functionality.&lt;br /&gt;&lt;br /&gt;My current client is one such. Recently they managed to lock themselves out of all their System Administrator level accounts. These are the only accounts with the ability to reset user passwords. A bit of a catch-22 situation you might think???&lt;br /&gt;&lt;br /&gt;Fortunately Oracle have made it surprisingly easy to do a password reset programatically. Simply call:&lt;br /&gt;&lt;br /&gt;fnd_user_pkg.changepassword(&lt;user&gt;, &lt;new&gt;)&lt;br /&gt;&lt;br /&gt;It returns a boolean indicating success or otherwise. The new password must obey the relevant password policy or the reset will fail. The user will *not* be prompted to change this password the next time they log in.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4937749025372274058-4114737774079005383?l=ebsconsultant.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ebsconsultant.blogspot.com/feeds/4114737774079005383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4937749025372274058&amp;postID=4114737774079005383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/4114737774079005383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/4114737774079005383'/><link rel='alternate' type='text/html' href='http://ebsconsultant.blogspot.com/2008/09/changing-user-password-programmatically.html' title='Changing a user password programmatically'/><author><name>Wham my testes</name><uri>http://www.blogger.com/profile/17360969032431930956</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07208510287718225368'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4937749025372274058.post-688195895314696697</id><published>2008-07-29T00:40:00.000-07:00</published><updated>2008-07-29T01:15:48.199-07:00</updated><title type='text'>Fixing an Audit Tables cock-up</title><content type='html'>In the course of my current project I've been asked to set up some auditing against Budgets. To do this I'm going to use standard Oracle Apps AuditTrail functionality against the  GL_BALANCES tables. The auditted columns will be those that make up the primary key of the table and also the PERIOD_NET_CR and PERIOD_NET_DR columns.&lt;br /&gt;&lt;br /&gt;Whoever runs the Budget Import program will be the user recorded as having made the changes.&lt;br /&gt;&lt;br /&gt;During my testing on our development environment it became necessary for me to remove one of the columns being audited from the GL_BALANCES_A table (the table holding the audit data for GL_BALANCES).&lt;br /&gt;&lt;br /&gt;Oracle say you can't do this. Actually, as I found out later, Metalink Note&lt;small&gt; 383053.1 &lt;/small&gt;actually describes how to do this - but I tried the brute force approach of removing the audit table wholesale. This wasn't as straightforward as it might have been so I'm recording the steps here in case they may be useful for anyone else.&lt;br /&gt;&lt;br /&gt;As we're hitting the tables directly here - all usual disclaimers apply - use any of the below entirely at your own risk!&lt;br /&gt;&lt;br /&gt;If the table being auditted is MY_TABLE then to completely remove all trace of it from Auditting:&lt;br /&gt;&lt;br /&gt;Remove the triggers Oracle has created against MY_TABLE (probably called MY_TABLE_AC/AD/AH/AI/AT/AU)&lt;br /&gt;Remove the Procedures Oracle has created - probably called MY_TABLE_ADP/AIP/AUP.&lt;br /&gt;&lt;br /&gt;Execute:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;SELECT table_id from fnd_tables where table_name = 'MY_TABLE';&lt;/blockquote&gt;and make a note of the result - you will use this to clear down the FND_AUDIT_xxx tables.&lt;br /&gt;&lt;br /&gt;Drop the audit table itself - MY_TABLE_A;&lt;br /&gt;&lt;br /&gt;Execute the following:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;DELETE FROM FND_AUDIT_TABLES  WHERE table_id = &lt;table_id&gt;;&lt;br /&gt;DELETE FROM FND_AUDIT_COLUMNS WHERE table_id = &lt;table_id&gt;;&lt;/blockquote&gt;If you want to clear out the Audit Group you need to delete the relevant record from FND_AUDIT_GROUPS.&lt;br /&gt;&lt;br /&gt;If you want to disable the relevant application for auditing then you need to delete the relevant record from FND_AUDIT_SCHEMAS (this is the table that is updated when you tick the application in the Sys Admin / Security / AuditTrail / Install form.&lt;br /&gt;&lt;br /&gt;The above steps remove all trace of auditting from Oracle Apps and allow the developer to start again from a clean slate.&lt;br /&gt;&lt;br /&gt;Good luck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4937749025372274058-688195895314696697?l=ebsconsultant.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ebsconsultant.blogspot.com/feeds/688195895314696697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4937749025372274058&amp;postID=688195895314696697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/688195895314696697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/688195895314696697'/><link rel='alternate' type='text/html' href='http://ebsconsultant.blogspot.com/2008/07/fixing-audit-tables-cock-up.html' title='Fixing an Audit Tables cock-up'/><author><name>Wham my testes</name><uri>http://www.blogger.com/profile/17360969032431930956</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07208510287718225368'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4937749025372274058.post-4837208941066899732</id><published>2008-07-02T03:21:00.000-07:00</published><updated>2008-07-02T03:31:13.210-07:00</updated><title type='text'>Creating CSV files the (well - an) easy way</title><content type='html'>Recently I've been  asked to generate some GL extracts. Specifically:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A GL balance extract&lt;/li&gt;&lt;li&gt;An extract of the account segment values and descriptions&lt;/li&gt;&lt;li&gt;An extract of the hierarchies for the various account segments.&lt;/li&gt;&lt;/ul&gt;Now, whilst something like a hierarchy might seem an ideal candidate for expressing in XML format, my employer wants this generated the old fashioned .CSV way. I knocked up the below function which let's you generate your CSV data record as simply as:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt; v_file_line := csvize(t_stringlist('Contents of Field 1','Contents of "Field 2"',etc...));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can specify as many fields as you like and the function deals appropriately with strings containing the quote character (by double quoting them - which seems to be pretty standard).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  TYPE t_stringlist IS TABLE OF VARCHAR2(256);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  -- Format a list of strings as CSV &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  ----------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  function csvize(p_stringlist t_stringlist) return varchar2 is&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    deliminator constant char(1) := '"';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    separator   constant char(1) := ',';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    line VARCHAR2(1000);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  begin&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    FOR i IN p_stringlist.FIRST .. p_stringlist.LAST LOOP&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      line := line || deliminator || REPLACE(p_stringlist(i),deliminator, deliminator || deliminator) || deliminator;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      IF i != p_stringlist.LAST THEN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;        line := line || separator;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;      END IF;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    END LOOP;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    RETURN line;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;  end;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you find it useful, let me know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4937749025372274058-4837208941066899732?l=ebsconsultant.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ebsconsultant.blogspot.com/feeds/4837208941066899732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4937749025372274058&amp;postID=4837208941066899732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/4837208941066899732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/4837208941066899732'/><link rel='alternate' type='text/html' href='http://ebsconsultant.blogspot.com/2008/07/creating-csv-files-well-easy-way.html' title='Creating CSV files the (well - an) easy way'/><author><name>Wham my testes</name><uri>http://www.blogger.com/profile/17360969032431930956</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07208510287718225368'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4937749025372274058.post-308112764146485119</id><published>2008-06-30T05:14:00.000-07:00</published><updated>2008-06-30T05:27:08.363-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='login'/><category scheme='http://www.blogger.com/atom/ns#' term='apps'/><category scheme='http://www.blogger.com/atom/ns#' term='pl/sql'/><category scheme='http://www.blogger.com/atom/ns#' term='ebs'/><title type='text'>Logging into the Application from PL/SQL</title><content type='html'>When you're writing PL/SQL code it's pretty normal to want to pretend to be a particular user in a particular responsibility. That way you can write your code 'correctly' against the application views etc but still be able to test it in fine detail from your chosen PL/SQL IDE.&lt;br /&gt;&lt;br /&gt;BTW - my IDE of choice - and I've been using it for 10 years now - is the excellent &lt;a href="http://www.allroundautomations.com"&gt;PL/SQL Developer&lt;/a&gt;. It has an great integrated debugger for stepping line by line through your code.&lt;br /&gt;&lt;br /&gt;Here's a bit of code you can compile onto your dev environment and use in test scripts to simulate being logged in as a particular user.&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;CREATE OR REPLACE PROCEDURE apps_login(p_user_name VARCHAR2, p_resp_name VARCHAR2) is&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    /* Shamless Plug!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;       Visit ebsconsultant.blogspot.com */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    v_user_id    BINARY_INTEGER;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    v_resp_id    BINARY_INTEGER;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    v_app_id    BINARY_INTEGER;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    SELECT user_id &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    INTO   v_user_id &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    FROM   APPS.FND_USER &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    WHERE  user_name like p_user_name;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    select r.responsibility_id, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;           urg.responsibility_application_id &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    into   v_resp_id,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;           v_app_id&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    from   fnd_user_resp_groups urg, &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;           fnd_responsibility_vl r &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    WHERE  r.RESPONSIBILITY_NAME LIKE p_resp_name AND&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;               r.responsibility_id = urg.responsibility_id AND&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;               urg.user_id = v_user_id;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;               &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   dbms_output.put_line('user_id=' || v_user_id || ' resp_id=' || v_resp_id || ' app_id=' || v_app_id);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    FND_GLOBAL.APPS_INITIALIZE(v_user_id, v_resp_id, v_app_id);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;    FND_SIGNON.set_session(NULL);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;   COMMIT;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;END;    &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4937749025372274058-308112764146485119?l=ebsconsultant.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ebsconsultant.blogspot.com/feeds/308112764146485119/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4937749025372274058&amp;postID=308112764146485119' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/308112764146485119'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/308112764146485119'/><link rel='alternate' type='text/html' href='http://ebsconsultant.blogspot.com/2008/06/logging-into-application-from-plsql.html' title='Logging into the Application from PL/SQL'/><author><name>Wham my testes</name><uri>http://www.blogger.com/profile/17360969032431930956</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07208510287718225368'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4937749025372274058.post-837544939230940146</id><published>2008-06-27T02:01:00.000-07:00</published><updated>2008-06-27T02:11:41.473-07:00</updated><title type='text'>Automating Password Resets</title><content type='html'>As a freelance EBS Consultant I can end up in all sorts of roles. Sometimes I'm the functional lead for a module, sometimes I'm doing some hard core SQL geekery, but usually, no matter what exciting bits and pieces I'll be working on there is always (unless I'm lucky enough to be working on a greenfield implementation) the background hum of disgruntled users who need supporting.&lt;br /&gt;&lt;br /&gt;One common support task is resetting user passwords.&lt;br /&gt;&lt;br /&gt;Most grown up websites let the user automatically request a password reset if they can't remember, or if they've locked themselves out of their account.&lt;br /&gt;&lt;br /&gt;Since the reasonably early days of 11i Oracle Applications has also offered this functionality but at many clients it isn't enabled by default.&lt;br /&gt;&lt;br /&gt;If, when logging in through the web page (as opposed to logging in directly to the forms - see my posting &lt;a href="http://ebsconsultant.blogspot.com/2008/06/logging-into-forms-based-applications.html"&gt;here&lt;/a&gt; on how to quickly get into the forms applications) you don't see an option to allow you to reset your password, you need to do the following:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Find the system profile option called "Local Login Mask"&lt;/li&gt;&lt;li&gt;Add 8 to it's current value at the Site level.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Bounce the Application Server&lt;/li&gt;&lt;/ul&gt;Voila!&lt;br /&gt;&lt;br /&gt;Oracle uses standard Workflow functionality and email notifications to ensure the user wants their password resetting and notifying them of their new password.&lt;br /&gt;&lt;br /&gt;In order for the solution to work then, you need to make sure that Workflow Background engine is ticking along and that all your Users are mapped to email addresses - either directly through the User Define form in System Administrator, or through the user's mapping to a Person - and making sure the Person has an email address defined.&lt;br /&gt;&lt;br /&gt;At most sites this will already be in place - so this is a quick win to reduce the volume of support calls you'll be dealing with.&lt;br /&gt;&lt;br /&gt;A more detailed explanation can be found &lt;a href="http://oracle-apps-dba.blogspot.com/2008/03/forgot-your-password.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4937749025372274058-837544939230940146?l=ebsconsultant.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ebsconsultant.blogspot.com/feeds/837544939230940146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4937749025372274058&amp;postID=837544939230940146' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/837544939230940146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/837544939230940146'/><link rel='alternate' type='text/html' href='http://ebsconsultant.blogspot.com/2008/06/automating-password-resets.html' title='Automating Password Resets'/><author><name>Wham my testes</name><uri>http://www.blogger.com/profile/17360969032431930956</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07208510287718225368'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4937749025372274058.post-2374418322045091685</id><published>2008-06-26T01:47:00.001-07:00</published><updated>2008-06-26T01:53:06.351-07:00</updated><title type='text'>Logging into the Forms based applications directly</title><content type='html'>Back in the good old days, before Oracle decided that HTML based applications was the way to go - you used to log directly in to the Forms based application.&lt;br /&gt;&lt;br /&gt;You can still accomplish this - even I believe in R12 - but certainly all the way up to 11.5.10.2.&lt;br /&gt;&lt;br /&gt;Simply use a URL like:&lt;br /&gt;&lt;br /&gt;http://myappsserver.mycompany.com:[apps port number]/dev60cgi/f60cgi&lt;br /&gt;&lt;br /&gt;This will take you directly to the forms version of the application. I've used this approach for years and the only problem I've really found is that, once logged in this way, you can't use any menu options which would jump you back out a HTML bit of the Application. (e.g. Workflow Administrator stuff).&lt;br /&gt;&lt;br /&gt;I often just need to login to the Apps to make a targeted small change (e.g. change a system profile option). Having one desktop shortcut for each environment in the above format lets me dive in and out of the application much quicker than having to trawl through the web based login procedure.&lt;br /&gt;&lt;br /&gt;Something else that is useful I find is to colour my environments by&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4937749025372274058-2374418322045091685?l=ebsconsultant.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ebsconsultant.blogspot.com/feeds/2374418322045091685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4937749025372274058&amp;postID=2374418322045091685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/2374418322045091685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/2374418322045091685'/><link rel='alternate' type='text/html' href='http://ebsconsultant.blogspot.com/2008/06/logging-into-forms-based-applications.html' title='Logging into the Forms based applications directly'/><author><name>Wham my testes</name><uri>http://www.blogger.com/profile/17360969032431930956</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07208510287718225368'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4937749025372274058.post-303535409940052778</id><published>2008-06-26T01:42:00.000-07:00</published><updated>2008-06-26T01:46:50.160-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebs'/><category scheme='http://www.blogger.com/atom/ns#' term='applications'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Musing and Ramblings (not necessarily in that order)</title><content type='html'>I'm an Oracle Applications (E-Business Suite) consultant with a broad range of functional and technical experience acquired over 10+ years in the field.&lt;br /&gt;&lt;br /&gt;In this blog I hope to share with you random tit-bits I come across. Perhaps little bits of code/sql I've developed; maybe applications functionality that is interesting but rarely known  about; or maybe 3rd party solutions to some of the things that we just seem to keep having to do over and over again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4937749025372274058-303535409940052778?l=ebsconsultant.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ebsconsultant.blogspot.com/feeds/303535409940052778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=4937749025372274058&amp;postID=303535409940052778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/303535409940052778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4937749025372274058/posts/default/303535409940052778'/><link rel='alternate' type='text/html' href='http://ebsconsultant.blogspot.com/2008/06/musing-and-ramblings-not-necessarily-in.html' title='Musing and Ramblings (not necessarily in that order)'/><author><name>Wham my testes</name><uri>http://www.blogger.com/profile/17360969032431930956</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='07208510287718225368'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>