2011-04-11 23 views
5

Estoy en un sitio de cliente donde tienen una aplicación que comenzó en SharePoint y está migrando lentamente a una aplicación ASP.NET muy personalizada. Algunos de sus elementos de datos aún están alojados dentro de las listas de SharePoint, dos de los cuales actualmente están en cuestión son algunas "Notas" y "Tareas" (elementos de datos bastante simples en su configuración de SharePoint, nada especial sobre ellos). Una de las cosas que debo hacer desde ASP.NET es crear automáticamente algunos elementos nuevos para estas listas y agregarlos desde el código.Obtener la identificación? del usuario actual como SharePoint puede?

Hasta ahora, es bastante fácil. Encontré el elemento web existente que manejaba la edición de esos elementos, adjunté el depurador, seguí cómo obtuvo sus valores y qué se agregó a la lista, etc. Sin embargo, uno de los campos que se agrega al elemento de la lista no es es tan obvio En la interfaz de usuario web existente parte, el campo se ve así:

Assigned To field

Esencialmente, es un campo para introducir un usuario desde el actual dominio de Windows. El icono del libro abre una ventana emergente que permite al usuario buscar un nombre, etc. En mi prueba actual, me estoy ejecutando como administrador local en una máquina de desarrollo. Así que solo busco "admin" en la ventana emergente y rellena el campo con "[machine name] \ Administrator" como se esperaba. Luego, en la depuración, el valor que se obtiene del campo y se ingresa en el elemento de la lista de SharePoint es "1" en lugar de un nombre o algo por el estilo.

Supongo que "1" es un identificador para la cuenta de administrador local. Tiene sentido, después de todo. Pero mi pregunta es, ¿cómo puedo obtener ese identificador para el usuario registrado actual en el código? Encontré código para obtener el nombre del usuario actual, pero no cualquier tipo de ID numérico (aunque es una cadena).

Además, esto no estaría sucediendo solo dentro de un contexto de aplicación ASP.NET. También hay una aplicación de cliente WPF para computadoras portátiles que generaría estos elementos de la lista y los sincronizaría nuevamente al servidor cuando se conectaran. Actualmente estoy operando bajo la suposición de que el usuario del cliente debería iniciar sesión con una cuenta de dominio adecuada que el servidor conozca.

Imagino que esto es bastante fácil, pero aún no me he encontrado con lo que necesito.

Respuesta

6

supongo que estás buscando esto:

int userId = SPContext.Current.Web.CurrentUser.ID; 

Por cierto, este es el ID interno asignado por SharePoint para el usuario. Para obtener este ID de una aplicación WPF, puede implementar un servicio web dentro de SharePoint que devolvería este Id. O incluso puede consultar la base de datos de SharePoint, pero no estoy seguro si es seguro :-)

+0

Excelente, definitivamente lo que necesito para ASP.NET. (Pensé que era fácil, no sé nada de SP.) Sin embargo, el de WPF es un poco más complicado, porque necesita funcionar en un modelo a veces conectado. Por lo tanto, no hay garantía de conectividad SP. Supongo que el peor de los casos es que la máquina del cliente pone en cola los elementos en el almacenamiento local (que ya no está relacionado con SP) y, cuando los empuja a un servicio web, asigne la ID ya que el servicio web agrega al SP liza. Tendré que verificar con el cliente para asegurarme de que el servicio web tenga el contexto SP. – David

+0

También podría obtener este Id una vez y luego almacenarlo en una nueva base de datos. Sería mucho más fácil y más rápido. – goenning

+0

Ya, creo que tendré que ir con una solución de algún punto. Estoy pensando en solo almacenar algunos elementos de datos básicos en una tabla en la computadora portátil del cliente y, cuando llegue al servidor web de sincronización (la funcionalidad existente, se sincroniza toneladas de cosas en este momento) simplemente agregue un método para cargar esos elementos en el servidor y deja que el servidor descubra los detalles. El punto de parada en este momento es que no creo que el contexto SP esté disponible en el servicio web de sincronización, así que tendré que abordar eso como una cuestión arquitectónica. ¡Gracias! – David

Cuestiones relacionadas