Reminder: Fishbowl Solutions Webinar Tomorrow at 1 PM CST

Cole OrndorffThere’s still time to register for the webinar that Fishbowl Solutions and Oracle will be holding tomorrow from 1 PM-2 PM CST! Innovation in Managing the Chaos of Everyday Project Management will feature Fishbowl’s AEC Practice Director Cole Orndorff. Orndorff, who has a great deal of experience with enterprise information portals, said the following about the webinar:

“According to Psychology Today, the average employee can lose up to 40% of their productivity switching from task to task. The number of tasks executed across a disparate set of systems over the lifecycle of a complex project is overwhelming, and in most cases, 20% of each solution is utilized 80% of the time.

I am thrilled to have the opportunity to present on how improving workforce effectiveness can enhance your margins. This can be accomplished by providing a consistent, intuitive user experience across the diverse systems project teams use and by reusing the intellectual assets that already exist in your organization.”

To register for the webinar, visit Oracle’s website. To learn more about Fishbowl’s new Enterprise Information Portal for Project Management, visit our website.

Upcoming Webinar: Innovation in Managing the Chaos of Everyday Project Management

On Thursday, December 4th from 1 PM-2 PM CST, Fishbowl Solutions will hold a webinar in conjunction with Oracle about our new solution for enterprise project management. This solution transforms how project-based tools, like Oracle Primavera, and project assets, such as documents and diagrams, are accessed and shared.

With this solution:

  • Project teams will have access to the most accurate and up to date project assets based on their role within a specific project
  • Through a single dashboard, project managers will gain new real-time insight to the overall status of even the most complex projects
  • The new mobile workforce will now have direct access to the same insight and project assets through an intuitive mobile application

With real-time insight and enhanced information sharing and access, this solution can help project teams increase the ability to deliver on time and on budget. To learn more about our Enterprise Information Portal for Project Management, visit Fishbowl’s website.

Fishbowl’s Cole Orndorff, who has 10+ years in the engineering and construction industry, will keynote and share how a mobile-ready portal can integrate project information from Oracle Primavera and other sources to serve information up to users in a personalized, intuitive user experience.

Register here

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.

Lessons Learned from Oracle WebCenter Sites Training

We recently participated in Oracle WebCenter Sites training, provided for partners by the Oracle Fusion Middleware Architecture Team (“A-Team”). Oracle offered insight into architecting and implementing the WebCenter Sites Solution, and committed to assisting partners like Fishbowl through initial client implementations.

The promise of WebCenter Sites (formerly FatWire) is a very high-performance website delivery platform along with a business-focused WYSIWYG Web Content Management (WCM) solution. The main benefit of Sites is high-performance site delivery. High-performance, dynamic content sites require a caching layer between visitors and the content management system. With some solutions, this requires (potentially) endless meetings to figure out how to balance business needs for content/publishing timeliness against website and proxy limitations and finessing time-to-live settings on the cache server(s). However, the WebCenter Sites’ Content Server can communicate with tightly-coupled caching server(s) when any content asset has been updated and the caching server retrieves the updates. This dynamic “edge caching” model results in highly-efficient caching and allows for lower hardware costs compared to less-aware caching models.

Website types that are the best fit for WebCenter Sites include consumer websites where page-response time is a premium. Consumers won’t wait for your site to download when the competition’s site is responding more quickly. Site types include brochureware sites; product and services marketing websites; news/media websites; eCommerce sites (Sites is frequently used as the product catalog “behind” the shopping cart) and financial services sites. This technology works best when implemented for clients who can express the financial value of site traffic and performance and are willing to invest in improving site response times and the content editor experience.

If none of the use cases we’ve described apply to your website needs, then Oracle WebCenter Sites may not be the right technology for your environment. Each use case is different, and realistic implementation timeframes exceed three months with significant investment required. We have other tools available to meet the range of website needs, including portal and WCM tools for intranet, extranet and public-facing websites all leveraging the Oracle WebCenter platform. Contact us for more information on which strategy is right for you.

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.