From time to time you might want to provision your WebParts using the CAML markup and then modify them in a feature later on. Most examples on the web find the webpart based on it’s title. i.e.
foreach(Webpart webpart in webpartManager.WebParts) { if(webpart.Title == "Title I'm expecting") { // Do something with the webpart webpart.AuthorizationFilter = ""; webpartManager.SaveChanges(webpart); } }
However you can specify the ID of a web part in your onet.xml / element manifest like so:
<View List="Lists/MyList" BaseViewID="1" DisplayName="Counter Parties" Name="List Nmae" RecurrenceRowset="TRUE" WebPartZoneID="Header" WebPartOrder="1"> <![CDATA[ <WebPart xmlns="http://schemas.microsoft.com/WebPart/v2"> <Assembly>Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c</Assembly> <TypeName>Microsoft.SharePoint.WebPartPages.ListViewWebPart</TypeName> <Title>MyList - Workflow Users</Title> <DetailLink>~Site/Lists/MyList/AllItems.aspx</DetailLink> <Description>Use this list to store ... information.</Description> <ID>g_45C819FD_FC4C_44e1_81DD_3AE4FCC34D37</ID> </WebPart> ]]> </View>
Create a new Guid replace the hyphens with underscores and add a “g_” to the beginning of the string g_45C819FD_FC4C_44e1_81DD_3AE4FCC34D37.
Now we can reference the web part in your feature receiver using the indexer property, which is I think you’ll agree much more elegant and less error prone:
Webpart = webpartManager["g_45C819FD_FC4C_44e1_81DD_3AE4FCC34D37"] // Do something with the webpart webpart.AuthorizationFilter = ""; webpartManager.SaveChanges(webpart);