Wednesday, January 16, 2008

Webpart beeing Provider and Consumer at the same time

This is basically a easy task to do, but the first time I really had to create such a webpart I made a tiny mistake during the implementation of the Provider/Consumer Interfaces and I ran into one of this terrible SharePoint errors.

The Problem:
I created a Webpart (based on System.Web.UI.WebControls.WebParts.WebPart) ...no problem
I added the bits needed to Consume from another WebPart (I have to say that I was using a own defined Interface, pretty simple one) ...no problem
I implemented another own defined Interface to act as a Provider WebPart for other webparts too... no problem
Building Solution, deploying it, adding the Webparts to a page ...no problem
Connecting my Webpart to a Provier Webpart ...no problem
Now, connecting a consumer to my Webpart... BIG PROBLEM!

The message I got trying to connect the a consumer webpart to my webpart was pretty strange: "There is a problem with one ore more connections, please check one of the webparts for more details" -> but there was no information to find -> thanks SharePoint...

anyway, I tried a hell of things till I found out what was actually the problem.

The Solution:
It is quit easy - To act as a Provider and Consumer Webpart at the same type, in the Consumer- as well as in the Provider-Implementation, the ConnectionProviderAttribute ID must be defined. I usually just defined the DisplayName by taking the first overload of ConnectionProvider. But in case of having multiple ways of communication, the provider and consumer attributes muts be uniquely signed.

Does not work:
[ConnectionProvider("A parameter value")]
public IMyProvider GetMyProvider()
{
return this;
}



Works:
[ConnectionProvider("A parameter value","ParamValue1")]
public IMyProvider GetMyProvider()
{
return this;
}


In the example above, the Provider Implementation gets a unique ID called "ParamValue1". However, note that the consuming Webpart must use the same ID-value to establish the connection. Otherwise, it will not work.


6 comments:

Anonymous said...

THANKS!!! Great post. I was just having the problem with creating web part that is both provider and consumer!

Now, I'll have to read all your blog posts :)

Greetings from Canada!

Anonymous said...

Hooray! Thanks for that. You have saved me from a lot of anguish.

vgrem said...

I had the same problem before reading your post.
Thank you very much.


Vadim G.

Pranav said...

Thanks a lot dude... saved lot of my time... greetings from India.. cheers

Erez said...

Hi
Thanks for your post !
I had the same problem.

I need your help with diffrent problem on the same subject,
i use the same webpart as consumer and as provider.
first i need to get the data from the consmer change the data and then send it with the provider.
the problem is that the prvider event fired before the consumer


how can i change it ?
Thanks

Anonymous said...

Thanks a lot...you spent time figuring this out and because of you, i have saved time.