Summary:

A number of issues have been identified with relation to ASP pages since the frameset removal. Most of these problems stem from the fact that the ASP page is now rendering in an IFrame instead of the old EWARE_MID frame.

An action 6030 was created for linking to ASP pages which caused a render of the page to produce a screen like the following:

+--------------------------------------------+
| Action 6030 Renders L with an iframe point-|
| ing to ASP page |
| +---------------------------------------+
| | Tabs rendered here as part of ASP page|
| +---------------------------------------+
| | ASP Page renders content here inside |
| | iframe |
| | |
| | |
| | |
+----+---------------------------------------+

This produced a problem when the ASP page redirected to a system action. In that case the following would occur:

+--------------------------------------------+
| Old L rendered from the last ASP page |
|
| +---------------------------------------+
| | System action renders this L |
| | |
| | +----------------------------------+
| | | |
| | | System action renders itself |
| | | still in the old asp iframe |
| | | |
+----+----+----------------------------------+

In this case the user sees a double up of the menus, the first set was rendered by the ASP page and the second set rendered by the system action the asp page redirected to. Note this could also occur when ASP pages did a redirect to another ASP page or indeed itself (as I will point out later this broke our Quick Find Case customisation in live).

Workaround:

A “fix” was put in place to solve this menu doubling up issue by attempting to detect when it had occurred and cause what was in the iframe to re-render in the main frame. Here is the code (from WebFrameSet.GetHtml):

// prevent user from doing a File, New in the browser and getting a second browser open on the same session
// note that this is why the name of the window is set in GenerateLoginScreen and GenerateLoginScreenAnyway
if (not Dispatch.IISAutoLoginAvailable) and not (UserSession.bOutlookUser) then
// Please do not comment, when a user does new window on the browser with eware, this code opens
// the new browser window with the Login page.
// km v5.6 0-15440 check to see if there is any window name at all. If there isn't we've come from
// a new window command. #
if (not FPopupWindow) and (UserSession.Action <> iAction_CustomEntityAspPage) then
Result := Result + '<script>if (window.name=="" || window.name == "' + sFrame_Mid_IFRAME_ASP + '")' + '{' + 'self.location.href = window.location + ''&NewTab=Y'';' +
// IWM [31.05.1999] v1.4 - removed harcoded ref to /eWare
'}' + 'else' + '{' + 'window.name="EWAREMAIN";' + '}'+
'</script>';

This had two undesired effects: 1. The page is rendered twice 2. If the first page was the result of a post the second GET would not have the POST data and would fail (this is what affected our Quick Find Case). Also if it was an ASP page that and it was creating records it could result in a doubling up of records. Etc. 

Resolution (7.2b):

The first part of my solution to this problem was to remove all of action 6030 and the iframe stuff. This meant that asp pages now rendered full screen like the following:

+--------------------------------------------+
| Tabs rendered here as part of ASP body |
+--------------------------------------------+
| |
| ASP page renders full screen with no menus|
| or top content |
| |
| |
| |
| |
+--------------------------------------------+

The problem now is that no menus are rendered. The second part of my fix was to edit the TeWareBaseObject.GetPage method to include a frameset in the rendering:

function TeWareBaseObject.GetPage(const GroupName: WideString = ''): WideString; safecall;
var
R: String;
fs: TWebFrameSet;
begin
// plan is create a generic page, then transform it
if Dispatcher.BrowserType = HTML4 then
begin
if GroupName = '' then
GetTabs(Dispatcher.TabGroupName)
else
GetTabs(GroupName);
// Action is saved to history now and it is handled correctly
// UserSession.Action := -1;
Result := WebPage.GetHtml();
try
fs := TWebFrameSet.Create(Dispatcher, UserSession, TranslationList, WebPage);
Result := ConvertStringToWide(fs.GetHtml());
finally
if fs <> nil then FreeAndNil(fs);
end;
end else
begin
if assigned(WebGenericPageExtra) then
begin
R := (WebGenericPageExtra as TWebPAge).getXML;
// transform the xml
Result := ConvertStringToWide(Dispatcher.ParseXML(R, UserSession.Device.XSL,
UserSession.CSSTheme.XSLStylesSubPath, CP_UTF8));
end;
end;
end;

This means that ASP pages now render as they should:

+--------------------------------------------+
| L rendered by ASP page |
| |
| +---------------------------------------+
| | Tabs rendered here as part of ASP page|
| +---------------------------------------+
| | ASP Page renders content here |
| | |
| | |
| | |
| | |
+----+---------------------------------------+