Compartir a través de


Ejemplo de código: página de aplicación de etiquetado temático de aprobación de compañeros

Última modificación: lunes, 22 de agosto de 2011

Hace referencia a: SharePoint Server 2010

La página de aplicación de etiquetado temático de aprobación de compañeros es una página de aplicación en la que se enumeran los compañeros y que permite tener constancia de la aprobación de cada compañero con solo activar una casilla. Este ejemplo es un proyecto de la página de aplicación de SharePoint de Microsoft Visual Studio 2010. Después de crear e implementar este proyecto en el sitio de Microsoft SharePoint Server 2010, se puede usar esta página para aprobar a cualquier usuario de la lista de compañeros. En su forma actual, la página muestra únicamente un asterisco para indicar aprobación, pero puede reemplazarlo por cualquier símbolo o imagen que sea apropiado dentro del contexto.

Para instalar este ejemplo de código en su propio equipo, descargue el kit de desarrollo de software de Microsoft SharePoint 2010 (SDK) o descargue el ejemplo de la galería de códigos. Si descarga el SDK de SharePoint 2010, el ejemplo se instala en la siguiente ubicación del sistema de archivos: C:\Program Files\Microsoft SDKs\SharePoint 2010\Samples\Social Data and User Profiles.

Uso de etiquetas temáticas para aprobar un elemento

La aplicación crea un objeto UserProfileManager y un objeto SocialTagManager usando un objeto SPServiceContext que se crea con un sitio o colección de sitios que se escribe directamente en el código. También recupera el objeto UserProfile que representa al usuario actual. La aplicación recupera todas las etiquetas temáticas del usuario actual y crea una lista de cadenas que contienen los nombres de los compañeros del usuario. Cada objeto UserProfile que representa a un compañero del usuario actual tiene una propiedad PublicUrl. Todos los objetos que pueden representarse mediante una dirección URL se pueden etiquetar con una etiqueta temática, por lo que esta aplicación se puede revisar para permitir que los usuarios aprueben cualquier conjunto de elementos que puedan representarse mediante direcciones URL (por ejemplo, los elementos de una biblioteca de documentos o una lista de SharePoint).

string mySite = "http://mysite";
protected void Page_Load(object sender, EventArgs e)
{

using ( SPSite site = new SPSite(mySite) )
{


//Create UserProfileManager with desired SPContext.
SPServiceContext serviceContext = SPServiceContext.GetContext(site);
UserProfileManager myUserProfileManager = new UserProfileManager(serviceContext);
UserProfile myUserProfile = myUserProfileManager.GetUserProfile(true);
SocialTagManager mySocialTagManager = new SocialTagManager(serviceContext);
string [] colleagueAccountNames = new string [myUserProfile.Colleagues.GetItems().GetLength(0)];
SocialTag[] mySocialTags = mySocialTagManager.GetTags(myUserProfile);

Solo los usuarios que aparecen en la lista de control de acceso (ACL) de Permisos de la Aplicación de servicio de perfiles de usuario pueden crear una instancia del objeto UserProfileManager. Para agregar un usuario a la ACL de Permisos de la Aplicación de servicio de perfiles de usuario, siga los pasos del siguiente procedimiento.

Para agregar un usuario a la ACL de Permisos de la Aplicación de servicio de perfiles de usuario

  1. En el explorador, vaya a la página principal de Administración central de SharePoint.

  2. Vaya a la página Administrar aplicaciones de servicio, que aparece bajo el encabezado Administración de aplicaciones.

  3. Seleccione la opción Aplicación de servicio de perfiles de usuario. Haga clic en Permisos.

  4. En el cuadro de diálogo, agregue las cuentas de usuario. Haga clic en Aceptar.

Como las etiquetas temáticas solo usan términos de taxonomía válidos, la primera tarea que la aplicación debe realizar es recuperar el objeto TaxonomySession del objeto SocialTagManager. A continuación, la aplicación comprueba si el término de taxonomía que se va a usar para la aprobación existe actualmente en el almacén de términos de palabras clave predeterminadas (que es la ubicación predeterminada de los términos de taxonomía). En este ejemplo se usa el término Thumbs up, pero se puede cambiar para satisfacer los requisitos específicos. Además, este código también se puede usar en el receptor de eventos de FeatureActivated para que se ejecute una sola vez.

TaxonomySession taxSession = mySocialTagManager.TaxonomySession;
TermStore termStore = taxSession.DefaultKeywordsTermStore;
TermCollection thumbsUp = termStore.KeywordsTermSet.GetTerms("Thumbs Up", true, StringMatchOption.ExactMatch, 1, true);
Term thumbsUpTerm;
if (thumbsUp.Count < 1 || !thumbsUp[0].IsAvailableForTagging)
{
  thumbsUpTerm = termStore.KeywordsTermSet.CreateTerm("Thumbs Up", termStore.DefaultLanguage);
  termStore.CommitAll();
}
else
{
  thumbsUpTerm = thumbsUp[0];
}

A continuación, la aplicación almacena a cada compañero en una matriz de objetos string.

int n = 0;
foreach (Colleague colleague in myUserProfile.Colleagues.GetItems())
  { 
    colleagueAccountNames[n] = (string)colleague.Profile[PropertyConstants.AccountName].Value;
    n++;
  }

Después de realizar el trabajo de recuperación de los compañeros del usuario y definir el término de taxonomía que se va a usar para etiquetar a cada compañero, la aplicación comprueba si se ha cargado la página después de que un usuario haya activado o desactivado una casilla en la lista que muestra a cada uno de los compañeros del usuario. Si la carga de la página es el resultado de la activación o desactivación de una casilla en el formulario por parte de un usuario, la aplicación comprueba cuáles son los compañeros que éste ha activado o desactivado. La etiqueta temática se agrega a cualquier compañero cuyo nombre se haya activado y se quita de cualquier compañero cuyo nombre se haya desactivado. El objeto UserProfileManager recupera el objeto UserProfile que representa a cada compañero, a fin de que pueda recuperar, agregar o quitar etiquetas temáticas de la dirección URL pública de cada compañero. La aplicación usa la referencia de carácter HTML correspondiente a un asterisco (*) para representar la aprobación del usuario actual. Puede cambiar o quitar este símbolo para satisfacer sus necesidades específicas.

if (IsPostBack)
{
  for (int i = 0; i < CheckBoxList1.Items.Count; i++)
  {
    UserProfile userProfile = myUserProfileManager.GetUserProfile(CheckBoxList1.Items[i].Value);
    Uri userUrl = userProfile.PublicUrl;
    bool itemProcessed = false;
    foreach (SocialTag tag in mySocialTags)
    {
      if (tag.Term == thumbsUpTerm && tag.Url == userUrl && CheckBoxList1.Items[i].Selected == false)
      {
        mySocialTagManager.DeleteTag(userUrl, thumbsUpTerm);
        CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value;
        itemProcessed = true;
      }
      else if (tag.Term == thumbsUpTerm && tag.Url == userUrl)
      {
        CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value + " &#42;";
        itemProcessed = true;
      }

    }
    if (CheckBoxList1.Items[i].Selected == true && !itemProcessed)
    {
      SocialTag thumbsUpTag = mySocialTagManager.AddTag(userUrl, thumbsUpTerm);
      CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value + " &#42;";
      itemProcessed = true;
    }
    else if (!itemProcessed)
    {
      CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value;
    }
  }
}

Si la carga de la página es el resultado de la navegación de un usuario a la página sin activar o desactivar una casilla de la lista, la aplicación rellena la lista de casillas con los nombres de todos los compañeros del usuario y comprueba si cada uno de ellos se ha etiquetado.

else
{
  CheckBoxList1.DataSource = colleagueAccountNames;
  CheckBoxList1.DataBind();
  for (int i = 0; i < CheckBoxList1.Items.Count; i++)
  {
    UserProfile userProfile = myUserProfileManager.GetUserProfile(CheckBoxList1.Items[i].Value);
    Uri userUrl = userProfile.PublicUrl;
    bool itemProcessed = false;
    foreach (SocialTag tag in mySocialTags)
    {
      if (tag.Term == thumbsUpTerm && tag.Url == userUrl && !itemProcessed)
      {
        CheckBoxList1.Items[i].Selected = true;
        CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value + " &#42;";
        itemProcessed = true;
      }
    }
    if ( !itemProcessed )
    {
      CheckBoxList1.Items[i].Text = CheckBoxList1.Items[i].Value;
    }
  }
}

}
}

Desarrollo y ejecución del ejemplo

En los siguientes pasos se demuestra cómo probar este proyecto en el sitio de prueba o desarrollo.

Para generar el ejemplo

  1. Cree una carpeta denominada Microsoft.SDK.Server.Samples y, a continuación, descomprima el archivo RatingColleagues.zip en ella.

  2. Inicie Visual Studio 2010 y, a continuación, abra el archivo RatingColleagues.sln que se encuentra en la carpeta creada en el paso 1.

  3. En la ventana Propiedades, especifique el valor de la dirección URL de sitio de la dirección absoluta del sitio de prueba o desarrollo (por ejemplo, http://misitio/). Asegúrese de incluir la barra diagonal de cierre. Además, haga que esta dirección URL sea el valor de la variable misitio en el archivo ColleagueRating.aspx.cs.

  4. Si todavía no existen, agregue referencias a los siguientes ensamblados del proyecto:

    • Microsoft.SharePoint.dll

    • Microsoft.SharePoint.Taxonomy.dll

    • Microsoft.Office.Server.dll

    • Microsoft.Office.Server.UserProfiles.dll

  5. En el menú Generar, seleccione Implementar solución. Una vez completada la creación, la página de la aplicación se instala en el sitio de prueba o desarrollo.

Ejecución del ejemplo

  • Tras crear e implementar la solución, vaya a http://misitio/_layouts/ColleagueRating.aspx. Los nombres de cuenta de usuario de los compañeros aparecen junto a las casillas en la página.

Vea también

Conceptos

Creación y uso de datos de contenido social con el modelo de objetos

Otros recursos

Galería de códigos