Monday, November 23, 2009

Installing SharePoint 2010 on machine with existing SQL Server 2008

If you already have SQL Server 2008 installed, DO NOT install SharePoint 2010 as a single server (standalone) version. It will create additional instance of SQL Server Express, which is obviously not what you want. This also brings some additional problems (based on this). Select a full installation. If you don't have domain and using local accounts - you need to read this blog.

Thursday, November 19, 2009

SharePoint 2010 Beta Installation

Do not try installing SharePoint 2010 Beta (14.0.4536.1000) on top of SharePoint 2010 Technical Preview (14.0.4006.1010) unless you really need this.It will install but would not work correctly. Just uninstall previous version first.

Office 2010 x64 with Office 2003/2007 side by side

I am still using Office 2003 to be able to work with some legacy applications. While installing Beta Office 2010 x64 I got an error that I can't use 2003 and 2007 side by side with 2010 x64 - and I have to use x86 instead.

Just uninstall all 2003/2007 office apps, install 2010 x64 and than install office 2003/2007 without any problems.

Tuesday, October 13, 2009

Invalid Canary for view file

After we installed Infrastructure Updates we started to experience some problems with InfoPath Forms - getting "There has been an error while loading the form. A required resource could not be downloaded. To try to resume the download, refresh the page.", when using some of the alternative URLs.

SharePoint logs was showing me "WARNING: Invalid Canary for view file"

Based on the info from the Microsoft, there is an known problem with the Alternate Access Mapping in Infrastructure Updates. The next cumulative update is supposed to fix this issue. Will update this post as soon as I get it installed and verified.

Update: After installing SP2 issue was fixed.

InfoPath property promotion (field association) problem

Just experienced the following problem today - spend a couple hours on figuring it out: I have a full-trusted infoPath form that is allready published and working. There were a few form properties/fields associated with the fields/columns in the SharePoint. I have tried adding a few additional - but it didn't work. The fields were there, the values were inside of the InfoPath form, but they were not carried over to SharePoint. It looks like you need to reactivate (deactivate first and activate again) this form for the site collection from the Central Admin in order for those associations to be refreshed.

Monday, August 24, 2009

InfoPath 2007 Bug - Form Does not Submit

Encountered weird InfoPath bug. Had an Approval Workflow with the InfoPath 2007 Web Form (MOSS). User had problems submitting the Form, click on the submit button was doing nothing. Reopening the Form was enough to submit. I watched how user worked with the Form, and noticed that the user was double clicking on the email link, which was causing the form to load twice (in two IE tabs). Changing this habit to clicking only once - solved the problem completely.

I have no idea why double loading the form was preventing it from submitting, but that's what it was.

Friday, May 29, 2009

SSRS Column Width Auto Size

While fixing the problem described in my previous post I saw lots of people trying to set auto width for the columns. Without any luck though... I have found a way:

  1. Change Expression to be something like =”<DIV>” & Replace(Fields!YourField.Value," ","&nbsp;") & “</DIV>”
  2. Change placeholder properties – General tab – Markup type – HTML-Interpret HTML tags as styles. (Placeholder properties can be accessed by right clicking on Expression (Field) inside of the cell, not on cell itself).

That was too easy :)

PS. Works for SSRS 2008, never tested on 2005.

PPS. Keep in mind - this works ONLY in web browser. Export to PDF and even printing will still use predesigned column width. There might be a workaround too - but I don't really need it, so I will leave it to you guys.

Please comment if you find any additional notes.

Wednesday, May 27, 2009

SSRS Column Width Long Text Problem

Recently I got a weird problem building some reports with SSRS 2008. The column width started to automatically resize based on content, while all columns width are fixed in SSRS by design. The cause of this was long words and long URLs in these fields, which were not able to wrap. Looks like HTML table was adjusting the column size accordingly. (By the way, it was still showing Ok in preview, but was changing the size of columns in published version.) Spent quite a time trying to figure out what to do with that, cause I need those column widths to be static. Here is the solution:

While this problem is caused by native HTML functionality, we can use HTML to fix it.

  1. Change Expression to be something like =”<DIV style=’width:1.2in’>” & Fields!YourField.Value & “</DIV>” where width is the desired static width of this column.
  2. Change placeholder properties – General tab – Markup type – HTML-Interpret HTML tags as styles. (Placeholder properties can be accessed by right clicking on Expression (Field) inside of the cell, not on cell itself).

PS. I am also sure that you can use the same approach to create columns with adjustable or auto width, it just needs some tweaking. Update: Here it is.

Monday, April 13, 2009

JavaScript in SharePoint 2007 / MOSS Data View XSL

This sound obvious, but looks like lots of people do not know this. YES, you can use JavaScript in XSL. And YES, you can use JavaScript in SharePoint Data View XSL. And it is fairly easy. Here is a small sample.

Let’s say we want to know how old each item we view in Data View is. As the version of XSL used in SharePoint is “1.0”, we don’t really have a wide scope of date functions. Actually we do have only “FormatDate” function, and even this one comes from a special (ddwrt) Microsoft namespace.

Anyhow, instead of working with XSL, trying to create some crazy Template to handle this task, we can simply use JavaScript.

I assume here that you worked with SharePoint Designer 2007 and Data Views before.

You’ll have to add a JavaScript function first. You can add/link it to the page, page layout or master page, does not matter. I will use slightly modified script from “The JavaScript Source”.

<script type="text/javascript">
 var montharray=new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
 function countup(dat) {
  var dt = new Date(Date.parse(dat));
  var yr =dt.getYear();
  var m =dt.getMonth();
  var d =dt.getDate();
  var today=new Date();
  var todayy=today.getYear();
  if ((navigator.appName=="Microsoft Internet Explorer") && (todayy<2000))
  if (navigator.appName == "Netscape")
   todayy=1900 + todayy;
  var todaym=today.getMonth();
  var todayd=today.getDate();
  var todaystring=montharray[todaym]+" "+todayd+", "+todayy;
  var paststring=montharray[m]+" "+d+", "+yr;
  var difference=(Math.round((Date.parse(todaystring)-Date.parse(paststring))/(24*60*60*1000))*1);
  document.write(difference + " day(s)");

Now we need to call this JavaScript function from Data View. Just click into one of the respectful cells in your Data View, and switch to Code View. You’ll see something like this:

<td class="ms-vb">
 <xsl:value-of select="ddwrt:FormatDate(string(@Modified), 1033, 5)" />

Now we’ll edit it, adding the JavaScript Call:

<td class="ms-vb">
 <script language="javascript">countup("<xsl:value-of select="ddwrt:FormatDate(string(@Modified),1033,1)" />");</script>


PS: I did not add any screen shots here assuming that it is fairly easy, but if you need some, just leave some comments.

SharePoint 2007 / MOSS URL Zones are limited

Ever wondered if there is any way to add additional zone to the list of URL Zones in SharePoint Central Administration? Sorry guys, no way. It is actually a predefined enumeration defined in Microsoft.SharePoint.dll

public enum SPUrlZone

Sunday, April 12, 2009

SharePoint 2007 / MOSS Page Refers Old Layout

Recently I was working a lot with SharePoint 2007 / MOSS Publishing Pages and Layouts. I noticed a weird behavior when I was moving some of the pages from dev environment to production. Sometimes the link to page layout is getting stuck and still pointing to an old (dev) environment. It was not obvious to find a way to fix it…

First I tried just exporting those pages to my local disk and editing it in notepad and putting it back. This approach did work, but was a little bit too manual…

After some head scratching I finally found a Page Settings page. When your page editing toolbar is visible (you clicked on “Site Actions” ->“Edit Page”), you can click on Page dropdown and select “Page Settings and Schedule”. On that page you can control Page Title and Description, Publishing Schedule, Page Layout, Audience Targeting and Page Contact. Alternatively you can just browse to it http://your-sharepoint-site/_layouts/PageSettings.aspx?Page=<Page ID>.

I had a few situations when it was still not working, and I was getting an error trying to change layout settings. You can always edit it in notepad in that case, as I described earlier.

Wednesday, April 8, 2009

Thicket “_files” folder and SharePoint 2007 (MOSS)

I got into this one when I was asked to put some Microsoft Publisher generated files into SharePoint 2007 site. Basically I got “index.html” file and “index_files” folder with some images and html files inside. I did put the index file into the root, then created the Document Library named “index_files”. Also I uploaded all the files into it without any problems using “Open in Windows Explorer” functionality. Everything actually started to work well. Then I was surprised that I don’t see this document library in SharePoint Designer. When I opened it from the browser – it was empty. But it was still showing all the files when opened with Windows Explorer. When I tried to change document library settings to work with content types, the whole settings page started to throw error.

I did some research and it looks like SharePoint 2007 has some native support of so called “thicket” folder (“_files” folder). SharePoint does not allow creating such a folder when you don’t have a corresponding (parent) file. When you try to create such folder using SharePoint Designer, it appends its name with an underscore at the end. SharePoint web interface hides content of such folder, while keeping those files accessible from Windows Explorer or when you browse/refer it directly.

My advise – try to avoid thickets in SharePoint. Those are hard to manage there.

Tuesday, March 24, 2009

"SharePoint designer encountered an error generating the task form" error caused by using IP address instead of machine name

Never use IP address instead of machine name while using SharePoint Designer. You can save yourself some time NOT trying to solve the problems caused by that…

I was playing with some SharePoint Designer workflows the other day and was getting “SharePoint designer encountered an error generating the task form” error all the time. And yes, the moment I changed IP to machine name, the problem was gone. And that is not the first error in my practice I had because of that issue.

Tuesday, March 10, 2009

Creating and customizing SharePoint 2007/MOSS Central Administration Application Pages

Some time ago I got a task create my own SharePoint Central Admin Page. I did start googling and going through different blogs but found almost nothing. Some tips here and there and that’s pretty much it. When I was finally done, I decided that I should structure all my experience whenever I get a chance. So, finally, half a year later I decided to start this blog with this article.

A brief introduction

SharePoint Central Admin Pages physically located inside \12\Admin folder. If you want to look through how some of the current Central Admin Application Pages function, you may use .NET Reflector on Microsoft.Sharepoint.ApplicationPages.Administration.dll and Microsoft.Office.Server.UI.dll. It is respectively located inside of \12\CONFIG\ADMINBIN folder and Assembly Cache.

Review out-of-the-box pages.

Lets review existing MOSS out-of-the-box Central Administration Application Pages:
FarmServers.aspxMicrosoft.SharePoint.ApplicationPages.FarmServersPageOperationsPage : GlobalAdminPageBase
Server.aspxMicrosoft.SharePoint.ApplicationPages.ServerPageOperationsPage : GlobalAdminPageBase
GlobalEmailConfig.aspxMicrosoft.SharePoint.ApplicationPages.GlobalEmailConfigPageOperationsPage : GlobalAdminPageBase
IncomingEmail.aspxMicrosoft.SharePoint.ApplicationPages.IncomingEmailPageOperationsPage : GlobalAdminPageBase
FarmCredentialManagement.aspxMicrosoft.SharePoint.ApplicationPages.FarmCredentialManagementPageOperationsPage : GlobalAdminPageBase
irmadmin.aspxMicrosoft.SharePoint.ApplicationPages.IrmGlobalSettingsOperationsPage : GlobalAdminPageBase
avadmin.aspxMicrosoft.SharePoint.ApplicationPages.AntiVirusConfigPageOperationsPage : GlobalAdminPageBase
BlockedFileType.aspxMicrosoft.SharePoint.ApplicationPages.BlockedFileTypePageOperationsPage : GlobalAdminPageBase
policyfeatures.aspxMicrosoft.Office.RecordsManagement.InformationPolicy. ApplicationPages.PolicyFeatures (Microsoft.Office.Policy.AdminPages.dll)GlobalAdminPageBase
managesso.aspxMicrosoft.SharePoint.Portal.SingleSignonAdministration.ManageSSOPage (Microsoft.SharePoint.Portal.dll)SSOAdminBase : OfficeServerPageBase
metrics.aspxMicrosoft.SharePoint.ApplicationPages.MetricsPageOperationsPage : GlobalAdminPageBase
LogUsage.aspxMicrosoft.SharePoint.ApplicationPages.LogUsagePageOperationsPage : GlobalAdminPageBase
policyRptConfig.aspxMicrosoft.Office.RecordsManagement.Reporting. ApplicationPages.PolicyRptConfig (Microsoft.Office.Policy.AdminPages.dll)GlobalAdminPageBase
CMSMigration.aspxMicrosoft.SharePoint.Publishing.Internal.CodeBehind.ManageMigrationProfile (Microsoft.Sharepoint.Publishing.dll)Microsoft.SharePoint.WebControls. UnsecuredLayoutsPageBase
EnableFeatures.aspxMicrosoft.SharePoint.Portal.ServerAdmin.FeaturePushdownPage (Microsoft.SharePoint.Portal.dll)CentralAdminPageBase
ServiceRunningJobs.aspxMicrosoft.SharePoint.ApplicationPages.TimerJobsPageOperationsPage : GlobalAdminPageBase
ServiceJobDefinitions.aspxMicrosoft.SharePoint.ApplicationPages.TimerJobsPageOperationsPage : GlobalAdminPageBase
sitedirectorysettings.aspxMicrosoft.SharePoint.Portal.ServerAdmin.SiteDirectorySettings (Microsoft.SharePoint.Portal.dll)CentralAdminPageBase
linkscheckerjobsettings.aspxMicrosoft.SharePoint.Portal.SiteAdmin.LinksCheckerJobSettings (Microsoft.SharePoint.Portal.dll)CentralAdminPageBase
ManageFarmFeatures.aspxMicrosoft.SharePoint.ApplicationPages.ManageFarmFeaturesPageApplicationsManagementPage : GlobalAdminPageBase
backup.aspxMicrosoft.SharePoint.ApplicationPages.BackupPageBackupAdminPageBase : OperationsPage : GlobalAdminPageBase
backuphistory.aspxMicrosoft.SharePoint.ApplicationPages.BackupHistoryPageBackupAdminPageBase : OperationsPage : GlobalAdminPageBase
restorestep1.aspxMicrosoft.SharePoint.ApplicationPages.RestoreStep1PageBackupAdminPageBase : OperationsPage : GlobalAdminPageBase
Restorestep3.aspxMicrosoft.SharePoint.ApplicationPages.RestoreStep3PageBackupAdminPageBase : OperationsPage : GlobalAdminPageBase
backupstatus.aspxMicrosoft.SharePoint.ApplicationPages.BackupStatusPageBackupAdminPageBase : OperationsPage : GlobalAdminPageBase
defaultcontentdb.aspxMicrosoft.SharePoint.ApplicationPages.DefaultContentDatabasePageOperationsPage : GlobalAdminPageBase
DspSettings.aspxMicrosoft.SharePoint.ApplicationPages.DspSettingsOperationsPage : GlobalAdminPageBase
Deployment.aspxMicrosoft.SharePoint.Publishing.Internal.CodeBehind. DeployManagePathsAndJobsPage (Microsoft.Sharepoint.Publishing.dll)BasePublishingPage : LayoutsPageBase : UnsecuredLayoutsPageBase
DeploymentSettings.aspxMicrosoft.SharePoint.Publishing.Internal.CodeBehind.DeploySettingsPage (Microsoft.Sharepoint.Publishing.dll)BasePublishingPage : LayoutsPageBase : UnsecuredLayoutsPageBase
DeploymentStatus.aspxMicrosoft.SharePoint.Publishing.Internal. CodeBehind.DeploymentObjectStatusPage (Microsoft.Sharepoint.Publishing.dll)BasePublishingPage : LayoutsPageBase : UnsecuredLayoutsPageBase
Application Management
unextendvs.aspxMicrosoft.SharePoint.ApplicationPages.UnextendVirtualServerPageApplicationsManagementPage : GlobalAdminPageBase
deletewebapplication.aspxMicrosoft.SharePoint.ApplicationPages.DeleteWebApplicationPageApplicationsManagementPage : GlobalAdminPageBase
scprefix.aspxMicrosoft.SharePoint.ApplicationPages.SscPrefixPageApplicationsManagementPage : GlobalAdminPageBase
vsemail.aspxMicrosoft.SharePoint.ApplicationPages.VSEmailConfigPageApplicationsManagementPage : GlobalAdminPageBase
vsgeneralsettings.aspxMicrosoft.SharePoint.ApplicationPages.VirtualServerGeneralSettingsPageApplicationsManagementPage : GlobalAdminPageBase
cntdbadm.aspxMicrosoft.SharePoint.ApplicationPages.ContentDBManagmentPageApplicationsManagementPage : GlobalAdminPageBase
ManageWebAppFeatures.aspxMicrosoft.SharePoint.ApplicationPages.ManageWebAppFeaturesPageApplicationsManagementPage : GlobalAdminPageBase
WebApplications.aspxMicrosoft.SharePoint.ApplicationPages.ListWebApplicationsPageSelectWebApplicationPage : SelectPage : GlobalAdminPageBase
SPSecuritySettings.aspxMicrosoft.SharePoint.ApplicationPages.WebPartPageSettingsPageApplicationsManagementPage : GlobalAdminPageBase
configssc.aspxMicrosoft.SharePoint.ApplicationPages.ConfigSscPageApplicationsManagementPage : GlobalAdminPageBase
vsmask.aspxMicrosoft.SharePoint.ApplicationPages.VirtualServerMaskPageApplicationsManagementPage : GlobalAdminPageBase
policy.aspxMicrosoft.SharePoint.ApplicationPages.PolicyPageApplicationsManagementPage : GlobalAdminPageBase
managesearchservice.aspxMicrosoft.SharePoint.Portal.Search.Admin.Pages.ManageSearchService (Microsoft.SharePoint.Portal.dll)SearchCentralAdminPageBase : CentralAdminPageBase
workflowadmin.aspxMicrosoft.SharePoint.ApplicationPages.WorkflowAdminPageApplicationsManagementPage : GlobalAdminPageBase
createsite.aspxMicrosoft.SharePoint.ApplicationPages.CreateSitePageApplicationsManagementPage : GlobalAdminPageBase
delsite.aspxMicrosoft.SharePoint.ApplicationPages.DeleteSitePageApplicationsManagementPage : GlobalAdminPageBase
DeleteSiteConfig.aspxMicrosoft.SharePoint.ApplicationPages.DeleteSiteConfigApplicationsManagementPage : GlobalAdminPageBase
ManageQuotaTemplate.aspxMicrosoft.SharePoint.ApplicationPages.ManageQuotaTemplatePageApplicationsManagementPage : GlobalAdminPageBase
SiteQuota.aspxMicrosoft.SharePoint.ApplicationPages.SiteQuotaPageApplicationsManagementPage : GlobalAdminPageBase
owners.aspxMicrosoft.SharePoint.ApplicationPages.OwnersPageApplicationsManagementPage : GlobalAdminPageBase
SiteCollections.aspxMicrosoft.SharePoint.ApplicationPages.ListSitesPageSelectSitePage : SelectPage : GlobalAdminPageBase
OfficialFileAdmin.aspxMicrosoft.SharePoint.ApplicationPages.OfficialFileAdminPageApplicationsManagementPage : GlobalAdminPageBase
HtmlTransAdmin.aspxMicrosoft.SharePoint.ApplicationPages.HtmlTransAdminPageApplicationsManagementPage : GlobalAdminPageBase
DocTransAdmin.aspxMicrosoft.SharePoint.ApplicationPages.DocTransAdminPageApplicationsManagementPage : GlobalAdminPageBase
ManageFormTemplates.aspxMicrosoft.Office.InfoPath.Server. ApplicationPages.ManageFormTemplatesPage (Microsoft.Office.InfoPath.Server.Pages.dll)GridViewPageBase : AdminPageBase
ipfsConfig.aspxMicrosoft.Office.InfoPath.Server. ApplicationPages.FormServerConfigPage (Microsoft.Office.InfoPath.Server.dll)AdminPageBase
UploadFormTemplate.aspxMicrosoft.Office.InfoPath.Server. ApplicationPages.UploadFormTemplatePage (Microsoft.Office.InfoPath.Server.dll)AdminPageBase
ManageDataConnectionFiles.aspxMicrosoft.Office.InfoPath.Server. ApplicationPages.ManageDataConnectionFilesPage (Microsoft.Office.InfoPath.Server.Pages.dll)GridViewPageBase : AdminPageBase
ManageFormsServiceProxy.aspxMicrosoft.Office.InfoPath.Server. ApplicationPages.ManageFormsServiceProxyPage (Microsoft.Office.InfoPath.Server.Pages.dll)AdminPageBase
Shared Services Administration

Building minimal SharePoint Central Administration Application Page.

Typical Central Admin Application Page inherits from Microsoft.SharePoint.ApplicationPages.GlobalAdminPageBase.
In order to be consistent with current pages we want to inherit the new:
• Operations Section page – from Microsoft.SharePoint.ApplicationPages.OperationsPage;
• Application Management page – from Microsoft.SharePoint.ApplicationPages.ApplicationsManagementPage;
Both OperationsPage and ApplicationsManagementPage classes overrides just one PageToRedirectOnCancel property from GlobalAdminPageBase.

Let’s build our first blank Central Admin Applications Management page:
Here is the code:
using System;
using System.Web;

namespace Sharepointalist.Samples.CentralAdmin
    public class ApplicationManagementSamplePage : Microsoft.SharePoint.ApplicationPages.ApplicationsManagementPage

Here is the web page:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ApplicationManagementSamplePage.aspx.cs" Inherits="Sharepointalist.Samples.CentralAdmin.ApplicationManagementSamplePage, Sharepointalist.Samples.CentralAdmin, Version=, Culture=neutral, PublicKeyToken=5f18faed9b7b4caf" MasterPageFile="~/_admin/admin.master"%>

<asp:Content ID="Content1" contentplaceholderid="PlaceHolderAdditionalPageHead" runat="server">

<asp:Content ID="Content2" contentplaceholderid="PlaceHolderPageTitle" runat="server">

<asp:Content ID="Content3" contentplaceholderid="PlaceHolderPageTitleInTitleArea" runat="server">

<asp:content ID="Content4" contentplaceholderid="PlaceHolderPageDescription" runat="server">

<asp:content ID="Content5" contentplaceholderid="PlaceHolderMain" runat="server">


The best way to deploy Central Administration Application Pages is to create a feature. This is described numerous times, so I am not going to get deep this. Just don't forget:

In many cases we want to add a new link to our new page on the MOSS Central Administration Site. We can use Element Manifest file with CustomAction defined for that. Please refer to Custom Action Definitions and Default Custom Action Locations and IDs on MSDN for detailed info.
In short, we need to choose Location(Page) and select/create a Group for our link.
Possible Locations and Groups:
  • Operations Page - Microsoft.SharePoint.Administration.Operations.
    • Backup and Restore - BackupRestore;
    • Data Configuration - DataConfiguration;
    • Global Configuration - GlobalConfiguration;
    • Logging and Reporting - LoggingAndReporting;
    • Security Configuration - Security;
    • Topology and Services - Topology;
    • Upgrade and Migration - Upgrade;
    • Content Deployment - ContentDeployment;
  • Application Management Page - Microsoft.SharePoint.Administration.ApplicationManagement.
    • Application Security - ApplicationSecurity;
    • External Service Connections - ExternalService;
    • SharePoint Site Management - SiteManagement;
    • SharePoint Web Application Management - WebApplicationConfiguration;
    • Workflow Management - WorkflowManagement;
    • Search - SearchGroup;
    • InfoPath Forms Services - IPFSApplicationConfiguration;
    • Office SharePoint Server Shared Services - OfficeServerCoreServices;
  • Application Created Page - Microsoft.SharePoint.Administration.ApplicationCreated.
    • Links - Links;
  • Shared Services Administration Page - Office.Server.ServiceProvider.Administration.
    • User Profiles and My Sites - UAP;
    • Search - Search;
    • Excel Services Settings - ExcelServer;
    • Audiences - AUD;
    • Office SharePoint Usage Reporting - PortalAnalytics;
    • Business Data Catalog - BDC;

Here is a sample Elements.xml
<Elements xmlns="">
    Sequence="10" />
    Title="Application Management Sample Page"
    <UrlAction Url="/_admin/Sharepointalist/Samples/ApplicationManagementSamplePage.aspx"/>

Here is a sample Feature.xml
<?xml version="1.0" encoding="utf-8" ?>
<Feature  Id="90AC28E1-F64B-42bb-AB51-C65590ED5CD4"
          Title="Sharepointalist Sample Central Administration Feature"
          Description="Sample Central Administration Feature. Please visit my web page at"
          ReceiverAssembly="Sharepointalist.Samples.CentralAdmin, Version=, Culture=neutral, PublicKeyToken=5f18faed9b7b4caf"
    <Property Key="GloballyAvailable" Value="true" />
    <ElementManifest Location="Elements.xml"/>


This is enough to create a blank page. You can download an archive with the source code and deployment package here.