Monday, December 28, 2009

Tabs – Could they be easier???

Tabs in APEX are overly complex for the vast majority of applications and users. I believe the problem is related to two things which are somewhat interconnected:

  1. A Lacking UI
  2. Tab Sets

Let me explain…

A Lacking UI
The problem (as I see it):

First of all, it’s obvious that some attention to detail was given to the tabs screen – we even see a basic mock up of our tabs. It just doesn’t go far enough. The UI doesn’t do enough to abstract the underlying data model.

Let’s say for example I start with no tabs and later decide to add one level tabs. If I try to first add tabs at the parent level, which it allows me to do,  it will fail with this error: Tab set or new tab set must be specified. So I can’t create a parent without a child? I suppose that could make sense… Ok, so I’ll go down to the first level and create my first tab there. But the first screen asks me to create a Tab Set, and the next screen, a Parent Tab Set and Parent Tab Set Text. But I don’t want two levels! You get the idea…

A (possible) solution:

I’d like to see an application level attribute that specifies whether the application is using no tabs, one level, or two level tabs – could be read only in the Application Definition page. Then the interface through which we work with tabs could be reworked taking that attribute into account.

  • If the application is currently set to “no tabs” and I go to Tabs in the Shared Components, I’d like to see a big/simple/clean message that lets me know I’m not using tabs and presents me with a button to enable tabs for the application.
  • If the application is currently set to “one level tabs”, I’d only like to see one level of tabs. Pseudo parent tabs are not relevant to me – they’re just confusing. I’d also like to see two big buttons that allow me to either disable tabs for the application or enable two level tabs for the application.
  • If the application is set to “two level tabs”, I’d like to see both levels. I’d also like to see two buttons that allow me to either disable tabs for the application or go down to one level tabs for the application.

Of course these buttons that allow me to change the tab settings for the application would take me into a wizard to break down the process, somewhat like they do now but with two big differences: I’d remove tab sets related details altogether (more on that later) and I would add some things to attempt to make it a more complete transition, for example, a selection for a new default page template that uses the tab class I’m going to.

Tab Sets
The problem (as I see it):

Frankly, I don’t really see what they are for; tab sets just seem to add to the confusion surrounding tabs. Why do we need tab sets – standard or parent? As best I can tell, they exist to make the process of linking standard tabs to parent tabs easier. But that alone doesn’t seem sufficient to justify their existence so I must missing something…

Think about the options presented when creating a new page:

Would you like to use tabs for this new page?

  • No
  • Yes - Create a new tab set and a new tab within the tab set.
  • Yes - Use an existing tab set and create a new tab within the existing tab set.
  • Yes - Use an existing tab set and reuse an existing tab within that tab set.

If my application was set to no tabs, as indicated by the new application level attributed I mentioned earlier, why should I even see this step in the process?

If my application was set to 1 level tabs, why should I care about tab sets? I think this would make more sense:

Would you like to use tabs for this new page?

  • No
  • Yes - Create a new tab.
  • Yes - Reuse an existing tab.

If my application was set to 2 level tabs, I still don’t think I need tab sets. I think we could start with this:

Would you like to use tabs for this new page?

  • No
  • Yes

If I select Yes, I should first have to choose the parent tab, then choose to either create a new standard tab or reuse an existing one linked to the selected parent.

A (possible) solution:

Make tab sets a “feature” that is disabled by default and must be enabled for an application. This way new users will not have to be burdened by them and users that like them can still get to them.


What do YOU think??? Let me know if agree, disagree, or have any ideas of your own.


  1. I agree that the built-in Tabs are confusing and a bit tricky to use. I gave up on them pretty early, and every application I've built has used a List component instead, with a list template that mimics the tab layout. The list is then placed in the appropriate region on page zero. Adding a new tab is as easy as adding a new list item. I have not had the need for two-level tabs so far.

  2. I agree - I had sent a note to Mike Hichwa as part of my rant about what is still not fixed in 4.0 specifically how horribly tabs are implemented.

    Supposedly they will be enhancing the break reporting to at least allow you to output the value you are breaking on.

    We'll see if they do anything with the tabs. They're just way too cumbersome to figure out.

  3. Hi Dan,

    This is a very interesting post. I agree that Tabs can be confusing.

    I like your suggestion of having an application level control that determines the tab layout of the entire application. This may simplify development, especially for people that are starting to explore tabs in APEX.

    How do you think it will affect the page templates? Would we have to build templates to always support 0~2 tabs?

    I know we also talked about leveraging jQuery UI Tabs as an eventual replacement for APEX tabs. This could be an interesting option, however the APEX team would have to review to ensure backwards compatibility with the current features.

  4. I very much dislike the tabs as they are currently implemented. What I mean by that is what you said, it's just confusing and cumbersome at best.

    It (use to) always take me a few tries to get them right...that's annoying and (usually) the sign of a design (usability) flaw.

    However, once I do get them figured out, they rock! Especially for a non-GUI jerk like myself.

  5. @Morten - I hadn't event considered those that had given up on APEX tabs entirely... The list technique is interesting and gives me some ideas for implementing jQuery UI tabs that would do what Martin talked about.

    @Buzz - I had considered some emails as well. But I figured I'd try blogging first to get some feedback from people like you. From what I can tell so far, the pages related to tabs in APEX 4 have been given a face lift but nothing has really changed.

    @Martin - I had not yet considered the page templates. Now that I think about it, I do see opportunities for consolidation and simplification. A single page template should be able to handle all three tab settings.

    As for jQuery UI tabs, that would be an interesting implementation. I may play with that a little over the next few days.

    @Chet - I agree completely. Although still a little cumbersome they are a blessing for those of us that are lacking talents in the UI department ;)

  6. Dan,
    I agree tabs in APEX can be improved. (1) I've never used 2-level tabs in production as I find them buggy to work with.
    (2) I use one level tabs often. One place I see 1-level tabs falling short is you cannot link to other apex application and page. All links from tabs are to pages within the current application.
    (3) Another wish list for apex tabs would be to have region tabs. Having region tabs would enhance the UI and the usefulness of partial page rendering...

  7. Hi Dan,

    I totally agree with your comment. Personally, I'm more a fan of lists being displayed as tabs. The original "tabs" in APEX are still usefull when it comes to simple apps where the number of menu options are few.

  8. Interesting post.
    Yes, tabs are confusing!

    When I give APEX trainings and the group wants to learn about ways to implement menus using the tabs, I have to take special care in my explanations.

    Work has to be done for sure.
    Personally, I would focus more on the new plugins.

    I don't think jQuery UI Tabs are the solution because they are not meant to be used in the same context. (Application menu VS Page menu)
    APEX 4.0 EA1 Plugins jQuery UI Tabs

  9. Dan, really like your post and your analysis of the tab situation in Apex.

    It would seem that this whole situation is sufficiently abstracted at the application development and rendering levels that Oracle could change the underlying database objects that support tabs pretty readily. It's seems like it would just be a matter of committing the time to do it.

    There are clearly some quirks and inconsistencies with the implementation of tabs that need to be cleaned up. Guess we're gonna have to wait for 4.something since it's not there in 4.0.

  10. Dan,

    I totally agree with your statement that tabs are confusing to implement and maintain. When I add a new tab to an existing app, I'm still not 100% sure it'll show up on all the pages I expect it to. I try not to use 2-level tabs, as they give me fits. Instead I've used single-level tabs and a List component to show general links (Logout, Help, etc).

    I wish they could rewrite the front-end for this feature to make it more like what you're suggesting. I'd also like to see the Create Application identify how many tabs levels each page template supports, when you select that. I once chose a template that only supported one tab level, and had no clue why my parent tabs weren't showing. It took ages to figure out the problem!