Mostrando las entradas con la etiqueta Apps for SharePoint. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Apps for SharePoint. Mostrar todas las entradas

jueves, 23 de junio de 2016

La version destino del sitio de SharePoint es menor a la soportada por la aplicación SharePoint 2013 local o en nuestras instalaciones (On Premises)

Escenario:

Un App para SharePoint o Add-in como lo renombro Microsoft ahora que deseamos probar en un servidor de desarrollo. El App de hecho esta subida en el Seller Dashboard de Microsoft para Office pero al realizar desde Visual Studio 2015 el deployment ahora nos muestra el siguiente mensaje:


The target version of the SharePoint site is 15.0.4569.1000, which is lower than the minimum supported SharePoint version of the app

Esto es porque en el manifiesto del app es decir el archivo AppManifest.xml esta indicada la versión mínima requerida de SharePoint para ejectuar el App.

 
 Y si abrimos el archivo xml en VS nos muestra el requerimiento mínimo.
 

Lo que debemos de hacer es cambiar el número de 16 a 15 para probarlo en nuestro servidor de desarrollo.


 Y listo el app se implementa exitosamente.



Eso es todo amigos!.

SharePoint4Fun!,

Juan Manuel Herrera Ocheita

lunes, 23 de mayo de 2016

Como resolver el Error /_vti_bin/client.svc/ProcessQuery UnauthorizedAccessException: Access is denied.

Escenario:

Una app de SharePoint o Add-in de SharePoint como Microsoft denomina ahora las apps en SharePoint dejo repentinamente de desplegar a todos los usuarios el contenido del app.

Esto no solo aplica a las apps sino a cualquier lista dentro de la Aplicación web de SharePoint, como veremos más adelante.  Así que si repentinamente dejo de ver un contenido pueda que este sea su caso.

El usuario me notificó que al agregar el usuario de red como administrador local del servidor, ya le mostraba el contenido del app.   Aún más confuso y extraño este comportamiento que al parecer eran permisos que no tenían los usuarios en el servidor, pero como descubrir si alguien hizo alguna modificación en el servidor ya que es un ambiente de un cliente administrador por el personal del cliente.

Después de revisar la configuración y servicios de Aplicaciones de la granja de SharePoint y constatar que todo estaba bien configurado y funcionando, procedí a indagar en los logs de SharePoint.   Para ello es necesario habilitar los siguientes eventos:



Y esto fue lo que obtuve en el log:
System.UnauthorizedAccessException: Access is denied. (Excepción de HRESULT: 0x80070005 (E_ACCESSDENIED))     en Microsoft.SharePoint.SPGlobal.HandleUnauthorizedAccessException(UnauthorizedAccessException ex)     en Microsoft.SharePoint.Library.SPRequest.UpdateField(String bstrUrl, String bstrListName, String bstrXML)     en Microsoft.SharePoint.SPField.UpdateCore(Boolean bToggleSealed)     en Microsoft.SharePoint.ServerStub.SPFieldServerStub.InvokeMethod(Object target, String methodName, XmlNodeList xmlargs, ProxyContext proxyContext, Boolean& isVoid)     en Microsoft.SharePoint.Client.ServerStub.InvokeMethodWithMonitoredScope(Object target, String methodName, XmlNodeList args, ProxyContext proxyContext, Boolean& isVoid)     en Microsoft.SharePoint.Client.ClientMethodsProcessor.InvokeMeth... d7c57d9d-5788-b0d0-3f2a-a19b4191ed7d
05/19/2016 12:04:25.15* w3wp.exe (0x3E6C)                       0x34F8 SharePoint Foundation         CSOM                           aiv4i High     ...pdate" Id="348" ObjectPathId="272" />List of all employees.
d7c57d9d-5788-b0d0-3f2a-a19b4191ed7d
05/19/2016 12:04:25.15* w3wp.exe (0x3E6C)                       0x34F8 SharePoint Foundation         CSOM                           aiv4i High     ...ldItemQuery>
http://app-369d6491a3e5c7.apps.bantrabgf.local/InfowareForgetNotEmployees d7c57d9d-5788-b0d0-3f2a-a19b4191ed7d
05/19/2016 12:04:25.15 w3wp.exe (0x3E6C)                       0x34F8 SharePoint Foundation         CSOM                           agmjp High     Original error: System.UnauthorizedAccessException: Access is denied.



Luego utilice Fiddler  para ver el tráfico de la aplicación:

Y me mostró la siguiente información:

Aunque el 401 es un mensaje de no autorizado es el comportamiento esperado con la autenticación ntlm ya que luego le sigue un 200 OK que indica que pudo realizar la acción solicitada.  Así que fiddler no me ayudo mucho en este caso.

La aplicación lo que hace es desplegar de una lista dentro del AppWeb el contenido, pero me estaba reportando un acceso denegado. No fue sino hasta que exporte la lista completa a excel que me percate que tenia 5008 elementos. Y esto me recordó el umbral de máximo de elementos por lista que tiene configuración SharePoint de forma predeterminada.  Y ahora hacía sentido que los usuarios administradores si podía ver el contenido ya que el umbral de los administradores y auditores es de 20,000 elementos.   

Solución:

Fue solo ampliar el umbral a nivel de aplicación web de 5,000 elementos a 10,000 elementos para que se pueda leer el contenido que no desplegaba.   Cómo hacerlo vea el siguiente enlace: http://stevemannspath.blogspot.com/2013/05/sharepoint-2013-list-view-threshold.html

Otras soluciones:

Depurar el listado de la lista, eliminando o filtrando el contenido ver este enlace:

http://en.share-gate.com/blog/demystifying-the-sharepoint-lists-thresholds

O bien modificando el código para que lea de forma filtrada.

https://blogs.msdn.microsoft.com/ericwhite/2009/11/20/using-the-sharepoint-2010-managed-client-object-model-accessing-large-lists/

Eso esto amigos, un día mas en las aguas profundas de SharePoint World!

Saludos,

Juan Manuel Herrera Ocheita

jueves, 8 de enero de 2015

Nuevo hallazgo sobre como evitar la autenticación cuando se esta desplegando contenido de un App en SharePoint 2013

 

Luego que a realizado el procedimiento para registrar el nombre para las Apps en el DNS y también las del portal, pueda con que se tope que aún le pide las credenciales del usuario a pesar de que esta en una red interna o Intranet.  Si esto le sucede pueda que el problema sea el permiso que tiene el usuario.

Recientemente nos hemos percatado que el permiso mínimo que debe de tener un usuario en SharePoint para que no le solicite credenciales es Read y No Restricted Read.  Así valide eso por favor.  Algo que debe de tomar en cuenta es que SharePoint valida siempre sobre el nivel de permisos mayor que tenga el usuario esto para evitar conflictos en los permisos que puedan ser otorgados a los usuarios a través de los diferentes grupos y objetos de SharePoint (Sitios, Bibliotecas, Listas y elementos)

NOTA: Si usted esta teniendo este problema en una IOS su problema pueda derivarse a que el navegador de SAFARI no tiene las opciones de autenticación que si dispone IE por lo que una alternativa sería utilizar el Firewall de su organización para que guarde las credenciales del usuario cada vez que utilice el navegador Safari.  Ver más información aquí: http://sharepoint.stackexchange.com/questions/38086/sharepoint-repeatedly-prompting-ipad-users-for-credentials

Procedimiento para configurar Internet Explorer

How to hide the message "Only secure content is displayed":

1. In IE 10, go to Tools (alt+x) + Internet Options.

2. Go to the “Security TAB”

3. Select “Local Intranet”

4. Add to this zone the next domains:

a. Microsoftonline.com

b. Sharepoint.com

c. Yahooapis.com

5. Click on “Close” + “Apply”

6. Go to “Custom Level”:

7. Click on “enable” under the section “Display Mixed Content”:

8. Close the IE 10 completely, and re – open it (this is only required the first time, after applying the procedure).

9. Done.

lunes, 7 de julio de 2014

El programa de preestreno de Autohosted Apps venció

Noticia muy importante para desarrolladores de Apps para SharePoint en Office 356.  Definitivamente el tema de no tener control sobre los recursos en Azure de la Aplicación auto contenida integrada con SharePoint fue el mayor determinante para que Microsoft no renovará el programa o lo lanzara finalmente.  El 30 de junio del 2014 venció y no se espera que se relance aunque el comunicado de MS así lo estipula… más bien empoderarán a las Apps Tipo Provider Hosted para conectarse ambientes Azure con la libertad y control que los desarrolladores deseamos en las soluciones que construimos.

La buena noticia es que las Apps que están instaladas antes del 30 de Junio seguirán soportadas en Office 365, aunque no indefinidamente en el futuro MS publicará la fecha de caducidad, por el momento hay que prestar atención a como migrarlas a Provider Hosted y a Azure en un ambiente controlado por el usuario (para más información sobre esto ver el siguiente enlace: http://msdn.microsoft.com/EN-US/library/office/dn722449(v=office.15).aspx).  Pero las nuevas aplicaciones o las que estaban en desarrollo ya no se permitirá su uso. 

Microsoft sigue evolucionando en el nuevo modelo de Apps y escuchando a los clientes y desarrolladores para responder a las necesidades del mercado.  Esperamos que podamos ver un modelo maduro ágil y efectivo.

Hice algunas pruebas y esto fue el resultado:

Una aplicación de Prueba Auto Hosted sigue funcionando en SP 2013

image

image

Si le cambio de versión y la actualizó también me lo permite como dice el artículo:

<App xmlns="http://schemas.microsoft.com/sharepoint/2012/app/manifest"
     Name="SharePointAutoHostedApp"
     ProductID="{c990646d-33a7-4aee-9ea3-e4e288ce7e88}"
     Version="1.2.0.0"
     SharePointMinVersion="16.0.0.0"
>

clip_image001

Al parecer todavía es permitido subir Apps Auto Hosted hasta esta fecha aquí los pantallazos que lo prueban

image

 

image

image

image

image

 

Para más información puedes ver el artículo en el siguiente enlace:

http://blogs.office.com/2014/05/16/update-on-autohosted-apps-preview-program/

Apps4Fun!,

Juan Manuel Herrera Ocheita

miércoles, 25 de junio de 2014

Autohosted App

Estas Apps o Aplicaciones están diseñadas hasta el momento únicamente para suscriptores de Office 365 ya que se hospedan de forma automática y sin poder contralar los recursos asignados en Windows Azure, por ello Microsoft no ha hecho disponible que este tipo de Apps puedan ofrecerse en Microsoft Office Store, por lo que quedan fuera hasta el momento, Microsoft no ha descifrado como proveer la asignación de los recursos en Azure y como cobrar los recursos asignados a las aplicaciones de SharePoint hospedadas en Windows Azure.  El problema es más complejo de lo que parece ya que están hospedados en alguna ubicación que prácticamente es tierra de nadie y que dependiendo de la ubicación del Office 365 asumo así asignarán en Azure la ubicación ya que no esta a la vista de los mortales.

Uno de los atractivos de este tipo de Aplicaciones es que podemos escribir código en el lenguaje de .NET de nuestra preferencia  C# o VB.  Aunque siempre debemos de invocar el modelo de objetos cliente CSOM cuando necesitamos acceder algún recurso de lado de SharePoint Online ya que como es un App corremos con las mismas limitaciones.  Ahora bien por otro lado como esto es hospedado en Windows Azure y esta corriendo en este, podemos cambiar el modelo de la Aplicación Web de Web Forms (Como es la forma standard de SharePoint) a ASP.NET MVC para los amantes de este modelo de desarrollo de aplicaciones Web. ya que prácticamente la aplicación en Windows Azure es incrustada dentro de un IFRAME en SharePoint, pero esta realmente corriendo en Windows Azure.

Aquí interviene otro amigo para validar los permisos para ejecutar las llamadas de CSOM al portal de SharePoint llamado OAuth que es el protocolo standard para validar permisos entre diferentes “dominios” (Windows Azure / SharePoint Online).  Esto requiere conocer un conjunto de nuevas instrucciones para invocar y consumir los recursos de SharePoint que no necesitamos en el tipo de Apps SharePoint Hosted que invocamos a través de Java Script ya que este esta hospedado en el mismo domino SharePoint Online.

Bueno empecemos con nuestra primera App Autohosted, para ello invocamos Visual Studio 2013 (con Update 2 recomendado).

Luego seleccionamos la opción New Project… y dependiendo que plantilla de lenguaje escogimos deberemos de buscar la categoría Office/SharePoint, luego Apps y allí Apps for SharePoint.

image 

Escriba un nombre de aplicación a su elección y presione el botón OK.  Luego le preguntará la dirección URL de SharePoint Online donde desea instalar la aplicación. 

image

Recomiendo utilice una colección de sitios de desarrollo para que pueda hacer pruebas de depuración y sea sencillo el deployment del App (Para los que no tiene acceso a la administración de Office 365, es necesario solicitar al administrador que cree en SharePoint una colección de sitios de este tipo abajo la imagen que muestra el formulario de creación de una nueva colección de sitios).

image

De regreso en la ventana para especificar la ubicación de donde va instalarse la App es necesario indicar el tipo y aquí es donde debemos de seleccionar Autohosted.

image

Luego nos pregunta que tipo de Aplicación Web deseamos Web Forms o MVC.  Le sugiero elija la que esta habituado a desarrollar ya que de lo contrario le costará adaptarse al nuevo modelo.  Una vez dominado el nuevo modelo ya puede seleccionar el que desconoce así no tendrá  el stress de entender un nuevo modelo además de la infraestructura de SharePoint necesaria para ejecutar este tipo de aplicaciones.  Para este ejemplo seleccionaremos Web Forms.

image

Luego levantará una ventana de dialogo para autenticarnos a Office 365.  Si necesita una cuenta de Office 365 de prueba o en planes que permitan el desarrollo de Apps en SharePoint, creo que son las E1…E4.

image

La primera ventana en aparecernos es la página Default.aspx de la aplicación.

image

Si vemos hacia la esquina derecha donde aparece el contenido del proyecto creado desde la ventana del Explorador de la Solución veremos dos proyectos.  El proyecto de SharePoint que servirá para enmascarar el proyecto Web que será hospedado en Windows Azure.  De lado de SharePoint tenemos dos elementos básicos la imagen de la aplicación que utilizará para desplegarla una vez instalada y el manifiesto de la aplicación que es una declaración en XML.  De lado de la aplicación Web de forma predeterminada nos incluye las librerías de Jquery, la página Default.aspx, el archivo de configuración de la aplicación web.config, como el del empacado de la aplicación packages.config además dos archivos de código para manejar el contexto de SharePoint y la seguridad.

image

Ahora veamos que podemos encontrar en el manifiesto de la aplicación de SharePoint

image

En la pestaña General encontraremos el Titulo de la aplicación, el nombre interno de la aplicación, la versión que estamos instalando, el icono de la aplicación, la página de inicio, la cadena de consulta que se incluirá en la URL de la aplicación {StandardTokens} (esta incluye la URL del App, del sitio Host entre otros).  Ahora veamos la pestaña de Permisos.

image

En la casilla Scope o Alcance definimos el recurso o servicio de SharePoint que vamos a utilizar dentro de la aplicación y luego el Permiso que requerimos (Lectura, Escritura, Administración o Control Total).

image

Esto deberá de ser consultado en las referencias de MSDN de Microsoft para obtener el permisos correcto para consumir un servicio o la combinación de estos http://msdn.microsoft.com/en-us/library/office/fp142383(v=office.15).aspx.

NOTA: Mucho cuidado con el permisos que le damos a la aplicación este antes de instalarse el usuario será preguntado si permite conceder los permisos que solicita la aplicación para su uso.  Si los permisos son muy elevados el usuario podría denegar los permisos y no instalar la aplicación.  A parte la aplicación vía código deberá manejar los permisos sobre los recursos que se crean para proteger la información dentro de la aplicación. 

image

Otro tema importante es saber que los permisos que requiere la aplicación se refiere a un Sitio Web o a una lista es sobre el Host Web es decir al sitio Web donde se adicionó el App.  En el caso de Autohosted recuerde que el App esta hospedado en Windows Azure y no en SharePoint. 

El terminó App Web para el caso de las Autohosted no aplica ya que esta se refiere a un sitio Web en SharePoint para el App donde se pueden crear listas, bibliotecas y páginas.  Esto no es aplicable para Autohosted ya que es una aplicación Web que esta hospedada en Windows Azure y tiene recursos como una base de datos y una aplicación ASP.NET no de SharePoint.  Por lo que si requerimos crear una biblioteca será en el Host Web y no el App Web como sucede en las Apps de tipo SharePoint Hosted.

Pestaña de Prerequisitos, en esta pestaña definimos los recursos que utilizaremos de lado de Windows Azure y de SharePoint la versión mínima requerida para ejecutar la aplicación.  Deforma predeterminada incluye de lado de Windows Azure Web Site, pero podemos agregar SQL Database si planeamos almacenar alguna información en base de datos de Azure (Por el momento son los dos únicos recursos disponibles en Azure disponibles para aplicaciones Autohosted). De lado de SharePoint repetiremos los servicios que incluimos en la pestaña de permisos pero con la versión mínima requerida si así deseamos definir la aplicación.

image

En la pestaña de idiomas soportados o Supported Locales, definiremos el idioma que soporta la aplicación y el archivo de recursos con el diccionario de términos que la aplicación reemplazará dependiendo de la ubicación donde se instale y este disponible.  Para ello es necesario desarrollar la aplicación para que en vez de escribir el texto , se definan etiquetas que hagan referencia aun terminó maestro con el prefijo “$Resources:” y este sirva para mapear en el archivo de recursos el terminó en el idioma disponible en la aplicación.

image

Para más información sobre crear Apps para SharePoint en diferentes idiomas puede ver el siguiente enlace: http://msdn.microsoft.com/en-us/library/office/fp179919(v=office.15).aspx

Cuando no se define ningún idioma soportado en la pestaña de Supported Locales el predeterminado es inglés.

Pestaña de Remote Endpoints o Extremos remotos son utilizados para especificar el dominio remoto. El proxy web valida que las solicitudes emitidas a dominios remotos se declaran en el manifiesto de la aplicación. Puede crear hasta 20 entradas y solo se considera en la URL la parte de la autoridad emisora por lo que el resto es omitida.  Con ello puede utilizar una sola URL para consumir diferentes recursos dentro de la misma y evitar la validación de seguridad de dominios cruzados o Cross-domain.  Para más información puede consultar el siguiente enlace: http://msdn.microsoft.com/en-us/library/office/fp179895(v=office.15).aspx

image

Si seleccionamos el archivo de manifiesto desde el explorador de la solución y presionamos el botón derecho del ratón y escogemos la opción para Ver Código o View Code, podremos ver la declaración en XML de lo configurado.

 

image

Aquí se nos muestra otra información que nos es ocultada como el ProductID y la versión mínima de SharePoint soportada por la aplicación que en el caso de SharePoint Online es la 16 ya que es una versión que esta más actualizada que la ofrecida en la versión para instalarla localmente.

image

Bueno ya casi terminamos el alcance de este artículo introductorio.  Por lo que vamos a modificar únicamente la página default.aspx para ejecutar la aplicación y revisar como luce. 

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SharePointApp1Web.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        Hola Mundo!
    </div>
    </form>
</body>
</html>

Para ello vamos a agregar las Palabras Hola Mundo! y revisar como se muestra con solo presionar la tecla F5.

Me pregunta si deseo otorgar los permisos solicitados por el App.

image


Le indico que si confío o Trust It.  Y la aplicación es desplegada

image

Otra forma de hacer un deploy menos automático y un poco manual es de la siguiente manera:

1) Desde Visual Studio 2013 en el Explorador de la Solución haga clic derecho y seleccione la opción Deploy Solution

image

Esta operación desinstalara la versión anterior y instalará de nuevo la solución en la URL que indicamos que lo hiciera cuando creamos el proyecto.

Luego volverá a preguntar si confiamos en la solución.

image

A diferencia de la opción anterior el App lo deja instalado y podemos verlo a través de la opción Site Contents de SharePoint.

https://infowareplus.sharepoint.com/sites/mherrera/_layouts/15/start.aspx#/_layouts/15/viewlsts.aspx

image

Si hacemos clic sobre el App nos ejecutará la aplicación y nos llevará a la página Default.aspx

image

Si desglosamos la URL notaremos los siguientes valores:

https://eb0185ff-11b6-443e-bce5-ba6e4632ceca.o365apps.net/Pages/Default.aspx

?SPHostUrl=https%3A%2F%2Finfowareplus%2Esharepoint%2Ecom%2Fsites%2Fmherrera

&SPLanguage=en-US

&SPClientTag=0

&SPProductNumber=16%2E0%2E2930%2E1220

El ID del App y luego los siguientes parámetros: SPHostUrl,  SPLanguage, SPClientTag, SPProductNumber.

El único parametro no explicado hasta ahora es SPClientTag y se refiere a: El número de control de caché de cliente (etiqueta de cliente) para el sitio web actual.

Bueno eso es todo por este artículo en los siguientes profundizaremos temas como incluir el branding del SharePoint en ejecución a través del control chrome y como invocar los recursos de SharePoint desde una aplicación Autohosted que se hospeda en Windows Azure.

Apps4Fun!,

Juan Manuel Herrera Ocheita