I've been testing RC1 and found a few issues with the External Pages functionality. I don't know whether or not these items were present in the betas.Issue 1: Creating a new external page redirects to the wrong url after saving
The functionality of the "external page" option seems to be flawed when I create a new page and mark it as external during the intial page creation. Let's say for example, I want to create a new link to Microsoft's website, which will be listed in my main website menu. Here are the steps I take to reproduce the error:
- Log into the JobsIntra sample site using the admin account (admin/admin)
- In the control panel, click "Pages" from the main menu
- While in the "Site map" section, click and highlight the "External" menu item group in the left tree menu,
- Click the "Create new page" button
- In the new page form, make the following changes:
- Enter "Microsoft" for Page Name field
- Click the "Optional: Friendly URLs" link
- Click "Add Url" link
- enter http://www.microsoft.com as new Url
- select the new url radio button
- Enter "Microsoft" in the Menu Label field
- Set Show in navigation to "yes"
- Set External Page to "yes"
- Click Create Page button
After clicking the create page button, Sitefinity doesn't seem to register that the page is external, and forwards me to the following url:
I get a page cannot be found error from the above url (obviously). It looks like the CMS did not apply any logic to ensure the page was internal before redirecting to the url for internal page editing.
Issue 2: Clicking back and attempting to save a second time throws a runtime error.
Because the CMS redirected me to an incorrect URL, I assumed the page creation was unsuccessful, backed up 1 page and clicked the create page button again, which generated a sql data level runtime error due to the first attempt (shown below). I realize this was partly my mistake for resubmitting the same page, but exception handling should have caught the issue before it bubbled up to the presentation layer. Especially since it came all the way from the lowest layer. I would worry these types of errors will scare off non-technical users.
Server Error in '/telerik/JobsIntraSite' Application.
Violation of PRIMARY KEY constraint 'PK_sf_StagedPage'. Cannot insert duplicate key in object 'dbo.sf_StagedPage'.
The statement has been terminated.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_sf_StagedPage'. Cannot insert duplicate key in object 'dbo.sf_StagedPage'.
The statement has been terminated.
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
[SqlException (0x80131904): Violation of PRIMARY KEY constraint 'PK_sf_StagedPage'. Cannot insert duplicate key in object 'dbo.sf_StagedPage'.
The statement has been terminated.]
Nolics.ORMapper.DataProviders.SQLBlockBuilder.EndStatement(SQLCommandEventArgs args, DataRow row) +503
Nolics.ORMapper.DataProviders.SQLBlockBuilder.ExecCommandProcedure(StmtContext context, DataRow data) +779
Nolics.ORMapper.DataProviders.SQLBlockBuilder.ExecuteCommand(StmtContext context, DataRow data) +76
Nolics.ORMapper.DataProviders.SQLDataProvider.Update(DataSet updateData) +419
Nolics.ORMapper.Base.Transaction.Commit(Boolean fCleanIfSuccess) +756
Telerik.Cms.Web.UI.PageProperties.Button_Command(Object sender, CommandEventArgs e) +476
System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e) +105
System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument) +163
System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +174
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5102
Issue 3: Publishing an "external page" is awkward by design
As I try to walk through the workflow for the external page, at certain points I'm shown a generic internal page, rather than the external one.
- While in the "Pages -> Site map" section of the control panel, I click the new "Microsoft" page in the tree view.
- In the right pane, I see the actual Microsoft website as expected
- I click the "Edit page" button so that I can start the workflow process
- The CMS jumps to the generic internal page editor and displays a blank generic CMS page, rather than the external URL/page. I can still follow the workflow along, but this functionality is going to confuse end users of the CMS because they won't understand why they are seeing an internal page.
I personally think the "external page" functionality with respect to workflow needs some work. I think when a page is marked as external, there should be no "edit page" button, and just a "send for approval" and "publish". There is no reason to "edit" the external page as we're not designing it within the CMS, especially when clicking edit just shows an internal page which would be extremely confusing to a novice user. With an external page, the only things we need to change are found within the View / Properties / Permissions / History tabs.
I love that external pages are begining to be supported with the CMS, as this was a common wish from our clients. I just think it's not quite there yet.
I would however like to commend the Sitefinity team on v3.0, as I think Sitefinity is a great product overall and is continuing to improve all the time.
If you need more details please let me know. Thanks