Fishbowl’s ShipIT Hackathon Event Produces Four, New, Value-Add Components for Oracle WebCenter Content

The weekend of November 10th was known as Innovation Weekend at Fishbowl Solutions. Fishbowl’s development, sales and marketing teams participated in a “ShipIT Hackathon” event to develop new Oracle WebCenter Content-based products. If you aren’t familiar with hackathons, just imagine a very intense software programming session where the end goal is to develop usable software within a set period of time – here is Wikipedia’s definition, and you may remember that Fishbowl participated in a similar hackathon at Oracle OpenWorld. Anyway, Fishbowl’s WebCenter UI and UX design extraordinaire, John Sim, was visiting from London and he was the catalyst for Fishbowl’s internal hackathon. Here were the rules that he helped establish:

  1. The new software/functionality should either support one of Fishbowl’s current products or provide new ways to interact, utilize, or provide an integration with Oracle WebCenter Content.
  2. The finished product should be deployable to Fishbowl’s internal WebCenter Content system and be usable by Fishbowl employees.
  3. Teams will have only 24 hours to complete their product.
  4. The winning team would be decided by votes from all participants, but participants could not vote for their own team.

At 3:00 PM on Friday, November 9th the hacking commenced. Fueled by Red Bull, pizza, coffee and sugar, four teams of Fishbowl employees developed the following WebCenter-based programs by 3:00 PM on Saturday, November 10th where they were presented and voted on. Here they are in order of finish:

  • 1st Place – WebCenter Content Multi-Checkin
    • Enables users to drag and drop content items directly into Oracle WebCenter Content from desktops or file shares and be tagged with keywords.
    • Checked in content bypasses the check in metadata screen and instead is grouped within a user’s “workspace”.  Users can return to their workspace at a later time to add metadata.
    • Integrates with Fishbowl’s Duplicate File Checker to ensure that duplicate content items do no enter the system.

    (The winning hackers – left to right: Paul Heupel, John Sim, Tom Jaede)

  • 2nd Place – Filtered Search Results and Grid View Metadata Updater
    • Update metadata on multiple items at once using a simple grid format.
    • Content Server query defines items to display in grid view with configurable sorting and result count.
    • Easily configure columns to view and update both standard and custom metadata values.
    • Uses Excel-like functionality within the browser such as copy, paste, drag, and fill-down.
  • 3rd Place – Duplicate File Checker Desktop Application
    • Lightweight desktop application can detect and remove duplicate content items from user desktops or network file shares.
    • Users simply browse to a folder or item and select the content they want to check against already existing in Oracle WebCenter Content. Any duplicate items are returned to the user in a grid view, and the user can select any duplicates for deletion.
  • 4th Place - WebCenter Content and Google Drive (Docs) Synchronization & Contribution
    • Provides ability to import content stored in Google Drive to Oracle Webcenter Content.
    • Google Drive files can be batch imported and their metadata can be mapped or the files can be published directly to WebCenter Content.
    • Includes ability to also link to Google Drive document directly from WebCenter Content.

Aside from some mild cases of indigestion, carpal tunnel, and weariness; the participants in Fishbowl’s ShipIT hackathon all agreed that it was a great event to be a part of. It was really exciting to see what could be developed in a limited amount of time when a group of people worked together and were driven by a deadline. The best part was ending up with four new WebCenter-based products that solve real-world problems and add immediate value. If any of these products interest you, feel free to contact us at 952-465-3400 or

You can see more pictures of Fishbowl’s ShipIT Hackathon here.

As always, your comments on this blog are appreciated.

jQuery and UCM – Client Side Ajax UCM Interaction

The web is evolving, and users are wanting better interaction with their apps within the web browser.  This means faster site loads and action feedback to the user and not a browser loading a page.

Bex recently posted about his jQuery plugin to UCM to make service calls, and I thought I’d share something that I whipped up a few months back that has been an internal project of mine.  I think it’s about time it saw the light of day and help give more options to the web developers of the world.

My prototype is a javascript service wrapper javascript object, called fb.js, creates several util functions to help aid the execution of service calls with a max of 1 line of IdocScript on your site.

The first thing to do is to set the url for the ajax call.  The preferred method is to override the variable in fb.js that holds all of this.  Do this by defining this line in your javascript file.

[sourcecode language=”javascript”]
fb.vars.cgiRoot = "<$HttpCgiRoot$>";

Now we can build out our function.  Each function takes 2 parameters objects, a callbacks object and a parameters object.  The callbacks object has the hooks into the 5 events jQuery ajax method gives you.  These are, beforeSend, success, failure, complete, and error.  By defining functions in the callback object, you can hook into any event and change you page very easily.

For example:

[sourcecode language=”javascript”]
var callbacks = new Object();
callsbacks.beforeSendFunction = function(){alert("about to ping server")};
callbacks.successFunction = function(responseText){

The second object is the parameters object.  This one is as easy as passing in parameters as you would for service calls.  For example :

[sourcecode language=”javascript”]
var parameters = new Object();
parameters.IdcService = "MY_CUSTOM_SERVICE";
parameters.MyCustomParameter = "VariableValueHere";
parameters.IsJson = "1";

Now we can execute the service.

[sourcecode language=”javascript”]
fb.util.executeService(callsbacks, parameters);

Now the real power comes when you want to start interpreting result sets.  you can use a method I created to get back a 2D array object that contains the row and then the item.  An example of this would be.

[sourcecode language=”javascript”]
var callbacks = new Object();
callbacks.successFunction = function(responseText){
var contentItem = fb.util.returnResultSetObject(responseText, "DOC_INFO");
var parameters = new Object();
parameters.dDocName = "ID_10000";
fb.util.getDocInfoByName(callbacks, parameters);

This can also be applied to search results to loop and create your table.

[sourcecode language=”javascript”]
var callbacks = new Object();
callbacks = fb.defaultCallbacks(callbacks);
callbacks.successFunction() = function(responseText){
var searchObj = fb.util.returnResultSetObject(responseText, "SearchResults");
for (var i = 0; i < searchObj.length; i++){
var htmlString = "tr td" + searchObj[i][‘dDocName’] + "/td td" + searchObj[i][‘dDocTitle’] + "/td td" + searchObj[i][‘dDocAuthor’] + "/td /tr";
$("#resultsTable > tbody:last").append(htmlString);
var parameters = new Object();
parameters.pageCount = "4";
parameters.resultCount = "50";
parameters.QueryText = "Press Release";
parameters = fb.defaultParameters(parameters);
fb.util.getSearchResults(callbacks, parameters);

Now, you may be saying at this point that this is a lot to define to execute the method.  That is why I have started some functions in the main js file called “fb.defaultParameters(parameters)” and “fb.defaultCallbacks(callbacks)”.  By passing in your objects to these methods before you run your service, it will fill in the blanks, so to speak, with default parameters needed to execute the function.

Because I have defined the GET_SEARCH_RESULTS service call within my default parameters, I know there are certain required parameters that need to passed before I execute the service.  These are, QueryText, startRow, endRow, resultCount and others.  I also decided that, I don’t really want to deal with start and end row, so I decided that when I pass in the pageNumber parameter, I calculate the start and end row based off of either the default resultCount parameter set in fb.vars or the one passed into the function.  This can be seen in the above method where I create the table rows.

I currently have 3 predefined for you to use with the ability to add execute any service you want.

[sourcecode language=”javascript”]


fb.util.getSearchResults(callbacks, parameters);

fb.util.docInfoByName(callbacks, parameters);


with the master execute service function being

[sourcecode language=”javascript”]

fb.util.executeService(callbacks, parameters);


What I have done is allow you to hook into as many events that you want with the ajax functions, but also incorporate a “defaultFunctions” and “defaultParameters” functions that will assume and fill in parameters that may have been missed or not necessary to keep defining.

For your viewing pleasure, I have set up a prototype site that is Mobile device friendly using 100% javascript hosted on a 10gR3 content server.  Keep in mind that this has not be polished, but a POC of what you can do with the proper execute service javascript wrapper calling the shots.

Please visit for the example.

Oracle's 2009 CM Architect of the Year Joins Fishbowl Solutions

Every year at Open World, Oracle bestows several “Architect of the Year” awards on key people from strategic Oracle customers that achieve global greatness. In 2009 the Content Management Architect of the Year award went to Jerry Aber of MoneyGram.

Jerry worked closely with Fishbowl Solutions to achieve that success (including up to 50% productivity gains). Today, Jerry joins Fishbowl on our solutions architecture and leadership teams.

Not only does this mean that we continue to grow despite the economy, but also that we are attracting the top talent in the space.
Check out Fishbowl for more info.

Please drop a comment and welcome Jerry!

Why is Fishbowl Solutions an Oracle Gold Partner?

Some partners are partners simply because they have always been partners. Other times partners are partners because they are pressured.

Fishbowl is an Oracle Gold Partner because Oracle simply has the best technology set out there.

If you take a look at the core technologies of the Oracle E2.0 Stack, you should see that all are rated as Gartner Leading technologies.

You can download the reports here.

Oracle’s core E20 technology is based around Portal, ECM, WCM and SOA. When you add in the application adapters (integrations between ECM and PSFT, Siebel and EBS) and the out of the box task flows for WebCenter (think re-usable portlets for application compositing) then we find that the platform provides all that is needed for a host of E20 solutions.

Our mission at Fishbowl is to provide the best solutions to business problems. We find that our job is made easier when we have the best core technology to work with. Whether we’re automating standard business processes and enabling participation with our Workflow Solution Set and blogs, or whether we’re creating collaboration spaces with our CollabPoint product and integrating its reports with PeopleSoft or JD Edwards, we find that working with the easily integrated and open Oracle technology fits our customer needs the best.

So whether you’re a University looking for Green Admissions Office solutions or a Manufacturing company that needs help migrating MCAD assemblies and enabling non-engineers to view and interact with those images, Fishbowl Solutions is there for you.