Search This Blog

Wednesday, January 11, 2017

Follow-up on the EnableMultipleBrowserTabsSupport option - YOUR FEEDBACK IS NEEDED!!!

This is actually a follow-up for my previous announcement: 

Since there are no built-in options in XAF Web UI for duplicating or showing certain views in separate browser tabs so far and people keep asking about further improvements in this regard, I wanted to do two things:

1. Share a simple custom solution I implemented for a user in this SC thread

This is just one code line called from the SimpleAction's Execute event handler, which may already cover a bunch of requests. What do you think of it?

2. Clarify how you and your end-users exactly prefer to open Views in separate browser tabs in each of the scenarios you are interested in

Besides what the option was primarily introduced for (being able to open an application link from an email without distracting the previous work), so far our team is aware of other use cases like opening a new tab from the navigation item, from the clicked grid row, from a dedicated XAF Acton, from the native browser context menu or by clicking a hyper link with the Control key hold or even with the middle mouse wheel! These scenarios are all different and require different solutions.

So, it would be great to know exactly what you are most interested in and how you want to do this in the application UI (the more specific your answers will be, the better for us both). With that, our team will be in a better position to understand and prioritize this feature development.



25 comments:

  1. Wouldnt be the ASPxTabControl be an Option? like in winforms, UIType TabbedMDI?

    ReplyDelete
    Replies
    1. That should work for me too.

      Delete
    2. From my perspective this would be nice to have, but the browser tabs would suffice. And unless it is relatively easy to implement, might be a unnecessary allocation of development resources. I could also see this causing a strain on the client-side performance as more mdi tabs are opened in a single browser tab. The benefit of browser tabs is that they are contained within independent processor threads.

      Delete
    3. Guys, thanks for your comments. This one is not easy to implement and there are other caveats, as Eric pointed out.

      Delete
  2. Very needed option.
    Priority: 1. open detailview in a new tab with Ctrl (both from root na nested listviews) 2. opening navigation item (root view) in a new tab with Ctrl 3. new tab via dedicated action

    ReplyDelete
    Replies
    1. Thanks, Evgeniy! Would you please describe how a DetailView for a related object (new or existing) opened in a separate browser tab from a nested ListView should behave? It is normally opened in a popup, which is supposed to live for a short period of time and then be closed with an update of the parent object. List specific user actions in this separate tab as well as expected UI output results for each step, if possible, because this is unclear...I tend to think that these functions should be limited to opening root views only.

      Delete
    2. Dennis, I agree with you that new tabs should be reserved for opening root views only. However, there are cases in my applications that certain object detailviews will always show in a root view using a custom showviewstrategy. In those cases I would like to enable option for users to open in new tab.

      It doesn't seem plausible to have a nested objectspace in another tab. I could be wrong, but I think that nested listview objects would have to open with a new objectspace.

      Delete
    3. A few possible scenarios for actually achieving this could be an inline action, or holding cntrl during during listview.ProcessCurrentObject(), or right-click row > new tab.

      Delete
    4. Thanks for your follow-ups, Eric

      Delete
    5. I agree that the tabs should open the root views. Although the way to get to them should not be exclusively reserved for the root source. In practice, in our case what happens is that the user has to work several objects of interest in new tabs (and browse them independently and often switching back and force), but the origin of those is not only a root list view but also can be nested views. In that case, though, the opened object probably shouldn't belong to a nested object space. So this gets a bit uncertain here how you would suggest implementing this but would be good to hear your opinion. General complain from customers was that the current web popups are not most convinient and they would have preferred a new tab.

      Delete
  3. 2. Because it is very common to jump and do something else while leaving the current screen unsaved. without this, user will need to cancel everything they did and browse to another view and come back again, which is annoying and the attitude could decline. note that to put that related views into the screen is an option but not always possible in a complex system like erp.

    ReplyDelete
    Replies
    1. Thanks, Paul. I agree that it is common, but it is unclear exactly how your end users would like to open tabs for related objects. Maybe copying and pasting url manually would already be sufficient. Please provide a specific answer for my second question, if possible. As for related views in complex apps with complex flows and logic, I too agree - see also my reply to Evgeniy.

      Delete
    2. maybe i read the question unclear. could you please describe what the "related objects" mean, for example?

      Delete
    3. @Paul: Imagine you have a Contact object shown in a DetailView and it has an aggregated PhoneNumbers collection. My question concerns the nested Contact_PhoneNumbers_ListView when you press the New button there or want to open a DetailView for an existing phone number in a separate tab.

      If you have specific examples from your real app where you need these separate tabs, please descrie them as well.

      Delete
  4. The primary request that I receive in this regard is for the user to be able to open a navigation item in a new tab via the standard right-click/context menu or cntrl-click.

    ReplyDelete
  5. I think all navigation items and associated records links in list views should be inserted as link to be openable in another tab. At least it is what we do in our custom JS web client.

    ReplyDelete
    Replies
    1. Thanks, Sergey! If possible, please elaborate more on how you currently handle associated records, both aggregated and not (basically same concern and questions as for Evgeniy above).

      Delete
  6. Hello Team,

    Is there a way to show only detail view items ? I mean without navigation control, logo, title, etc...

    ReplyDelete
    Replies
    1. If you are talking about a DetailView in a separate tab, no easy way for this unless you build a custom action for this operation (see my solution under pount #1). There you will need to intercept the window loading process and customize the template as you need dynamically.

      Delete
  7. Hello, i think , best is to try to mimic MDI mode in XAF windows like offering a property in the model to optionally (true by default) open navigation items on new tabs, when clicking a row in listviews it opens detailview in new tab for editing and so on, so browser tabs here works like MDI tabs there, that you you are like offering MDI mode for the xaf web or sort of
    thanks

    ReplyDelete
    Replies
    1. Thanks for your suggestion, Bassam. Unfortunately, this is a large and complex feature + there are other caveats, as Eric correctly pointed out above.

      Delete
  8. My opinion is that a user should be able to open an object in a new browser tab as root object starting from:
    - a root list view
    - a nested list view of not aggregated objects
    - a navigation item
    Furthermore via a custom action with respect of ShowViewParameters.NewWindowTarget property. In this way it is possible to create platform agnostic actions.

    ReplyDelete
    Replies
    1. Thanks for sharing your thoughts on this, Massimo.

      Delete
  9. Also SingleChoiceAction's ChoiceActionItems should be considered as in the previous post.

    ReplyDelete