extendiendo-el-control-peoplepicker

Extendiendo el control PeoplePicker

Ahora presentaré un pequeño ejemplo de cómo se puede extender el control People Picker, que tanto gusta a los usuarios, pero que en ciertos escenarios (siempre habrá un usuario anormal) no satisface los requerimientos funcionales al cien por ciento, lo que nos llevará irremediablemente a tirar código.

Al final de esta demostración nos daremos cuenta que al extender este control podemos realizar búsquedas sobre diferentes objetos y/o diferentes fuentes de datos, porque este control no está casado con objetos de tipo SPUser como se podría pensar en primera instancia.

Sin más, pasemos al código.Para poder extender la funcionalidad de este control, basicamente tenemos que heredar de tres clases: EntityEditorWithPicker, PickerDialog y SimpleQueryControl.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Microsoft.SharePoint.WebControls;

using System.Collections;

using Microsoft.SharePoint;

namespace Blog.WebControls

{

public class CustomPeoplePicker : EntityEditorWithPicker

{

protected bool m_onInitCalled;

protected string m_commaSeparatedAccountsDelayedUntilOnInit;

public CustomPeoplePicker()

{

}

protected override void OnInit(EventArgs e)

{

base.OnInit(e);

//definimos el tipo del PickerDialog

this.PickerDialogType = typeof(CustomPickerDialog);

this.m_onInitCalled = true;

if (!string.IsNullOrEmpty(this.m_commaSeparatedAccountsDelayedUntilOnInit))

{

base.UpdateEntities(this.GetAccountsEntities(this.m_commaSeparatedAccountsDelayedUntilOnInit));

this.m_commaSeparatedAccountsDelayedUntilOnInit = null;

}

}

/// <summary>

/// Devuleve la lista de usuarios seleccionados en forma de cadena

/// </summary>

/// <param name="picker"> /// <returns></returns>

private string GetResolvedEntityAccounts()

{

if (this.ResolvedEntities == null)

{

return string.Empty;

}

if (this.ResolvedEntities.Count == 0)

{

return string.Empty;

}

List<string> names = new List<string>();

string list = string.Empty;

foreach (PickerEntity entity in this.ResolvedEntities.OfType<pickerentity>())

{

names.Add(entity.Key);

}

list = string.Join(this.EntitySeparator.ToString(), names.ToArray());

return list;

}

protected ArrayList GetAccountsEntities(string commaSeparatedAccounts)

{

ArrayList list = new ArrayList();

if (commaSeparatedAccounts != null)

{

foreach (string str in commaSeparatedAccounts.Split(new char[] {this.EntitySeparator }, StringSplitOptions.RemoveEmptyEntries))

{

string str2 = str.Trim();

if (!string.IsNullOrEmpty(str2))

{

PickerEntity entity = new PickerEntity();

entity.Key = str2;

list.Add(entity);

}

}

}

return list;

}

/// <summary>

/// Valida las entidades

/// </summary>

/// <param name="needsValidation"> /// <returns></returns>

public override PickerEntity ValidateEntity(PickerEntity needsValidation)

{

needsValidation.IsResolved = false; ;

CustomQueryControl c = new CustomQueryControl();

foreach (CustomUser user in c.GetPeople())

{

if (needsValidation.Key.Equals(user.EmployeeNumber, StringComparison.InvariantCultureIgnoreCase))

{

needsValidation.IsResolved = true;

}

}

return needsValidation;

}

}

}

</pickerentity></string></string>

001.

003.

004.

005.

006.

007.

008.

009.

010.

011.

012.

013.

014.

015.

016.

017.

018.

019.

020.

021.

022.

023.

024.

025.

026.

027.

028.

029.

030.

031.

032.

033.

034.

035.

036.

037.

038.

039.

040.

041.

042.

043.

044.

045.

046.

047.

048.

049.

050.

051.

052.

053.

054.

055.

056.

057.

058.

059.

060.

061.

062.

063.

064.

065.

066.

067.

068.

069.

070.

071.

072.

073.

074.

075.

076.

077.

078.

079.

080.

081.

082.

083.

084.

085.

086.

087.

088.

089.

090.

091.

092.

093.

094.

095.

096.

097.

098.

099.

100.

002.

01.

03.

04.

05.

06.

07.

08.

09.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39.

02.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Microsoft.SharePoint.WebControls;

using System.Collections;

namespace Blog.WebControls

{

public class CustomPickerDialog : PickerDialog

{

public CustomPickerDialog()

: base(new CustomQueryControl(), new TableResultControl(), newCustomPeoplePicker())

{

ArrayList columnDisplayNames = ((TableResultControl)base.ResultControl).ColumnDisplayNames;

columnDisplayNames.Clear();

columnDisplayNames.Add("Employee Number");

columnDisplayNames.Add("Email");

columnDisplayNames.Add("Name");

ArrayList columnNames = ((TableResultControl)base.ResultControl).ColumnNames;

columnNames.Clear();

columnNames.Add("EmployeeNumber");

columnNames.Add("Email");

columnNames.Add("Name");

ArrayList columnWidths = ((TableResultControl)base.ResultControl).ColumnWidths;

columnWidths.Clear();

columnWidths.Add("20%");

columnWidths.Add("30%");

columnWidths.Add("50%");

}

protected override void OnLoad(EventArgs e)

{

CustomQueryControl control = (CustomQueryControl)this.QueryControl;

base.OnLoad(e);

}

}

}