Skip to main content

Power Automate: SharePoint Copy file action fails on file names with a plus (+) sign

*.dwp and *.webpart confusion about Web Part implementation and usage in SharePoint

Recently I was really confused about which type of web part deployment file extension I should use. After some research I figured the following out (which might be interesting for all SharePoint newbies):
  • .dwp is a web part description xml file used prior and up to SharePoint 2007/2010, therefore is still supported
  • .webpart is the newer extension which came with MOSS 2007
So whats the true difference:
.DWP:
It uses the following namespace xmlns=http://schemas.microsoft.com/WebPart/v2 by default.
The markup looks something like:
<?xml version="1.0"?>
<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
   <Assembly>AssemblyName(with no .dll extension), 
      Version=VersionNumber, Culture=Culture, 
      PublicKeyToken=PublicKeyToken</Assembly>
   <TypeName>WebPartNamespace.WebPartClassName</TypeName>
   <Title>DefaultWebPartTitle</Title>
   <Description>WebPartDescription</Description>
</WebPart> 

Also interesting is that if you derive your web part from Microsoft.SharePoint.WebPartPages.WebPart and switch to your web part gallery and select "New", you will see a list of all registered DLLs that contain web parts, SharePoint suggests the dwp file extension.
SharePoint automatically suggests the type of the web part description file extension, either *.webpart or *.dwp.

- Microsoft.SharePoint.WebPartPages.WebPart = *.dwp
- System.Web.UI.WebControls.WebParts.WebPart = *.webpart

.WEBPART
It uses the following namespace by default: xmlns="http://schemas.microsoft.com/WebPart/v3"
The example markup for it:

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <!--
      The following Guid is used as a reference to the web part class, 
      and it will be automatically replaced with actual type name at deployment time.
      -->
      <type name="My.SharePoint.SomeIntegration.SomeIntegrationWebPart, My.SharePoint.SomeIntegration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=3066ecdd584a19bd" />
      <importErrorMessage>Cannot import SomeIntegration Web Part.</importErrorMessage>
    </metaData>
    <data>
      <properties>
        <property name="Title" type="string">Some Integration Web Part</property>
        <property name="Description" type="string">The web part shows a document type/category tree and an item list.</property>
        <property name="CacheDuration" type="int">5</property>
        <property name="SomeListName" type="string">http://mossdev/Lists/Some%20Import%20List</property>
        <property name="RootName" type="string">Document Type</property>
        <property name="ChromeState" type="chromestate">Normal</property>
        <property name="ChromeType" type="chrometype">None</property>
      </properties>
    </data>
  </webPart>
</webParts>

What happens if you try to add a SharePoint web part to a web part zone which was deployed to SharePoint with a *.webpart file is that you will get a nice popup error message:
Incompatible Web Part markup detected. Use *.dwp web part XML instead of *.webpart web part xml.

I hope this will help you to understand SharePoint web part development and deployment a little better.

Comments

Popular posts from this blog

Yet Another Address Autocomplete PCF Control–powered by Bing

In this blog post I will not go into detail in how to install all the pre-requisites that are required to build and run PCF controls. My goal was to build a new PCF control and get into coding of PCF controls as fast as possible. Here are a few links to articles that will help you installing the pre-requisites (Microsoft PowerApps CLI)  https://docs.microsoft.com/en-us/powerapps/developer/component-framework/get-powerapps-cli Other good references to get into this topic: https://toddbaginski.com/blog/how-to-create-a-powerapps-pcf-control/ https://docs.microsoft.com/en-us/powerapps/developer/component-framework/create-custom-controls-using-pcf I looked through the Guido Preite’s https://pcf.gallery/ which will help you find appropriate use cases / examples for your own needs. It did not take very long to find a simple example to start with: Andrew Butenko's https://pcf.gallery/address-autocomplete/ A few moments later I had the idea to create yet another address autocomplete

Regarding SPFieldMultiLineText (Add HTML/URL content to a field) programmatically

I recently tried so set some HTML content in a SharePoint list column of type SPFieldMultiLineText. My first approach was this piece of code: SPFieldMultiLineText field = item.Fields.GetFieldByInternalName( "Associated Documents" ) as SPFieldMultiLineText; StringBuilder docList = new StringBuilder(); docList.Append( " " ); foreach (DataRow docRow in addDocs) { DataRow[] parent = dr.Table.DataSet.Tables[0].Select( "DOK_ID=" + docRow[ "DOK_MGD_ID" ].ToString()); if (parent != null && parent.Length > 0) { docList.AppendFormat( " {1} " , parent[0][ "FilePath" ].ToString(), parent[0][ "Title" ].ToString()); } } if (docList.Length > 0) { // remove trailing tag docList.Remove(docList.Length-5, 5); } docList.Append( " " ); string newValue = docList.ToString(); item[field.Title] = newValue; What this code does is to get all associated documents to the main document and to add these docu

CRM 2016: The attribute with AttributeId = 'guid' was not found in the MetadataCache.

During the export of an unmanged solution I always received the following error message from my CRM 2016 SP1 OnPremise development system: The attribute with AttributeId = '023bda49-9dfa-401e-b348-9374a4141186' was not found in the MetadataCache. Then I tried to remember what I did since the last solution version. => Yes, there was a field that I deleted, because the customer does not need it anymore. Because I am working on-premise it was easy to check the database for the specific attribute. First, I searched in the attribute table: SELECT [AttributeId]   FROM [Dev_MSCRM].[MetadataSchema].[Attribute]   where [AttributeId] = '023bda49-9dfa-401e-b348-9374a4141186' => result was nothing I concluded CRM deleted the field in this table but missed to remove the attribute from our customer solution. Next thing was to check the solutioncomponent table: SELECT [ModifiedOn]       ,[CreatedBy]       ,[ObjectId]       ,[IsMetadata]       ,[ModifiedBy