views:

464

answers:

5

I have a standard ASP.NET 2.0 website.
It has a webpage page.
I have a webpart in my Company.Web.dll that I display on my webpart page on my website.
All is good!!!

I would like to use this same webpart in SharePoint 2007.

I have a "site definition" project in VS2008 using Extensions for SharePoint 1.2. I have tried various ways to add the webpart from an outside assembly to my site definition. I have been able to deploy the webpart (where it is added to the webpart list of a webpart page) but I have been unsuccessful at adding the it to a page.

My Glorious Failures:

  1. Created a shell webpart to just display the existing web part, basically just using my part as a control.
  2. Attempted to modify the X.webpart and X.xml files created by VS2008 when you create a new webpart.

Both result in the following error while adding the web part to the page:

Exception Microsoft.SharePoint.WebPartPages.WebPartPageUserException: Cannot import XXXX Web Part.
at Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(Boolean clearConnections) at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, Uri webPartPageUri, SPWeb spWeb) at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, SPWeb spWeb) at Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)

Is there a special way I need to add my existing webpart to my site definition?

A: 

You would need WSS 3.0, SharePoint MOSS or 2007 to use ASP.NET 2.0 WebParts. SharePoint 2003 or below and WSS 2.0 or below do not support ASP.NET WebParts.

Nissan Fan
The development environment is WSS 3.0 and the production environment is MOSS 2007.
Cube Pirate
A: 

The steps he takes in this article might be helpful to you.

JP Alioto
A: 

ASP.NET webparts and Sharepoint Webparts are NOT the same. You should be able to use a ASPNET webpart within Sharepoint. See the following table:

ASP.NET 2.0 Web Part

  • For most business needs.
  • To distribute your Web Part to sites that run ASP.NET 2.0 or SharePoint sites.
  • When you want to reuse one or more Web Parts created for ASP.NET 2.0 sites on SharePoint sites.
  • To use data or functionality provided by Windows SharePoint Services 3.0. For example, you are creating a a Web Part that works with site or list data.

SharePoint-based Web Part

  • When you want to migrate a set of Web Parts using the SharePoint-based Web Part infrastructure to Windows SharePoint Services 3.0.
  • To create cross page connections.
  • To create connections between Web Parts that are outside of a Web Part zone.
  • To work with client-side connections (Web Part Page Services Component).
  • To use a data-caching infrastructure that allows caching to the content database.

For a Sharepoint webpart to work in a standard ASPNET application you would need to recreate your webparts in Visual Studio (as an ASPNET webpart) without the Sharepoint 2007 references for it to work correctly.

One nifty tool which I have used in the past is the SmartPart Worth checking out:

This lets you create a ASP.NET usercontrol (visually) in Visual Studio and then host this in Sharepoint. The smartpart acts as a wrapper wepart for your user control. Think of it like the page viewer webpart in Sharepoint except instead of it being HTML pages its ASP.NET UserControls.

JamesM
Not really true. "Web Parts that derive from the ASP.NET WebPart class are completely supported in Windows SharePoint Services" http://msdn.microsoft.com/en-us/library/ms452873.aspx
Alex Angas
Noticed another down voter. Can you at least leave a comment if your going to down vote - its rather rude otherwise.
JamesM
Actually SharePoint 2007 is completely compatible with WebParts written in ASP.NET 2.0.
Nissan Fan
A: 

To find the details of why the web part won't import, check the ULS logs. These are typically located at %CommonProgramFiles%\Microsoft Shared\web server extensions\12\LOGS. An entry will be logged here at the time you attempt to add the web part to the page. This should give you more detail.

My guess is that it is a code access security issue. Your web part must be strongly signed and needs a SafeControl entry in the web.config of the SharePoint web application. Apart from these things you should be able to just add it to the Global Assembly Cache to test if it works (best practice is to write a CAS policy file). See Deploying Web Parts in Windows SharePoint Services for more details.

I would try these steps before trying to integrate it as part of a site definition. Then at least you know the web part will actually run.

Also, VSeWSS is really designed for developing your web part using it from the very start. If you have the original source, you could try creating a new web part with VSeWSS and then replace with your custom code and update the .webpart and feature XML files. Then it should behave a little better. If you haven't committed to VSeWSS, try WSPBuilder as it's less painful.

Alex Angas
Known as the "12 Hive" if I remember from my SP Admin Guide correctly? :P
JamesM
+1  A: 

This sounds like a problem resolving the GUID at deployment time, as you can read about in this SO question.

crb
That's cheating! You stole your answer. But it worked! :-)
Cube Pirate