none
Pasar variables por metodo Post en Sharepoint RRS feed

  • Pregunta

  • Hola,

    Tengo Sharepoint Foundation 2010 y me gustaría saber si se pueden pasar variables por el método POST entre dos páginas que contengan webparts hechos en .NET.

    Gracias y un saludo


    Sergio Gallego
    • Tipo cambiado Edin KapicMVP, Moderator martes, 19 de octubre de 2010 7:22 Es una pregunta y como tal tiene que ser de tipo "pregunta"
    jueves, 14 de octubre de 2010 9:27

Respuestas

  • Gracias Sergio, por las felicitaciones, y por visitar mi blog ;)

    No podrás acceder a SPContext.Current desde una aplicación ASP.NET. Las tres opciones que tienes son:

    1. Acceder a los servicios web estandar de SharePoint 2010: http://msdn.microsoft.com/en-us/library/ee705814.aspx

    2. Acceder a los objetos de SharePoint 2010 mediante el modelo de objetos de cliente: http://blogs.msdn.com/b/ericwhite/archive/2009/11/20/using-the-sharepoint-2010-managed-client-object-model.aspx, o http://geeks.ms/blogs/gortigosa/archive/2010/07/12/ecmascript-client-object-model-sharepoint-2010.aspx, por ejemplo.

    3. Construir tu propio servicio web y desplegarlo en la carpeta _layouts de tu web application. Desde ahí podrás acceder a SPContext.Current sin problema.

    Los enlaces son sólo a modo de ejemplo, pero encontrarás muchísima información relacionada en la red.

    Saludos,
    David Martos
    http://david-martos.blogspot.com

     


    Saludos, David Martos http://david-martos.blogspot.com
    viernes, 15 de octubre de 2010 10:43

Todas las respuestas

  • Hola Sergio,

    Puedes hacer sin ningún problema lo que comentas, ya que SharePoint 2010 Foundation está construido sobre .NET Framework. ¿Estás teniendo algún problema con elllo?

    Saludos,
    David Martos
    http://david-martos.blogspot.com

     


    Saludos, David Martos http://david-martos.blogspot.com
    jueves, 14 de octubre de 2010 9:37
  • Hola DAvid,

    Tengo un ActiveX que pasa mediante POST un contenido codificado en BASE64, pero nunca me llega a la página de destino donde envía el POST, en cambio, si lo hago en .NET si que me funciona perfectamente. Había pensado que podía ser porque Sharepoint no aceptaba variables de tipo POST, pero parece que no es por eso, ¿se te ocurre por que puede ser?

    El ActiveX realiza una firma digital de un documento que se encuentra en una biblioteca de documentos, y luego se supone que deja el resultado firmado en la página de destino, pero nunca llega, ni siquiera ejecuta el código.

    Gracias


    Sergio Gallego
    jueves, 14 de octubre de 2010 9:40
  • Entiendo que en la página de destino tienes un webpart con un código que obtiene ese parámetro, no?

    Respecto al ActiveX no te puedo decir nada, porque hay muchas consideraciones de seguridad a tener en cuenta, pero si haces una prueba tonta de un webpart que haga un post a una url verás que el parámetro llega. De hecho, en SharePoint 2007 la única manera de activar la creación de variaciones era mediante un POST a una página de la administración del sitio ;).

    Sólo para probar, podrías utilizar Fiddler para ver qué se está mandando en todo momento? Por otro lado, puedes poner un webpart en la página de destino que liste todo el contenido del Request?

    Saludos,
    David Martos
    http://david-martos.blogspot.com


    Saludos, David Martos http://david-martos.blogspot.com
    jueves, 14 de octubre de 2010 10:09
  • El Fiddler parece que no me sirve, ya que no puedo ver si hay parámetros pasados por POST a la página en cuestión, aunque lo he probado y ni siquiera tiene una petición de la página donde recibe el POST, asi que supongo que será problema del propio Sharepoint o del ActiveX.

    ¿Alguna vez has usado algún ActiveX?, esque no sé si hay que habilitar algún tipo de seguridad para que se ejecute.

    El tema de poner un webpart en la página de destino tampoco me vale, porque ni siquiera me llega, ya que el ActiveX lo que hace es utilizar esa página para devolver el archivo PDF firmado, pero en Sharepoint nunca llega a esa página.

    El caso es que en el log de Sharepoint si que se hace una petición a esa página y no hay ningún error, pero no se ejecuta el código de la misma, ni tampoco aparece en el Fiddler.

    No sé si tienes alguna idea, aunque sin ver el ActiveX supongo que será dificil.

    Gracias y un saludo.


    Sergio Gallego
    jueves, 14 de octubre de 2010 11:33
  • La verdad es que sin poder hacer ninguna prueba sí que es difícil, sí. En cualquier caso, si ves que en los logs de SharePoint está la petición, pero no capturas el evento en un webpart de la página, quizá habría que mirar en los logs del IIS a ver si tienes algún error de acceso.

    También deberías probar a hacer un POST desde cualquier otra página para aislar el problema en el control ActiveX.

    Tienes puesto FullTrust como nivel de seguridad en el web.config?

    Saludos,
    David Martos
    http://david-martos.blogspot.com


    Saludos, David Martos http://david-martos.blogspot.com
    jueves, 14 de octubre de 2010 13:26
  • Buenas Sergio,

    ¿Has probado a realizar la misma prueba de hacer un POST entre páginas que estén en _layouts en lugar de hacerlo entre WebParts que estén en páginas guardadas en la BD de contenidos de SharePoint?

    Un saludo!

    viernes, 15 de octubre de 2010 7:17
  • Hola David y gracias de nuevo por tu respuesta,

    Ya he mirado los logs del IIS, y por ejemplo en las páginas a las que accedo se hace un GET (http://servidor/Site/Pagina.aspx) y en la página donde el ActiveX hace el POST precisamente pone POST(http://servidor/Site/PaginaPOST.aspx), así que supongo que estara bien, pero nunca llega a ella.

    Ya he probado hacer un post desde cualquier otra página al pulsar un botón y lo hace correctamente, en la página de destino se recibe correctamente lo que le mando.

    Por otra parte no está puesto FullTrust como nivel de seguridad, he abierto el web.config y me he encontrado, entre otras cosas, con lo siguiente:

    <securityPolicy>
          <trustLevel name="WSS_Medium" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\config\wss_mediumtrust.config" />
          <trustLevel name="WSS_Minimal" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\config\wss_minimaltrust.config" />
        </securityPolicy>

    He intentado meter otro nuevo registro tal que ha quedado así:

    <securityPolicy>

          <trustLevel name="FullTrust" policyFile="Internal" />
          <trustLevel name="WSS_Medium" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\config\wss_mediumtrust.config" />
          <trustLevel name="WSS_Minimal" policyFile="C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\config\wss_minimaltrust.config" />
        </securityPolicy>

    He añadido lo que está en negrita, pero sigue sin funcionar.

    También cambié lo siguiente, estaba así:

    <trust level="WSS_Minimal" originUrl="" />

    y lo he puesto así:

    trust level="Full" originUrl="" processRequestInApplicationTrust="true" />

    Pero nada, sigue sin funcionar.

    Ya no se que más puedo hacer...la verdad es que he probado de todo, también he probado hacerlo tanto en un webpart, como en una aplication page.

    El caso es que hay una cosa un poco curiosa, que igual te puede dar una idea de qué puede pasar, este ActiveX como te dije tiene un parámetro que se llama Salida, donde tienes que indicarle la página donde va a enviar el archivo .pdf firmado en base64, si en vez de poner una página de Sharepoint en ese parámetro, pongo una página .aspx que se encuentre en un directorio virtual de otro proyecto de .net, donde reciba el contenido codificado y lo descodifique para pasarlo a un archivo funciona bien, pero lamentablemente eso no me sirve, ya que luego tengo que hacer más acciones con ese archivo, no solo descodificarlo, sino guardarlo en una librería, iniciar un worklow, etc.

    ¿Se te ocurre algo=?

    Un saludo y gracias de nuevo.

     

     


    Sergio Gallego
    viernes, 15 de octubre de 2010 7:41
  • Buenas.

    La verdad es que si no hay más información en los logs no sé por donde seguir. Seguramente acabará siendo una tontería (como el 99% de las veces) pero lo que cuesta es saber cuál es esa tontería :).

    Una cosa que se me ocurre, aunque seguro que ya lo has pensado, es hacer el POST desde tu activex a esa página aspx que comentas, para obtener el parámetro concreto. Una vez ahí, o bien utilizando el OM de Cliente de SharePoint o los servicios web, realizar el resto de acciones en SharePoint.

    Saludos,
    David Martos
    http://david-martos.blogspot.com


    Saludos, David Martos http://david-martos.blogspot.com
    viernes, 15 de octubre de 2010 9:24
  • Hola de nuevo David,

    Lo primero felicitarte por tu reciente incorporación al selecto grupo de MVP, ya que lo he visto en tu blog.

    Lo siguiente, sería que ya he probado hacer el POST desde mi ActiveX a la página aspx en cuestión, pero desde esa página no tengo acceso a las listas, workflows, librerías y demas elementos de sharepoint, aunque igual lo estoy haciendo mal, simplemente lo que he hecho ha sido agregar las referencias, y utilizar el SPContext.current para sacar los datos que quiero, aunque me devuelve null.

    No sé si podrás orientarme un poco más en como puedo acceder a los datos que tengo en Sharepoint desde esa página .aspx, ya que a partir de que ví que no podía hacer nada lo dejé, además, creo que tampoco es la mejor solución, ya que lo ideal sería hacerlo desde el propio Sharepoint mediante un webpart o una AplicationPage.

    Muchas gracias y un saludo.


    Sergio Gallego
    viernes, 15 de octubre de 2010 10:13
  • Gracias Sergio, por las felicitaciones, y por visitar mi blog ;)

    No podrás acceder a SPContext.Current desde una aplicación ASP.NET. Las tres opciones que tienes son:

    1. Acceder a los servicios web estandar de SharePoint 2010: http://msdn.microsoft.com/en-us/library/ee705814.aspx

    2. Acceder a los objetos de SharePoint 2010 mediante el modelo de objetos de cliente: http://blogs.msdn.com/b/ericwhite/archive/2009/11/20/using-the-sharepoint-2010-managed-client-object-model.aspx, o http://geeks.ms/blogs/gortigosa/archive/2010/07/12/ecmascript-client-object-model-sharepoint-2010.aspx, por ejemplo.

    3. Construir tu propio servicio web y desplegarlo en la carpeta _layouts de tu web application. Desde ahí podrás acceder a SPContext.Current sin problema.

    Los enlaces son sólo a modo de ejemplo, pero encontrarás muchísima información relacionada en la red.

    Saludos,
    David Martos
    http://david-martos.blogspot.com

     


    Saludos, David Martos http://david-martos.blogspot.com
    viernes, 15 de octubre de 2010 10:43
  • Hola de nuevo David,

    Finalmente he hablado con mis superiores y creo que lo vamos a desarrollar de esa manera, con una página .aspx en un directorio virtual hecha en .NET, accediendo mediante alguno de los 3 métodos que me has descrito a las propiedades de sharepoint y realizar todas las acciones desde esa página, sé que no es la mejor solución, pero de momento creo que es la única hasta que no tenga más tiempo para tratar porqué esto no funciona.

    Muchas gracias por tu ayuda.


    Sergio Gallego
    viernes, 15 de octubre de 2010 11:22
  • Hola,

    Por favor, tener cuidado con el tipo de pregunta que creáis al abrir el hilo. Si no es "Pregunta", los que contestan la misma no pueden obtener los puntos por sus respuestas.

    Un saludo,

     


    -- Edin http://edinkapic.blogspot.com
    martes, 19 de octubre de 2010 7:23
    Moderador
  • Hola Edin, lo sé, debería haber formulado pregunta en vez de debate, lo siento.

    Un saludo


    Sergio Gallego
    martes, 19 de octubre de 2010 7:29
  • Amigo quisiera que me solicitaras el codigo de como hacer eso

    sábado, 23 de noviembre de 2013 19:10