I wonder sometimes how this people editor works, Because once you just place the people editor control in web part and then it automatically synchronize the Active Directory if web application is configured as Windows Authentication or from Profile database if Web application is configured as Form Based Authentication. you do not need to do any programming for that. it is really a wonderful thing and i really liked this approach.
I faced several challenges while implementing this control in web part. The requirement is like this. we are not supposed to use a default web parts provided in NewForm, EditForm and DispForm, so we removed those web part and placed our own data entry web part having many validations and pop up windows and many code related stuff that would not be possible with the default web parts.
So but obvious that i have to use people editor control in my web part and use it for getting users from AD and then to store it in the List. Now, because we use our own web part, we ourselves have to write a logic to insert the data entered in data entry web part in the list. so we have to code for this control as well.
so i do it like this, first i add the Field in the list and select set the column to People or Group and select the show Field property as Name(with Presence).
First add the Directive at the top of the page
<%@ Register TagPrefix="wssawc" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
And now you can add the control for peopleeditor anywhere in your webpart. Just place this tag.
<wssawc:PeopleEditor id="peopleContact"
AllowEmpty="true"
ValidatorEnabled="false"
MultiSelect="false"
runat="server"
SelectionSet="User"
width='200px'
Height='25px' />
You can set different properties depending upon your requirements.
Once you have done this, add a reference for this control in your supporting cs file for the web part (ASCX control).
Do not forget to add reference for : Microsoft.SharePoint.WebControls
Add this line
PeopleEditor peopleContact;
Add this line to your CreateChildControl method and before Page.IspostBack condition
peopleContact = (PeopleEditor)this.ctrlCategoryUserControl.FindControl("{controlnameinascx}");
And finally at the time of inserting the data in the list, just perform the following steps.
SPUser objUser = SPContext.Current.Web.Users[peopleContact.CommaSeparatedAccounts];
String strUserToInsert = objUser.ID + ";#" + objUser.Name;
This is the way you will get the user, if peopleeditor's Multi Select True Or False, this will require modifying this code a bit only.
This will do the insertion for this.
At the time of displaying or editing the same value in Editform Webpart and DispForm Webpart (Your custom made, not the default one that comes with moss), you have to perform the following steps.
I assume that you have fetched a ListItem record in table and now that value for peopleeditor from the field of that List is stored in "UserToDisplay" variable. I also assume that you have performed the same steps as mentioned above for NewForm.
then, just set the following.
peopleContact.CommaSeparatedAccounts = UserToDisplay;
This will display the same User in peopleeditor control.
That's it. Your job is done.
1 comment:
I have a tab control in which I have a peopleeditor in the first tab called "pplowner". The last tab is a summary of values of controls selected in the other tabs. I have to do this using javascript. currently, I am doing,
var elem = document.forms[0].elements;
for(var i=0; i < elem.length; i++)
{
if(elem[i].id.indexOf("pplOwner") != -1 && elem[i].id.indexOf("TextBox") != -1) users = elem[i].value;
}
Now, I display the value in users in a label.
The poblem that I am facing is,
if I delete a value from the peopleeditor's textbox, I still get the old values in users.
Also, the names are displayed as domain/userid, whereas I want it as user's name as it is shown in the peopleeditor.
Can you suggest a solution?
Post a Comment