<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>Martin Millmore&apos;s Blog</title>
      <link>http://blogs.oracle.com/millmore/</link>
      <description>Director, HCM Core Development</description>
      <language>en</language>
      <copyright>Copyright 2009</copyright>
      <lastBuildDate>Mon, 16 Jun 2008 14:12:14 +0000</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>New blog platform</title>
         <description><![CDATA[<p>Welcome to the new blog platform! Oracle has just migrated to use MovableType, which give bloggers more control and flexibility than our old platform. Despite the warning about losing old comments, the team found a way of preserving them, so that's great news too.</p>]]></description>
         <link>http://blogs.oracle.com/millmore/2008/06/new_blog_platform.html</link>
         <guid>http://blogs.oracle.com/millmore/2008/06/new_blog_platform.html</guid>
        
        
         <pubDate>Mon, 16 Jun 2008 14:12:14 +0000</pubDate>
      </item>
            <item>
         <title>iRecruitment anti-virus solutions</title>
         <description><![CDATA[<p>I periodically get a worried e-mail about the iRecruitment anti-virus support, asking why we haven't certified X, Y or Z company for use with iRecruitment. There's clearly a lot of confusion about this topic, so I thought it best to clarify.</p>

<p>The anti-virus software that most of us are familiar with is the software on our PCs. This software typically scans files as they arrive on our PC in various ways such as sent via e-mails, that we download from the internet, and which are loaded from removable media, like CDs or memory sticks, and other more obscure ways too. They also run a periodic scan of your hard drive to check for files that have viruses that it was not able to catch on the way in, either because the virus was not known to them at the time, or they arrived by sneaky means that it was not able to detect.</p>

<p>The basic requirements for anti-virus checking for iRecruitment are similar to the PC requirements. We ideally want to stop any files with viruses from being uploaded, and we want to periodically check our existing files for viruses that were not known at the time of upload. It's worth noting at this point that, as of today, there are no <span style="font-style: italic;">known </span>ways in which a virus in an uploaded file can effect the database or the server. The reason we are checking for viruses is to protect those who download the files again, not to protect the database from internal attack. </p>

<p>If you don't have any virus checking of the files which are being stored on the database, there are two main defenses against getting viruses when downloading the files to your PC. The first one is the most obvious - you have up to date anti-virus software on your PC. That will stop any viruses from being downloaded, provided your anti-virus software is working correctly and is up to date. The second method is simply not to download the files. Sounds flippant? Not really. iRecruitment has an excellent html view of documents, so you can look at a Word or PDF resume as html in the iRecruitment screens without ever downloading the file and exposing yourself to potential viruses.</p>

<p>If you don't want to rely on your PC anti-virus software being good enough then you have a few further options. If that is the case though, you probably want to start thinking about not letting your users browse any web sites outside of your company though, because there are some serious nasties out there for the unprotected. That said though, belt and braces isn't going to hurt here.</p>

<p>The first option is a Gateway product. Most anti-virus companies sell something like this, but the name varies between companies. What it does is it scans all your internet traffic, and - amongst many other things - it will stop a file with a virus from being uploaded to any server. That includes iRecruitment. So a product like this will automatically stop any <span style="font-style: italic;">known </span>virus from being uploaded. There is no configuration for iRecruitment required, because this product monitors all data coming through your firewall, regardless of it's destination. Pretty neat.</p>

<p>The second option is the internal Symantec option. This is the option that some customers mistakenly think is what we are saying is the only option. This is <span style="font-weight: bold;">not </span>the only option, but it is the one that we had to do some special work for, as opposed to the previous options which all operate in complete independence of iRecruitment. Because we had to build code and you have to set up profile options to configure it, this is the one that you notice in our documentation.</p>

<p>The Symantec solution works by directly integrating with an anti-virus web service, so that iRecruitment can control the virus checking. The way this works is when a user attempts to upload a file, we stream it to the web service (typically running on one of your own servers), which validates it is virus free, and cleans or blocks it if it is not. We then either stop the upload and warn the user if the file has a virus, or save it to the database if it is clean. This is a nice user experience that integrates well with iRecruitment. </p>

<p>What I have described so far offers no additional security beyond the Gateway products, which all check for the incoming files. If you think about your PC solution though, it scans incoming files, and it also does a periodic check of existing files. The second thing that we therefore do though is we periodically use the web service to scan the existing files stored in the database for any virus definitions that were not known of at the time that they were uploaded. There is always a lag between virus creation time and the virus checking tools being able to detect them, so this is an important step too. If a virus is detected in an existing file, we will clean the file or delete it if that is not possible. </p>

<p>With this solution, the only product we have ever found which can do this is the <a href="http://www.symantec.com/business/products/overview.jsp?pcid=2242&amp;pvid=836_1">Symantec Anti-Virus Scan Engine</a>. This uses the open standard ICAP protocol to talk with any third party software that wants to check files. It's simple to use, and it is very effective. Some customers assume that the reason that we only directly integrate with Symantec is because we have an exclusive partnership with them (although they have been helpful, there is no formal iRecruitment partnership with Symantec, and Oracle typically avoids exclusive relationships anyway), or because we don't like other vendors (we like everyone - we are very loving people really), or because we are lazy (it's a hive of activity here. Honest!). None of those are the reason - the reason is that there are simply no other products out there that do this. We have looked long and hard, and not found any at all. If you are an anti-virus provider who does offer a similar product, please let us know, and chastise your partnership departments for not knowing about them when we contacted them. If you don't offer such a product, perhaps you want to think about building one? </p>

<p>And if you are a customer who is angry at us for not "supporting" your preferred vendor - don't get mad at us please. Read this article. After reading it, if you think you still need a product like Symantec's in addition to all of the other virus protection you already have, get mad at your anti-virus vendor for not providing any suitable product.</p>]]></description>
         <link>http://blogs.oracle.com/millmore/2008/02/irecruitment_antivirus_solutio.html</link>
         <guid>http://blogs.oracle.com/millmore/2008/02/irecruitment_antivirus_solutio.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">anti-virus</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">iRecruitment</category>
        
         <pubDate>Thu, 07 Feb 2008 10:40:09 +0000</pubDate>
      </item>
            <item>
         <title>Development methodology at Oracle</title>
         <description><![CDATA[<p>I'm not really a process person. I really like to just get stuck in and get on with things. The last thing that I want to do is to do documentation, and pre-documentation and pre-pre-documentation. I like to just try things out without wasting time before I get stuck in. At least that's the way I used to be, and some of the time that's the way that Oracle used to be. I came across this article today by Shae Allen called <a href="http://biznik.com/biztalk/digg_this.html">If Architects Had To Work Like Web Designers</a>. Have a read. It's very funny, and it is an extreme but recognisable caricature of the way we sometimes found ourselves working. Not all of the time - we were typically pretty methodical, even in my team. But just sometimes, it was a bit like that.<br><br>A couple of years ago though, John Wookey decided that he wanted to stamp down on that, and introduce rigorous enforcement of best development practices, based on best industry practices. I even got involved in designing the standards myself, looking at our code review process. For that, much of our inspiration was taken from books like <a href="http://www.amazon.com/Peer-Reviews-Software-Practical-Guide/dp/0201734850/ref=si3_rdr_bb_product/102-4493433-6484129">Peer Reviews in Software: A Practical Guide</a> by Karl E. Wiegers and <a href="http://www.amazon.com/Winning-Software-Executive-Watts-Humphrey/dp/0201776391/ref=pd_sxp_grid_pt_0_2/102-4493433-6484129">Winning with Software: An Executive Strategy</a> by Watts S. Humphrey. We weren't the only team. There were over 20 other teams looking at other aspects of our development practices, and the best suggestions from all of us have been put in to practice in Oracle now. Most importantly of all though, the Oracle management team all bought in to the process. Without that, we would still be the architect described in Shae's article.<br><br>So, what's the result of this? My Core HR team is one of the first to work our way through the life-cycle of our new processes. It was a hard sell to the developers. The changes involved front loading a lot more work. More design steps, more reviews, more methodology. It has taken a lot longer for us to get to the code stage than we had in the past. But we have produced far better code for it, and it will <strike>spend far less time in testing</strike> have fewer iterations of re-testing issues found by QA than in the past, because we have beaten the bugs out of the code before it gets to that stage. It wasn't easy, but we are all now converts to our new processes.&nbsp; Even me.<br><br><font size="2">[Edit: Clarified reduced QA time needed. Thanks Paul]</font><br></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2007/06/development_methodology_at_ora.html</link>
         <guid>http://blogs.oracle.com/millmore/2007/06/development_methodology_at_ora.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">Fusion</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">methodology</category>
        
         <pubDate>Fri, 22 Jun 2007 19:09:33 +0000</pubDate>
      </item>
            <item>
         <title>Network Rail iRecruitment site skin</title>
         <description><![CDATA[<p>I recently got sent a message by the implementation team at Network Rail (the organization who run all of the railway infrastructure in the UK) to say that they have just completed implementing iRecruitment with a Network Rail specific skin. You can access their site at <a href="http://www.networkrail.co.uk/" target="_blank">http://www.networkrail.co.uk/</a>, and then drill down through the Careers link if you want to have a look.<br><br>They have changed the banners and navigation at the top and bottom of the screen to match the rest of their site, and changed the fonts and colour schemes to match the rest of the site. It looks almost seamless to me, and I think that they have done a great job. Well done guys, and thanks for letting me know about it.<br><br>Has anyone else used skins to change the appearance of their site? It would be great to see some more examples.<br></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2007/06/network_rail_irecruitment_site.html</link>
         <guid>http://blogs.oracle.com/millmore/2007/06/network_rail_irecruitment_site.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">iRecruitment</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">skins</category>
        
         <pubDate>Thu, 21 Jun 2007 15:41:55 +0000</pubDate>
      </item>
            <item>
         <title>Applications Running Through a Firewall</title>
         <description><![CDATA[<p>I still get asked quite a few questions about how to secure Oracle Applications when running through a firewall. This is a very common request for iRecruitment customers who want to have Candidate and Agency functionality available outside of their firewall, and is also a fairly common request from SSHR customers these days, who want to have functionality like the Employee Verification available outside of their firewall. I thought it would therefore be useful to put a note here to let people know where to find that information. There is a great note on metalink, number <a href="http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&amp;p_id=287176.1">287176.1</a>, which has all of the information which you need to know about configuring 11i to run through a DMZ, and note <a href="http://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&amp;p_id=380490.1">380490.1</a> for configuring R12.</p>]]></description>
         <link>http://blogs.oracle.com/millmore/2007/02/applications_running_through_a.html</link>
         <guid>http://blogs.oracle.com/millmore/2007/02/applications_running_through_a.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">SSHR</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">firewall</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">iRecruitment</category>
        
         <pubDate>Mon, 05 Feb 2007 14:48:10 +0000</pubDate>
      </item>
            <item>
         <title>Release 12 Is Available</title>
         <description><![CDATA[<p>Some great news for everyone - Release 12 of Oracle Applications is now Generally Available! We are all really pleased to see this go out to customers, and really happy with the quality and the functionality that we have in there. There is a <a href="http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=59792&amp;src=4938562&amp;src=4938562&amp;Act=11">launch event</a> with John Wookey and Charles Phillips for everyone who is interested. There are lots of details about the new functionality on all products on metalink, but why not check out <a href="http://blogs.oracle.com/schan/2007/01/25/">Steven Chan's</a> blog for details of that.<br><br>From the perspective of my team, there are several great things in particular about this milestone release;<br><br>1) We have been working hard on this functionality for several years, with great new features in Core HR, like global transfers, and checklists. We know that many people are really keen to use these new features, and it makes it all worthwhile when we see people benefiting from the things that we have produced. <br><br>2) We don't have to keep apologising to customer for not being able to discuss R12 dates. We don't like that, and we know you don't like it either. But we have to do it for legal things like SOX. It does lead to some fun conversations, like this one though;<br><br><div style="margin-left: 40px;"><span style="color: rgb(204, 0, 0);">C<font size="2">USTOMER</font>: Just exactly when is R12 going to be released then?</span><br><span style="color: rgb(51, 51, 255);">M<font size="2">E</font>: Frightfully sorry, but I'm not allowed to comment on that.</span><br><span style="color: rgb(204, 0, 0);">C<font size="2">USTOMER</font>: </span><span style="color: rgb(204, 0, 0);">OK, so when's Fusion going to be released?</span><br><span style="color: rgb(51, 51, 255);">M<font size="2">E</font>: </span><span style="color: rgb(51, 51, 255);">That's easy. We are currently targeting 2008</span><br><span style="color: rgb(204, 0, 0);">C<font size="2">USTOMER</font>: </span><span style="color: rgb(204, 0, 0);">And can I upgrade from R12 to Fusion?</span><br><span style="color: rgb(51, 51, 255);">M<font size="2">E</font>: </span><span style="color: rgb(51, 51, 255);">Yes, we are planning to allow upgrades to Fusion from 11.5.10 and from R12, as well as some E patch levels too.</span><br><span style="color: rgb(204, 0, 0);">C<font size="2">USTOMER</font>: </span><span style="color: rgb(204, 0, 0);">Great, so obviously R12 has to be out before Fusion in 2008 if you are going to allow me to upgrade from it.</span><br><span style="color: rgb(51, 51, 255);">M<font size="2">E</font>: </span><span style="color: rgb(51, 51, 255);">Please don't get me fired by making me acknowledge that.</span><br></div><br>3) We can now really start to concentrate on Fusion, which is our opportunity to not just add new features that you are interested in, but to re-architect the system to not just suit the HCM business space the way it is today, but the way it will be in 5 years time. We have some great vision of where the area is going, with increased globalization, and even higher expectations for system integration and maintainability, and we have some great plans for how to get there. Release 12 is a great step along that road for customers, featuring much of the Fusion tech stack, and I would encourage everyone to look to moving to that release over the coming months.<br></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2007/01/release_12_is_available.html</link>
         <guid>http://blogs.oracle.com/millmore/2007/01/release_12_is_available.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">R12</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">iRecruitment</category>
        
         <pubDate>Tue, 30 Jan 2007 12:25:11 +0000</pubDate>
      </item>
            <item>
         <title>Quality Award</title>
         <description><![CDATA[<p>I had a great week this week, because on Monday I got a special mention in John Wookey's All Hands meeting. The department is looking at things which we can do to improve quality and efficiency, and some time ago&nbsp;John threw out an open invitation to submit ideas, with the best 5 winning a prize. I was very pleased and surprised to have submitted a winning idea, as well as Gopi Tummala saying that I should have his job. I don't want his job, but it was nice of him to say so! I'm now looking forward to getting my "I'm bug free" t-shirt in the mail.</p>]]></description>
         <link>http://blogs.oracle.com/millmore/2006/11/quality_award.html</link>
         <guid>http://blogs.oracle.com/millmore/2006/11/quality_award.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">Fusion</category>
        
         <pubDate>Fri, 17 Nov 2006 13:44:27 +0000</pubDate>
      </item>
            <item>
         <title>OpenWorld</title>
         <description><![CDATA[<p>Getting up to speed in my new role as director of Core HR has kept me very busy for the past couple of months. We have been working very hard both on Release 12, and on Fusion. At last I am getting a chance to get out of the office and to meet customers again at OpenWorld next week. I'm going to be part of the <A href="http://www.oracle.com/openworld/attendees/exhibition-experience/experts.html" target=_blank>Meet The Experts</A> session for HCM where you can talk to some of the senior product experts in HCM Development. It's on Thursday from 3pm to 4pm in the Meet The Experts lounge in Moscone South. It's pretty much the last thing of the conference, but I hope that plenty of you can come along to talk to us.<BR></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2006/10/openworld.html</link>
         <guid>http://blogs.oracle.com/millmore/2006/10/openworld.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">CoreHR</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">OpenWorld</category>
        
         <pubDate>Wed, 18 Oct 2006 21:39:48 +0000</pubDate>
      </item>
            <item>
         <title>Goodbye iRecruitment, Hello Core HR</title>
         <description><![CDATA[<p><P>I have been persuaded that after 6 years of working on iRecruitment, it is time to hand the reigns on to someone else, and move to lead the Core HR team instead. I have owned iRecruitment development since it started way back in 2000, and have seen it go from strength to strength. I have devoted a lot of blood, sweat and tears on the product over the years,&nbsp;so it was a very hard decision to make the move. One of the reasons I was prepared to move is that I have Ravi Banda as&nbsp;an excellent replacement, and I am sure he will do a great job of taking the product forward. I'll be keeping an interest in what is going on with iRecruitment, and I am sure that in my new role I will stay involved with many of my iRecruitment friends, both in Oracle and externally.</P><br />
<P>My new Core HR role is like a blast from the past for me since I managed part of the Core HR team before starting iRecruitment. My new role here is a great new challenge though. My team is responsible for the Person part of the HCM product, along with most things that belong to a person (e.g. their employment details, contacts, addresses and the like). I will be leading the team through the transition to Fusion, where our first big goal is to enhance our schema to take advantage of some global person concepts from PeopleSoft that we think will be of benefit to everyone, and give us a great platform to move forward on..</P></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2006/08/goodbye_irecruitment_hello_cor.html</link>
         <guid>http://blogs.oracle.com/millmore/2006/08/goodbye_irecruitment_hello_cor.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">CoreHR</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">iRecruitment</category>
        
         <pubDate>Fri, 18 Aug 2006 11:52:39 +0000</pubDate>
      </item>
            <item>
         <title>IRC.E RUP1 released</title>
         <description><![CDATA[<p><P>Last Friday we released our latest round of functionality, IRC.E RUP1 (patch 5061111). This is a great new released that contains some new functionality that we know that many of you have been waiting for. This includes;</P><br />
<UL><br />
<LI><STRONG>Assessments</STRONG><BR>Assessments integrates iRecruitment with iLearning to allow you to set up tests, either scored or non-scored, and to have a test be taken when a candidate registers, and when they apply for a vacancy. You can set up different tests on a vacancy by vacancy basis too. Managers can then see the results of the tests, and for example just see people who have passed a test.</LI><br />
<LI><STRONG>Vacancy Approvals<BR></STRONG>Approvals in the vacancy process has not changed very much since it was first released, while the approvals in the new Offers functionality in IRC.E is significantly more advanced. We really wanted to bring the new advanced approvals functionality in to the vacancy area too, so in IRC.E RUP1 we re-wrote the vacancy approvals process to use the same common approvals code as Offers. This offers a number of advantages, such as;<BR></LI><br />
<UL><br />
<LI>The Vacancy workflow is now just used for approvals, not navigation, making it less prone to change as we add new functionality. This means that if you create a copy, it is less likely to need to be updated in future.</LI><br />
<LI>You can now add dynamic approvers and people to receive FYI notifications</LI><br />
<LI>Comments are routed better</LI><br />
<LI>We have set up the approval rules so that you can modify them more easily - you can add new rules within our seeded transaction, without modifying the seeded transaction</LI><br />
<LI>More types of AME transaction are supported (e.g. position hierarchy).</LI></UL><br />
<LI><STRONG>Allow my account to be searched<BR></STRONG>For those of you who want to default the Allow My Account To Be Searched checkbox to Yes, we have added a profile option to do that</LI><br />
<LI><STRONG>Applicant Search</STRONG><BR>On the applicants for vacancy screen, we have made a few enhancements to make it easier to use. We have added the options of viewing rejected and hired applicants as well as the existing default of active applicants. We have also changed the assignment status criteria on this page to be based on a poplist rather than free text, so you don't have to remember what the statuses were called. These changes also meant a change in the applicant details screen, where you can choose between displaying a list of their Active applications or All applications (i.e. rejected and hired too). Which of those you see depends on whether or not you drill down to see an active assignment (default is Active in this case) or a&nbsp;rejected or hired assignment (default is then All). Sounds complicated, but is obvious in practice.</LI><br />
<LI><STRONG>Online Help</STRONG><BR>We have added online help to about 40 of the manager pages. This helps them understand the concepts and ideas, as well as the detailed steps in using iRecruitment. This requires patch 5348564.</LI></UL><br />
<P>As well as all of that, we have done a number of bug fixes and minor enhancements, to make this our best release yet. The whole team are really proud of what we have built here, so we hope you all download it and upgrade to it soon! Have a look on metalink for more details. The About Doc is note number 373827.1, and the new implementation guide is note number 373837.1. Both contain far more information than in this article, so please have a read.</P><br />
<P>For those of you who are confused by the name of the release, let me explain. We are no longer releasing mini-packs on 11i. Instead we are releasing rollup patches. They can&nbsp;contain a similar level of new functionality and bug fixes, but they are not a cumulative patch like the mini-packs were. This makes them smaller and more manageable, but means that they can only be applied on top of the last mini-pack. If you are not currently on IRC.E, when you apply IRC.E RUP1, you must either apply IRC.E first, or merge the two patches together and apply as one.</P></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2006/07/irce_rup1_released.html</link>
         <guid>http://blogs.oracle.com/millmore/2006/07/irce_rup1_released.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">iRecruitment</category>
        
         <pubDate>Mon, 03 Jul 2006 08:33:07 +0000</pubDate>
      </item>
            <item>
         <title>I&apos;m back</title>
         <description><![CDATA[<p><P>I am back again after 2 weeks of paternity leave. My wife and I had a new baby, called William Robert,&nbsp;on the 24th May, weighing 7lb 6oz</P><br />
<P align=center><img src="http://blogs.oracle.com/martinMillmore/images/IMGP6526.jpg" height="240" width="320" border="0" alt="William: "></P><br />
<P>Obviously I am delighted, and thanks to everyone who has sent congratulations.</P></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2006/06/im_back.html</link>
         <guid>http://blogs.oracle.com/millmore/2006/06/im_back.html</guid>
        
        
         <pubDate>Tue, 13 Jun 2006 12:39:54 +0000</pubDate>
      </item>
            <item>
         <title>New arrival?</title>
         <description><![CDATA[<p><P>I am going to be out of the office for a couple of weeks on paternity leave. That's right - I am going to be a dad again. Hopefully we should have our new arrival this week, and then I'll be off helping my wife look after a toddler and a newborn. Fortunately I'll be back in a couple of weeks, and I'll be raring to get back in to the office for some well deserved peace and quiet. In the meanwhile, the iRecruitment development team will be in great hands, and will be working harder than ever.<BR></P><br />
<P>UPDATE: Wow -&nbsp;it was only 2 1/2 hours after this post that the baby was born.</P></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2006/05/new_arrival.html</link>
         <guid>http://blogs.oracle.com/millmore/2006/05/new_arrival.html</guid>
        
        
         <pubDate>Wed, 24 May 2006 11:59:53 +0000</pubDate>
      </item>
            <item>
         <title>Using Skins in iRecruitment</title>
         <description><![CDATA[<p>A number of people have asked me about how to create skins in
iRecruitment in order to get iRecruitment to look like their corporate
site. I thought it would be best to do a worked example, based on the
contents of notes 268969.1 and 269138.1.</p><p>A skin
consists of two components. The first are the Renderers, which define
where on the screen items are placed, and the html around the core
items. The second are the styles, which define how the common
components on the screen actually look, e.g. the appearance of the tabs
and the buttons.</p><h3>Renderer</h3><p>First
of all we will create a Renderer for our pages. This defines the layout
of the actual pages. To create this, we need to create a new directory
for the skin in the <code>$OA_HTML/cabo/templates</code>
directory. In this example, I am going to create an example based on
the OTN web site (<a href="http://otn.oracle.com/" target="_blank">http://otn.oracle.com/</a>), so I create a directory
called
<code>$OA_HTML/cabo/templates/otn-desktop</code></p><p>In
that directory, I create a file called
<code>pageLayout.uit</code>. This is the file which is
going to define the layout of the page, and add the html components
that I want around the dynamic parts of the screen. There is a good
description of the contents of this file at <a href="http://www.oracle.com/technology/products/jdev/howtos/10g/adf_uix_laf_ht/index.html" target="_blank">http://www.oracle.com/technology/products/jdev/howtos/10g/adf_uix_laf_ht/index.html</a>.
The <code>pageLayout.uit</code> file defines the overall
layout of your page in uix format. Here is my example based on OTN. I
created it by going to the http://otn.oracle.com/ web site, and doing a
View Source from my browser. I then edited the html to make it XHTML
compliant (uit documents need to be valid xml), and adding in the
markers for the rendered components on the page, for example the xml
string <code>&lt;ui:rootChild name="contents"/&gt;</code>
tells the page where to put the core contents of the page. The file I
created can be found <a href="http://blogs.oracle.com/martinMillmore/gems/pageLayout.uit">here</a>.</p><p>It
is not necessarily trivial to make your file xml compliant, and if it
is not, your template file will not be used, and the system will revert
to the default template. If this happens, you can check your
<code>jserv.log</code> file for any errors in the template
file.</p><p>The next step I took is to log in to the
applications and in the Custom Look And Feel Administrator
responsibility, I create a new Look and Feel, with the following
parameters;</p><pre>Name: otn-desktop<br>Family: otn<br>Description: sample otn skin <br>Base Look and Feel: simple.desktop</pre><p>I then navigate through the rest of
the flow without changing any of the parameters, to set up the skin
with just the layout changed.</p><p>Finally, we need to
tell this new skin to use the <code>pageLayout.uit</code>
renderer that we created. When the skin was created, a file called
<code>otn-desktop.xml</code> will have been created in
<code>$OA_HTML/cabo/lafs</code>. I edited that file to have
the following content. Basically I just added the renderers content to
tell it to use the pageLayout.uit file.</p><pre><br>&lt;look-and-feel style-sheet-name="otn-desktop.xss"<br>xmlns:otn-desktop="http://xmlns.example.org/laf/otn"<br>xmlns="http://xmlns.oracle.com/uix/ui/laf"<br>family="otn" extends="simple.desktop" id="otn-desktop"&gt;
<span style="font-family: mon;"><span style="font-weight: bold;">&lt;renderers&gt;<br>&lt;renderer name="pageLayout"&gt;<br>&lt;template name="pageLayout.uit"&gt;<br>&lt;/template&gt;<br>&lt;/renderer&gt;<br>&lt;/renderers&gt;</span></span><span style="font-weight: bold;"></span><br style="font-weight: bold;"><span style="font-weight: bold;"></span>&lt;/look-and-feel&gt;<br style="font-weight: bold;"></pre><p>To test the skin,
I create a new user, and change the Oracle Applications Look and Feel profile
option at user level for my new user to have a value of
<code>otn-desktop</code>. I then bounce the application
server, and log in as the new user. I see the layout of the
responsibility page as follows;<br><a href="http://blogs.oracle.com/martinmillmore/images/otn1.jpg" target="_blank"><img src="http://blogs.oracle.com/martinMillmore/images/otn1.jpg" alt="OTN Skin 1" height="304" width="450"></a></p><h3>Styles</h3><p>This
looks OK, but I also want to change some of the colours and the font
size, so I go back in to the Custom Look And Feel Administrator
responsibility, and I update the otn-desktop style to set some
properties against the global component as
follows;</p><pre>Style: DefaultFont<br>Property: font-size<br>Value: 9pt<br><br>Style: DarkBackground<br>Property: background-color<br>Value: #000033</pre><p>After doing this, log out, then I delete
the stylesheet cache as follows;</p><pre>rm $OA_HTML/cabo/cache/otn*</pre><p>and then log back in
again, and the new styles get picked up, making the screen look as
follows;<br><a href="http://blogs.oracle.com/martinMillmore/images/otn2.jpg" target="_blank"><img src="http://blogs.oracle.com/martinMillmore/images/otn2.jpg" alt="OTN Skin 1" height="304" width="450"></a></p><p>Finally, I want to change
some of the graphics on the screen. In particular, I want to change the
way that the tabs are rendered, to make them look like boxes, so in the
Custom Look And Feel Administrator responsibility, and I update the
<code>otn-desktop</code> style to set the following
properties against the tabBar component's
Icons;</p><pre>tabBarSelectedEnabledJoin,<br>tabBarEnabledSelectedJoin, <br>tabBarEnabledJoin,<br>tabBarSelectedEnd, <br>tabBarSelectedStart,<br>tabBarEnabledEnd, <br>tabBarEnabledStart<br>URI: join.gif<br>Height: 30<br>Width: 1<br><br>tabBarSelectedBackground<br>URI: selected_middle.gif<br>Height: 30<br>Width: 1<br><br>tabBarEnabledBackground<br>URI: enabled_middle.gif<br>Height: 30<br>Width: 1</pre><p>I then create a directory,
<code>$OA_HTML/cabo/images/otn_desktop</code>, and I upload
my gifs to use for the tabs to that directory. I then bounce the
application server, and I see tabs like this;<br><img src="http://blogs.oracle.com/martinMillmore/images/otn3.jpg" alt="otn skin 3"></p><p>Using the simple techniques
shown here, you should be able to create a skin for iRecruitment which
closely matches your corporate look and feel - setting the page layout
the same, as well as the colours and graphics. If you create a nice
skin, please post a URL to your recruiting site so that we can see it
in action.<br></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2006/05/using_skins_in_irecruitment.html</link>
         <guid>http://blogs.oracle.com/millmore/2006/05/using_skins_in_irecruitment.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">iRecruitment</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">skins</category>
        
         <pubDate>Fri, 12 May 2006 14:04:49 +0000</pubDate>
      </item>
            <item>
         <title>OHUG</title>
         <description><![CDATA[<p>We have just done our first "Meet the Experts" session at OHUG, and here is a photo to prove it;<br><img src="http://blogs.oracle.com/martinMillmore/images/Image349s.jpg" height="300" width="400" border="0" alt="OHUG1: "><br>Sorry to all of the people who got cropped out of the photo, but it was a really full room, and I couldn't step back far enough!<br>We had lots of great questions, some which we could answer, and some which were not so easy, but it was great to hear from everyone. We have two more sessions like this this week, so if you are at OHUG, please come along and talk to us.<br></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2006/04/ohug.html</link>
         <guid>http://blogs.oracle.com/millmore/2006/04/ohug.html</guid>
        
        
         <pubDate>Thu, 20 Apr 2006 01:05:46 +0000</pubDate>
      </item>
            <item>
         <title>Posting to non HR-XML job boards</title>
         <description><![CDATA[<p><P>I recently had an interesting question from a customer who was looking to post to some job boards who accepted XML input, but who did not support the standard HR-XML format. This is an interesting challenge for many companies. Indeed, even job boards who accept HR-XML formatted data may be a challenge since they may want specific attribution, e.g. locations or job categories which the define. Fortunately there is a simple solution to this, which I am reproducing here:</P><br />
<P>There are two problems to be overcome here. The first is to get the outgoing data in the correct format. This is something that is possible to do fairly well with our stylesheets, which allow you to transform the data in to any format, as long as you don't want to significantly alter the actual data values. If you do need to significantly alter the data, this is not trivial to do in a stylesheet.</P><br />
<P>The second problem is that we only accept an HR-XML response, and are not flexible about the format of that. Any other response will result in an error code being displayed (IRC_412087_TP_BAD_VENDOR_XML), and the posting URL will not be recorded.</P><br />
<P>A simple way to solve both of these issues is to create a basic interface between iRecruitment and the job board, which translates the data in and out. This sounds complex, but with basic scripting languages such as perl, or jsp, this is very easy to do. We will demonstrate with a worked example.</P><br />
<P>First of all, we want to create a stylesheet to translate our data in to a format that is as near as possible to the desired format. In this case, we want an output like this;</P><br />
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"><PRE>&lt;xml version = "1.0"?&gt;<BR>&lt;PostJobDataSet&gt;<BR>&lt;Users&gt;<BR>&lt;UserName&gt;bob&lt;/UserName&gt;<BR>&lt;Password&gt;secret&lt;/Password&gt;<BR>&lt;Jobs&gt;<BR>&lt;title&gt;Software Engineer&lt;/title&gt;<BR>&lt;short_desc&gt;This is a software engineer job&lt;/short_desc&gt;<BR>&lt;long_desc&gt;This is a software engineer job.<BR>What a great job!&lt;/long_desc&gt;<BR>&lt;location&gt;READING, UK&lt;/location&gt;<BR>&lt;/Jobs&gt;<BR>&lt;/Users&gt;<BR>&lt;/PostJobDataSet&gt;</PRE></BLOCKQUOTE><br />
<P>To do this, we create a simple stylesheet in the $OA_HTML, called JobPost1.xsl</P><br />
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"><PRE>&lt;?xml version="1.0" encoding="UTF-8" ?&gt;<BR>&lt;xsl:stylesheet <BR>xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"&gt;<BR>&lt;xsl:output&nbsp; method="text" indent="yes" /&gt;<BR>&lt;xsl:template match="jobpositionposting"&gt;<BR>&lt;xsl:for-each select="row"&gt;&lt;?xml version = "1.0"?&gt;<BR>&lt;PostJobDataSet&gt;<BR>&lt;Users&gt;<BR>&lt;UserName&gt;&lt;xsl:value-of select="posting_username "/&gt;&lt;/UserName&gt;<BR>&lt;Password&gt;&lt;xsl:value-of select="posting_password "/&gt;&lt;/Password&gt;<BR>&lt;Jobs&gt;<BR>&lt;title&gt;&lt;xsl:value-of select="job_title"/&gt;&lt;/title&gt;<BR>&lt;short_desc&gt;&lt;xsl:value-of select="brief_description"/&gt;&lt;/short_desc&gt;<BR>&lt;long_desc&gt;&lt;xsl:value-of select="detailed_description"/&gt;&lt;/long_desc&gt;<BR>&lt;location&gt;&lt;xsl:value-of select="town_or_city"/&gt;&lt;/location&gt;<BR>&lt;/Jobs&gt;<BR>&lt;/Users&gt;<BR>&lt;/PostJobDataSet&gt;<BR>&lt;/xsl:for-each&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;/xsl:stylesheet&gt;</PRE></BLOCKQUOTE><br />
<P>This stylesheet will create the data in the format that we want, other than the location, which will be in lower case.</P><br />
<P>We then create a simple perl script as follows, called postData1.pl. This can be placed in any cgi-bin directory inside your firewall.</P><br />
<BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"><PRE>#!/usr/local/bin/perl -w</PRE><PRE>use CGI::Carp qw( fatalsToBrowser );<BR>use CGI;<BR>use HTTP::Request::Common qw(POST);<BR>use LWP::UserAgent;</PRE><PRE># look at the request method<BR>my $method = $ENV{'REQUEST_METHOD'};<BR>my $text;<BR># get the submitted string<BR>if ($method eq "GET") {<BR>&nbsp;&nbsp;&nbsp; $text = $ENV{'QUERY_STRING'};<BR>}else { <BR># default to POST<BR>&nbsp;&nbsp;&nbsp; read(STDIN, $text, $ENV{'CONTENT_LENGTH'});<BR>}&nbsp; </PRE><PRE>#find the xml tag in the posted text<BR>$locstart=index($text,"&lt;location&gt;");<BR>if($locstart&gt;0) {<BR> $locend=index($text,"&lt;/location&gt;");</PRE><PRE> #get the location value<BR> $locationtext=substr($text,$locstart+10,$locend-($locstart+10));</PRE><PRE> #manipulatethe location value and create the new xml<BR> $newlocation=uc($locationtext);<BR> $newxml=substr($text,0,$locstart+10);<BR> $newxml=$newxml.$newlocation.substr($text,$locend);<BR>} else {<BR> $newxml=$text;<BR>}</PRE><PRE># create the post to the new URL<BR>$ua = LWP::UserAgent-&gt;new();<BR># enter your proxy server here if applicable<BR>$ua-&gt;proxy('http','http://www-proxy.us.oracle.com:80');<BR>my $req = POST 'http://www.yahoo.com',<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ xml =&gt; $text];<BR>#read the response<BR>$response=$ua-&gt;request($req);<BR>if($response-&gt;is_success()){<BR>&nbsp; # if successful, process the response to get the data out<BR>&nbsp; $content = $ua-&gt;request($req)-&gt;as_string;<BR>&nbsp; # you should add a check here for success<BR>&nbsp; $statuscode="200";<BR>&nbsp; $statusdesc="Success (ok)";<BR>&nbsp; # you should add the correct processing here to pull the URL <BR>&nbsp; # from the response if it was a success<BR>&nbsp; $respURL="http://www.test.com/post?id=1";</PRE><PRE>} else {<BR>&nbsp; # the post failed, so get the http error code<BR>&nbsp; $statuscode=$response-&gt;code();<BR>&nbsp; $statusdesc=$response-&gt;message();<BR>&nbsp; $respURL=$response-&gt;status_line;<BR>}</PRE><PRE>#create the translated response<BR>$myresponse="&lt;?xml version = \"1.0"?&gt;<BR>&lt;Envelope version = "01.00"&gt;<BR>&nbsp; &lt;Sender&gt; <BR>&nbsp;&nbsp;&nbsp; &lt;Id&gt;postTest&lt;/Id&gt; <BR>&nbsp; &lt;/Sender&gt;<BR>&nbsp; &lt;Recipient&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;Id&gt;postTest&lt;/Id&gt;<BR>&nbsp; &lt;/Recipient&gt;<BR>&nbsp; &lt;TransactInfo type= "response"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;TansactId&gt;1&lt;/TansactId&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;TimeStamp&gt;2000-01-01T00:00:00&lt;/TimeStamp&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;Status&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Code&gt;$statuscode&lt;/Code&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;ShortDescription&gt;$statusdesc&lt;/ShortDescription&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/Status&gt;<BR>&nbsp; &lt;/TransactInfo&gt;<BR>&nbsp; &lt;Packet&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;PacketInfo packetType = "response"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;PacketId&gt;1&lt;/PacketId&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Action&gt;OracleHRMSJobPosting&lt;/Action&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Manifest&gt;URL&lt;/Manifest&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/PacketInfo&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;Payload&gt;$respURL&lt;/Payload&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&lt;/Packet&gt;<BR>&lt;/Envelope&gt;";</PRE><PRE>#send the response back<BR>print "Content-type: text/xml\n\n";<BR>print $myresponse;</PRE></BLOCKQUOTE><br />
<P>This script will take the xml that it receives, change the location to be upper case, and then post it to another URL. When it gets the response, it will look at the response and create an HR-XML style message based on that, and then send that&nbsp;message back to the application server.</P><br />
<P>To put this all of this in to action, you then just need to create a new recruiting site, where the posting URL is the URL of your perl script, and the stylesheet is JobPost1.xsl. The script is then called by iRecruitment when you post an advert, and will act as&nbsp;an intermediary between iRecruitment and whatever format the job board chooses to use.</P><br />
<P>You can create as many copies of the script as you have job boards, editing the URL and the formatting based on the requirements of each job board. You will note that none of this required any customization of any Oracle code, so is not going to be effected by any patches or upgrades either. That's the beauty of web services!</P></p>]]></description>
         <link>http://blogs.oracle.com/millmore/2006/04/posting_to_non_hrxml_job_board.html</link>
         <guid>http://blogs.oracle.com/millmore/2006/04/posting_to_non_hrxml_job_board.html</guid>
        
                  <category domain="http://www.sixapart.com/ns/types#tag">HR-XML</category>
                  <category domain="http://www.sixapart.com/ns/types#tag">iRecruitment</category>
        
         <pubDate>Wed, 12 Apr 2006 14:56:27 +0000</pubDate>
      </item>
      
   </channel>
</rss>
