{"id":1163,"date":"2011-06-11T17:59:50","date_gmt":"2011-06-11T15:59:50","guid":{"rendered":"http:\/\/www.itidea.nl\/?p=1163"},"modified":"2011-06-11T17:59:50","modified_gmt":"2011-06-11T15:59:50","slug":"simple-provider-consumer-visual-webparts","status":"publish","type":"post","link":"https:\/\/www.itidea.nl\/index.php\/simple-provider-consumer-visual-webparts\/","title":{"rendered":"Simple Provider Consumer Visual Webparts"},"content":{"rendered":"<p>Because of a question on <a href=\"http:\/\/sharepoint.stackexchange.com\/questions\/14325\/created-connectable-webparts-but-the-connections-menu-item-is-not-showing\">http:\/\/sharepoint.stackexchange.com\/questions\/14325\/created-connectable-webparts-but-the-connections-menu-item-is-not-showing<\/a>\u00a0I decided to create a provider consumer webpart in\u00a0his most simple form.\u00a0\u00a0\u00a0<\/p>\n<p>Create an empty SharePoint project in Visual studio.<br \/>\nAdd two Visual WebParts:\u00a0\u00a0\u00a0<\/p>\n<ol>\n<li>ProviderVisualWebpart<\/li>\n<li>ConsumerVisualWebpart<\/li>\n<\/ol>\n<p>\u00a0\u00a0\u00a0<\/p>\n<p>In this most simple form of a provider consumer webpart only one string is passed from the provider to the consumer and it displayed in a Label control on the consumer webpart.\u00a0\u00a0\u00a0<\/p>\n<p>Code in ProviderVisualWebpart.cs:\u00a0\u00a0\u00a0<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\r\npublic class ProviderVisualWebPart : System.Web.UI.WebControls.WebParts.WebPart, ITransformableFilterValues\r\n{\r\n\u00a0\u00a0\u00a0 private const string _ascxPath = @&quot;~\/_CONTROLTEMPLATES\/ConsumerProviderVWP\/ProviderVisualWebPart\/ProviderVisualWebPartUserControl.ascx&quot;;\r\n\u00a0\r\n\r\n\u00a0\u00a0\u00a0 protected override void CreateChildControls()\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Control control = Page.LoadControl(_ascxPath);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Controls.Add(control);\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 public string ParameterName\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 get\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return &quot;Letter&quot;;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 public ReadOnlyCollection&lt;string&gt; ParameterValues\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 get\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 List&lt;string&gt; values = this.GetValues();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return new ReadOnlyCollection&lt;string&gt;(values);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 private List&lt;string&gt; GetValues()\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 List&lt;string&gt; valueList = new List&lt;string&gt;();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 valueList.Add(&quot;A&quot;);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return valueList;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 &#x5B;ConnectionProvider(&quot;Letter Filter&quot;, &quot;ITransformableFilterValues&quot;)]\r\n\u00a0\u00a0\u00a0 public ITransformableFilterValues SetConnectionInterface()\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return this;\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 public bool AllowEmptyValue\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 get { return true; }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 public bool AllowMultipleValues\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 get { return false; }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 public bool AllowAllValue\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 get { return true; }\r\n\u00a0\u00a0\u00a0 }\r\n}\r\n\r\n\r\n<\/pre>\n<p>\u00a0\u00a0\u00a0\u00a0<\/p>\n<p>Code in ConsumerVisualWebpart.cs:\u00a0\u00a0\u00a0<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\r\npublic class ConsumerVisualWebPart : System.Web.UI.WebControls.WebParts.WebPart\r\n{\r\n\u00a0\u00a0\u00a0 private const string _ascxPath = @&quot;~\/_CONTROLTEMPLATES\/ConsumerProviderVWP\/ConsumerVisualWebPart\/ConsumerVisualWebPartUserControl.ascx&quot;;\r\n\r\n\r\n\u00a0\u00a0\u00a0 public ConsumerVisualWebPart()\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 _filterProviders = new List&lt;IFilterValues&gt;();\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 protected override void CreateChildControls()\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ConsumerVisualWebPartUserControl control = (ConsumerVisualWebPartUserControl)Page.LoadControl(_ascxPath);\r\n\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 control.ValueSendByProviderProperty = &quot;From provider: &quot;;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 foreach (IFilterValues filter in FilterProviders)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (filter.ParameterValues != null)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 foreach (string item in filter.ParameterValues)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 control.ValueSendByProviderProperty += item;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Controls.Add(control);\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 protected override void Render(HtmlTextWriter writer)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 base.Render(writer);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 foreach (IFilterValues filter in FilterProviders)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 writer.WriteLine(string.Format(&quot;Parameter: {0} &lt;br&gt;&quot;, filter.ParameterName));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 \/\/\/ &lt;summary&gt;\r\n\u00a0\u00a0\u00a0 \/\/\/ Hold incoming filtervalues\r\n\u00a0\u00a0\u00a0 \/\/\/ &lt;\/summary&gt;\r\n\u00a0\u00a0\u00a0 private List&lt;IFilterValues&gt; _filterProviders;\r\n\u00a0\u00a0\u00a0 private List&lt;IFilterValues&gt; FilterProviders\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 get { return _filterProviders; }\r\n\u00a0\u00a0\u00a0 }\r\n\r\n\r\n\u00a0\u00a0\u00a0 &#x5B;ConnectionConsumer(&quot;filter&quot;, &quot;UniqueIDForConsumer&quot;, AllowsMultipleConnections = true)]\r\n\u00a0\u00a0\u00a0 public void SetFilter(IFilterValues filterValues)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 if (filterValues != null)\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 List&lt;ConsumerParameter&gt; parameters = new List&lt;ConsumerParameter&gt;();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 parameters.Add(new ConsumerParameter(&quot;Letter&quot;, ConsumerParameterCapabilities.SupportsSingleValue | ConsumerParameterCapabilities.SupportsAllValue | ConsumerParameterCapabilities.SupportsEmptyValue));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 filterValues.SetConsumerParameters(new System.Collections.ObjectModel.ReadOnlyCollection&lt;ConsumerParameter&gt;(parameters));\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 this.FilterProviders.Add(filterValues);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n}\r\n\r\n\r\n<\/pre>\n<p>Code in ConsumerVisualWebpartUserControl.ascx.cs:\u00a0\u00a0\u00a0<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n\r\npublic partial class ConsumerVisualWebPartUserControl : UserControl\r\n{\r\n\u00a0\u00a0\u00a0 public string ValueSendByProviderProperty { get; set; }\r\n\u00a0\r\n\r\n\u00a0\u00a0\u00a0 protected void Page_Load(object sender, EventArgs e)\r\n\u00a0\u00a0\u00a0 {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ValueSendByProvider.Text = ValueSendByProviderProperty;\r\n\u00a0\u00a0\u00a0 }\r\n}\r\n\r\n\r\n<\/pre>\n<p>Control added to VisualWebpart.ascx:\u00a0\u00a0\u00a0<\/p>\n<pre class=\"brush: xml; title: ; notranslate\" title=\"\">\r\n\r\n&lt;asp:Label ID=&quot;ValueSendByProvider&quot; runat=&quot;server&quot; Text=&quot;Label&quot;&gt;&lt;\/asp:Label&gt;\r\n\r\n\r\n<\/pre>\n<p>That&#8217;s it!\u00a0\u00a0\u00a0<\/p>\n<p>Put both controls on a page and connect them to each other.\u00a0\u00a0\u00a0<\/p>\n<p>No connection set:\u00a0\u00a0\u00a0<\/p>\n<p><a href=\"https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerNoConnection.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1166\" title=\"ProviderConsumerNoConnection\" src=\"https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerNoConnection.png\" alt=\"\" width=\"191\" height=\"97\" \/><\/a>\u00a0Connect:\u00a0\u00a0\u00a0<\/p>\n<p><a href=\"https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerSetConnection.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1167\" title=\"ProviderConsumerSetConnection\" src=\"https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerSetConnection.png\" alt=\"\" width=\"562\" height=\"188\" srcset=\"https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerSetConnection.png 562w, https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerSetConnection-299x100.png 299w\" sizes=\"auto, (max-width: 562px) 100vw, 562px\" \/><\/a>Configure:\u00a0\u00a0\u00a0<\/p>\n<p><a href=\"https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerConfigureConnection.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1168\" title=\"ProviderConsumerConfigureConnection\" src=\"https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerConfigureConnection.png\" alt=\"\" width=\"467\" height=\"234\" srcset=\"https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerConfigureConnection.png 467w, https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerConfigureConnection-300x150.png 300w\" sizes=\"auto, (max-width: 467px) 100vw, 467px\" \/><\/a>Connection established:\u00a0\u00a0\u00a0<\/p>\n<p><a href=\"https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerEstablishedConnection.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1169\" title=\"ProviderConsumerEstablishedConnection\" src=\"https:\/\/www.itidea.nl\/wp-content\/uploads\/2011\/06\/ProviderConsumerEstablishedConnection.png\" alt=\"\" width=\"205\" height=\"109\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Because of a question on http:\/\/sharepoint.stackexchange.com\/questions\/14325\/created-connectable-webparts-but-the-connections-menu-item-is-not-showing\u00a0I decided to create a provider consumer webpart in\u00a0his most simple form.\u00a0\u00a0\u00a0 Create an empty SharePoint project in Visual studio. Add two Visual WebParts:\u00a0\u00a0\u00a0 ProviderVisualWebpart ConsumerVisualWebpart \u00a0\u00a0\u00a0 In this most simple form of a provider &#8230; <a class=\"more-link\" href=\"https:\/\/www.itidea.nl\/index.php\/simple-provider-consumer-visual-webparts\/\">Read More &raquo;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[20,42,6],"class_list":["post-1163","post","type-post","status-publish","format-standard","hentry","category-sharepoint-2010","tag-c","tag-sharepoint-2010","tag-visual-studio"],"_links":{"self":[{"href":"https:\/\/www.itidea.nl\/index.php\/wp-json\/wp\/v2\/posts\/1163","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.itidea.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.itidea.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.itidea.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.itidea.nl\/index.php\/wp-json\/wp\/v2\/comments?post=1163"}],"version-history":[{"count":7,"href":"https:\/\/www.itidea.nl\/index.php\/wp-json\/wp\/v2\/posts\/1163\/revisions"}],"predecessor-version":[{"id":1174,"href":"https:\/\/www.itidea.nl\/index.php\/wp-json\/wp\/v2\/posts\/1163\/revisions\/1174"}],"wp:attachment":[{"href":"https:\/\/www.itidea.nl\/index.php\/wp-json\/wp\/v2\/media?parent=1163"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.itidea.nl\/index.php\/wp-json\/wp\/v2\/categories?post=1163"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.itidea.nl\/index.php\/wp-json\/wp\/v2\/tags?post=1163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}