martes, 8 de agosto de 2017

Buenas practicas para desarrollo de soluciones en SharePoint

Una de las buenas practicas para cuando iniciamos una solución en SharePoint no importa la versión es crear una colección de sitios para dicha solución y esta con su bases de datos de contenido,  Esto permitirá que sea portable la solución desarrollada.

Para realizar esto debemos hacer lo siguiente:

1) Crear la base de datos de contenido
2) Crear la colección de sitios para la base de datos nueva

Como buen desarrollador prefiero utilizar la línea de comando que la interfaz de usuario.  Así que aquí les va en línea de comando:

Crear la base de datos de contenido

PS C:\Users\Administrator> Mount-SPContentDatabase -Name WSS_Content_ArchivoDigi
tal -WebApplication http://sp2013bi

---resultado ----
Id               : 47b71298-e23c-421b-bb6a-5e65428b8a4d
Name             : WSS_Content_ArchivoDigital
WebApplication   : SPWebApplication Name=SharePoint - 80
Server           : sp2013bi\powerpivot
CurrentSiteCount : 0

Crear la colección de sitios para la base de datos nueva

PS C:\Users\Administrator> New-SPSite -Url http://sp2013bi/sites/ADigital -Langu
age 1033 -Template STS#0 -Name "Archivo Digital" -OwnerAlias "Administrator" -Co
ntentDatabase WSS_Content_ArchivoDigital -Verbose

---resultado---
VERBOSE: Leaving BeginProcessing Method of New-SPSite.
VERBOSE: Performing operation "New-SPSite" on Target
"http://sp2013bi/sites/ADigital".

Url                                                     CompatibilityLevel
---                                                     ------------------
http://sp2013bi/sites/ADigital                          15
VERBOSE: Leaving ProcessRecord Method of New-SPSite.
VERBOSE: Leaving EndProcessing Method of New-SPSite.



Ayudas:

Para revisar las plantillas para la colección de sitios ejecutar el comando:
get-SPWebTemplate


Name                 Title                                    LocaleId   Compat
                                                                         ibilit
                                                                         yLevel
----                 -----                                    --------   ------
GLOBAL#0             Global template                          1033       15
STS#0                Team Site                                1033       15
STS#1                Blank Site                               1033       15
STS#2                Document Workspace                       1033       15
MPS#0                Basic Meeting Workspace                  1033       15
MPS#1                Blank Meeting Workspace                  1033       15
MPS#2                Decision Meeting Workspace               1033       15
MPS#3                Social Meeting Workspace                 1033       15
MPS#4                Multipage Meeting Workspace              1033       15
CENTRALADMIN#0       Central Admin Site                       1033       15
WIKI#0               Wiki Site                                1033       15
BLOG#0               Blog                                     1033       15
SGS#0                Group Work Site                          1033       15
TENANTADMIN#0        Tenant Admin Site                        1033       15
APP#0                App Template                             1033       15
APPCATALOG#0         App Catalog Site                         1033       15
ACCSRV#0             Access Services Site                     1033       15
ACCSVC#0             Access Services Site Internal            1033       15
ACCSVC#1             Access Services Site                     1033       15
BDR#0                Document Center                          1033       15
DEV#0                Developer Site                           1033       15
DOCMARKETPLACESITE#0 Academic Library                         1033       15
EDISC#0              eDiscovery Center                        1033       15
EDISC#1              eDiscovery Case                          1033       15
OFFILE#0             (obsolete) Records Center                1033       15
OFFILE#1             Records Center                           1033       15
OSRV#0               Shared Services Administration Site      1033       15
PPSMASite#0          PerformancePoint                         1033       15
BICenterSite#0       Business Intelligence Center             1033       15
SPS#0                SharePoint Portal Server Site            1033       15
SPSPERS#0            SharePoint Portal Server Personal Space  1033       15
SPSPERS#2            Storage And Social SharePoint Portal ... 1033       15
SPSPERS#3            Storage Only SharePoint Portal Server... 1033       15
SPSPERS#4            Social Only SharePoint Portal Server ... 1033       15
SPSPERS#5            Empty SharePoint Portal Server Person... 1033       15
SPSMSITE#0           Personalization Site                     1033       15
SPSTOC#0             Contents area Template                   1033       15
SPSTOPIC#0           Topic area template                      1033       15
SPSNEWS#0            News Site                                1033       15
CMSPUBLISHING#0      Publishing Site                          1033       15
BLANKINTERNET#0      Publishing Site                          1033       15
BLANKINTERNET#1      Press Releases Site                      1033       15
BLANKINTERNET#2      Publishing Site with Workflow            1033       15
SPSNHOME#0           News Site                                1033       15
SPSSITES#0           Site Directory                           1033       15
SPSCOMMU#0           Community area template                  1033       15
SPSREPORTCENTER#0    Report Center                            1033       15
SPSPORTAL#0          Collaboration Portal                     1033       15
SRCHCEN#0            Enterprise Search Center                 1033       15
PROFILES#0           Profiles                                 1033       15
BLANKINTERNETCONT... Publishing Portal                        1033       15
SPSMSITEHOST#0       My Site Host                             1033       15
ENTERWIKI#0          Enterprise Wiki                          1033       15
PROJECTSITE#0        Project Site                             1033       15
PRODUCTCATALOG#0     Product Catalog                          1033       15
COMMUNITY#0          Community Site                           1033       15
COMMUNITYPORTAL#0    Community Portal                         1033       15
SRCHCENTERLITE#0     Basic Search Center                      1033       15
SRCHCENTERLITE#1     Basic Search Center                      1033       15
visprus#0            Visio Process Repository                 1033       15
GLOBAL#0             Global template                          1033       14
STS#0                Team Site                                1033       14
STS#1                Blank Site                               1033       14
STS#2                Document Workspace                       1033       14
MPS#0                Basic Meeting Workspace                  1033       14
MPS#1                Blank Meeting Workspace                  1033       14
MPS#2                Decision Meeting Workspace               1033       14
MPS#3                Social Meeting Workspace                 1033       14
MPS#4                Multipage Meeting Workspace              1033       14
CENTRALADMIN#0       Central Admin Site                       1033       14
WIKI#0               Wiki Site                                1033       14
BLOG#0               Blog                                     1033       14
SGS#0                Group Work Site                          1033       14
TENANTADMIN#0        Tenant Admin Site                        1033       14
ACCSRV#0             Access Services Site                     1033       14
ACCSRV#1             Assets Web Database                      1033       14
ACCSRV#3             Charitable Contributions Web Database    1033       14
ACCSRV#4             Contacts Web Database                    1033       14
ACCSRV#6             Issues Web Database                      1033       14
ACCSRV#5             Projects Web Database                    1033       14
BDR#0                Document Center                          1033       14
OFFILE#0             (obsolete) Records Center                1033       14
OFFILE#1             Records Center                           1033       14
OSRV#0               Shared Services Administration Site      1033       14
PPSMASite#0          PerformancePoint                         1033       14
BICenterSite#0       Business Intelligence Center             1033       14
SPS#0                SharePoint Portal Server Site            1033       14
SPSPERS#0            SharePoint Portal Server Personal Space  1033       14
SPSMSITE#0           Personalization Site                     1033       14
SPSTOC#0             Contents area Template                   1033       14
SPSTOPIC#0           Topic area template                      1033       14
SPSNEWS#0            News Site                                1033       14
CMSPUBLISHING#0      Publishing Site                          1033       14
BLANKINTERNET#0      Publishing Site                          1033       14
BLANKINTERNET#1      Press Releases Site                      1033       14
BLANKINTERNET#2      Publishing Site with Workflow            1033       14
SPSNHOME#0           News Site                                1033       14
SPSSITES#0           Site Directory                           1033       14
SPSCOMMU#0           Community area template                  1033       14
SPSREPORTCENTER#0    Report Center                            1033       14
SPSPORTAL#0          Collaboration Portal                     1033       14
SRCHCEN#0            Enterprise Search Center                 1033       14
PROFILES#0           Profiles                                 1033       14
BLANKINTERNETCONT... Publishing Portal                        1033       14
SPSMSITEHOST#0       My Site Host                             1033       14
ENTERWIKI#0          Enterprise Wiki                          1033       14
SRCHCENTERLITE#0     Basic Search Center                      1033       14
SRCHCENTERLITE#1     Basic Search Center                      1033       14
SRCHCENTERFAST#0     FAST Search Center                       1033       14

visprus#0            Visio Process Repository                 1033       14

SharePoint4fun!,

Juan Manuel Herrera O.

jueves, 29 de junio de 2017

Soluciones de Granja: Error al activar una Custom Feature o Característica Personalizada

Las razones para este error pueden ser muchas, por lo que les compartiré el escenario en el que me sucedió, algunos tips y la solución para corregirlo.

Las soluciones de granja aunque no sea un modelo de programación migrable a O365 es por mucho el modelo más poderoso en el cual tenemos el control total de los recursos del servidor. Y esta vigente y por estos rumbos seguimos escogiendo desarrollar bajo este modelo.  Mientras haya version en SharePoint en Premisas y el modelo siga soportado continuaremos desarrollando con el modelo donde tenemos mayor libertad y poder sobre los recursos de los servidores de la granja de SharePoint. El único inconveniente es el desarrollo debe de suceder desde un servidor con SharePoint instalado esto lo hace más complicado y tedioso.

Vamos a la obra describamos el Escenario.

Escenario:

Versión de Visual Studio: 2015 update 3
Versión de SharePoint: SharePoint Server 2013 Standard Edition SP1
Versión de SQL Server: SQL Server 2012 Standard Edition 
Versión de Sistema Operativo: Windows Server 2012 SP1

Características de la solución:

Feature1 : 
                 Scope: Site Collection
                 Elements: Web parts
Feature2: 
                 Scope: Web Site
                 Elements: Instancia de una Lista Personalizada o Instant of Custom List.
                                  Definición de una Lista Personalizada o Custom List Definition
                                  Elementos (Paginas) de una lista personalizada o Module with Elements

Feature 1:

Feature2:

Error:
Cuando se  intantaba activar la Feature2 que creaba las listas y elementos daba el error al intentar activar la feature.  Sin mayor información.

Situación:
En la red encontrarás información como forzar la instalación agregar el FeatureID a la instancia de la lista, y pueda que esto funcione o igualmente te lo impida.  La situación real es que hay un problema, hay que averiguarlo y corregirlo.

Proceso:
Para poder averigurar el verdadero problema tuve que realizar los siguientes pasos: 

1)  El feature a nivel Web quite el parte del modulo que tiene la definición y creación de los elementos y solo deje la definición y la instancia de la lista personalizada.


 2) Realice con éxito el deployment sin errores

3) Agrege el primer elemento dentro del modulo y funcióno exitosamente



 
    Type="GhostableInLibrary" >
     
        <![CDATA[ 

 
   
     
      $Resources:core,ImportErrorMessage;
   
   
     
        -Menu
        My Visual Web Part
         None
     
   
 

             ]]>

     
...
   
 
4) Revisando la definición de elementos dentro del modulo  descubrí que hacia referencia a un calendario que no estaba creado en el sitio del deployment y tampoco tenía la definición de la lista en la solución.  Había encontrado el problema la activación de la feature a nivel Web fallaba porque no encontraba el calendario al cual hacia referencia dentro del modulo.

Definición dentro de Elements.xml del Modulo


List="Lists/Asuetos"
BaseViewID="0"
WebPartZoneID="wpCalendar2"
WebPartOrder="1"
Type="CALENDAR"
Scope="Recursive"
RecurrenceRowset="TRUE">
        <![CDATA[
     
         
             
                 
                  Cannot import this Web Part.
             
             
                 
                      Asuetos
                      False
                      False
                 
             
         
     
  ]]>
     

Solución:

Agregue a la solución de SharePoint en Visual Studio un nuevo elemento la definición de la lista tipo Calendario con su respectiva instancia y el problema se solución.





En conclusión  dire que si hay un problema de activación es porque hay algo que se esta haciendo referencia que no existe y es necesario encontrar que es lo que no esta e incluirlo en la solución.

Code4Fun!,

Juan Manuel Herrera Ocheita







                                  

jueves, 1 de junio de 2017

Tip del día: Sabias porque no logras ver otros servidores de SQL Server

El servicio de SQL Browser es el responsable de permitir descubrise a si mismo y permitir a otras instancias o servidores que lo descubran.

Probablemente esta apagado solo debes de encenderlo.



Si no lo siguies viendo probablemente es el firewall que esta bloqueando el puerto y protocolo de comunicación

Miremos la información oficial

SQL Server Browser service
UDP port 1434

The SQL Server Browser service listens for incoming connections to a named instance and provides the client the TCP port number that corresponds to that named instance. Normally the SQL Server Browser service is started whenever named instances of the Database Engine are used. The SQL Server Browser service does not have to be started if the client is configured to connect to the specific port of the named instance.



Eso es todo por este artículo.

SQL4Fun!,

Juan Manuel Herrera Ocheita

domingo, 28 de mayo de 2017

Sabias que el mismo agente de Build en TFS puedes utiliarlo para Entrega Automatizada

Desde Team Fundation Server 2015 update 3 los agentes de build son agentes multipropósito.  Es decir pueden fungir con el Rol de Build y Deployment.  De allí que en la versión 2017 se une la opción de Build y Release  o Compilación y Lanzamiento.

Esta opción es una gran ventaja para la automatización de la entrega de software ya que los procesos de instalación son locales donde el agente esta instalado esto reduce la cantidad de puertos que deben de estar abiertos entre el origen y destino.

Otro de los beneficios es que la configuración del agente es una sola y es muy sencilla además que es multiplataforma ya que esta escrita en node.js


Primero lo primero

Donde descargamos el agente?
Bueno para ello debemos ir a configuración
Luego Agent Queues


Presionamos sobre el botón Download agent para descargar el archivo zip que tiene el instalador


Las instrucciones son muy claras y sencillas solo debes de descargar el zip, crear un directorio llamado agent (o como tu prefieras) y ejecutar el comando config.cmd para configurar el agente.

Algo interesante de resaltar es que el agente tiene una versión para cada sistema operativo.


Echemole un vistazo a las instrucciones de versión Linux



Ahora vamos a configurar el agente de Windows en una máqyubvirtual en Azure


Al desempacar el archivo zip en el directorio TFSAgent descarga archivos y directorios


Ejecutamos el comando config.cmd.


En Server URL debemos de ingresar la url de Team Services o bien la dirección de TFS en su red si es la dirección de un servidor de TFS en casa tipicamente la dirección es http://hostname:8080/tfs.

En tipo de autenticación disponibles las siguientes opciones:

  • Alternate Connect to TFS using Basic authentication. After you select Alternate you'll be prompted for your credentials.
  • Negotiate Connect to TFS as a user other than the signed-in user via a Windows authentication scheme such as NTLM or Kerberos. After you select Negotiate you'll be prompted for credentials.
  • Integrated (Default) Connect a Windows agent to TFS using the credentials of the signed-in user via a Windows authentication scheme such as NTLM or Kerberos. You won't be prompted for credentials after you choose this method.
  • PAT Supported only on Team Services and TFS 2017 or newer. After you choose PAT, paste the PAT token you created into the command prompt window.
Para Team Services la opción adecuada es PAT o Personal Access Token.   Para generar el token es necesario autenticarse en la instancia de team services e ir al perfil del usuario y seleccionar la opción Security


Luego presionamos el botón Add para crear un nuevo Token

Escribimos una Descripción y podemos especificar el servicio para el Token para este ejemplo seleccionaremos All Scopes


Deberemos copiar el token y guardarlo ya que este no volverá aparecer nuevamente.  Si lo pierde no se preocupe solo es necesario crear uno nuevo.


* Por seguridad yo revocaré este token ya que lo mostre al mundo :).


Luego nos pregunta el Pool para el Agente y por facilitar la configuración nos sugiere el Predeterminado llamado default.

Eso lo encontramos en la configuración Agent Queues  Seleccionamos Manage Pools
Y presionamos el enlace New pool... Agent Pool para crear un nuevo Pool aunque no es necesario es util diferenciar un agente de build con un agente de deploy


En este ejercicio le colocaremos el nombre de AzureDeployPool


Ahora volvemos a la VM en Azure y colocamos el nombre del Agent Pool y el Nombre del Agente


Luego nos pregunta el nombre del directorio de trabajo con de va a copiar los archivos que necesitemos.  Presionamos enter para dejar este nombre y continuar.


Luego nos pregunta si deseamos que el agente funcione como un servicio para operaciones en background o sino en front end. Solo elegimos que no cuando vayamos a correr alguna prueba que requiera la interfaz de usuariol de lo contrario es mejor y estable que corra como un servicios de windows.

Luego la cuenta esto es importante ya que de forma predeterminada nos suguiere una cuenta local o builtin NETWOR SERVICES pero si deseamos delegar permisos hacia carpetas compartidas o file share lo mejor es utilizar una cuenta de dominio.  Esto es más conveniente. Para este ejercio utilizaremos la cuenta sugerida pero en un caso real es mejor crear una cuenta de servicio del dominio y así esta signarle los permisos necesarios para efectuar las operaciones que necesitemos realizar en nuestra red y computadora host.

Para continuar presionemos enter y listo hemos finalizado la configuración.


Ahora validamos en el servidor host que el servicio este corriendo.



Ahora validamos Team Services o nuestro TFS local


Listo ya podemos ejecutar una tarea en este servidor.  Desde Build & Release

Vamos a crear una definición de Release


Ahora creamos un ambiente de Prueba y asignamos el agente 


Ahora crearemos una tarea superfla solo para validar que el agente esta listo.


Ahora ejecutemos una entrega


Ahora revisamos el directorio


Listo eso es todo por este artículo

TFS4Fun!,

Juan Manuel Herrera Ocheita

jueves, 25 de mayo de 2017

Secretos mas reconditos en SharePoint: Cadena de conexión de ConfigDB

Siempre me he preguntado y no se si usted también donde se guarda la cadena de conexión de la base de datos de configuración de la granja de SharePoint Server.  Pienso que Esto aplica para 14,15 y 16.

Pues bien necesita irse al registro de windows permedio de regedit y navegar en las carpetas siguiendo la siguiente ruta

HKEY_Local_Machine\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\

De allí depdenderá de la versión de SharePoint.  Por ejemplo si es 2015 encontrará la carpeta 15.0 y luego Secure y dentro de ella ConfigDB y alli adentro una llave llamada dsn

La ruta completa sería:

HKEY_Local_Machine\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\15.0\Secure\ConfigDB



Y el valor esperado de la cadena de conexión de la base de datos de configuración de la granja tipicamente nombrada SharePoint_Config es:


Data Source=SPSQLDB;Initial Catalog=SharePoint_Config;Integrated Security=True;Enlist=False;Pooling=True;Min Pool Size=0;Max Pool Size=100;Connect Timeout=15


Así que ya sabe donde.

SharePoint4Fun!,

Juan Manuel Herrera Ocheita

miércoles, 24 de mayo de 2017

La búsqueda contextual no funciona pero si la de la colección de sitos en SharePoint

Este es el sintoma que identifica este problema.  El sintoma es el siguiente:

No funciona ninguna búsqueda desde la caja de búsqueda de las listas y bibliotecas, y tampoco funciona la búsquedal sitio, pero la búsqueda dentro de la colección si devuelve resultados.

Si revismos el log de la indagación o Crawl nos muestra que el contenido si fue indagado y que es parte del índice del servicio de búsqueda pero no funciona la búsqueda contextual.

Si funciona en la mayoría y no funcion en alguna lista ese no es el sintoma y allí el problema se debe a que no ha mapeado la columna en las propiedades adminsitradas del servicio o bien porque cambio el estilo de la vista (que debe ser siempre el predeterminado o default) y no esta utilizando la vista de AllItems.aspx que es la que permite realiar las búsquedas desde la casilla de búsqueda.

Entonces regresando al tema, si este es el sintóma la solución esta en camino.

El Problema:

El problema es que se se esta indagando otra zona que no es la predeterminada o default o bien que se ha colocado el Mapeo a servidor o Server Mappings del servicio de búsqueda asumiendo que este funciona igual como en SharePoint 2010 que no es así.   En SharePoint 2013 las cosas cambiaron y fueron mejoradas pero el comportamiento es distinto en cuanto a esta úlitma opción.

La Solución:

Primero lo primero, y es que debemos de validar para que funcione la búsqueda contextal.  Y es lo siguiente:

1) Validar que la Zona Predeterminada o Default de la Web Application sea la que esta registrado en el Fuentes de contenido o Content Sources del servicio de búsqueda y ninguna otra dirección url que sea una zona distinta a la predeterminada.

Central Administration
Manage Web Application
Alternate access Mappings
Seleccionar Web Application
Validar Zona Predeterminada o Default



Central Administration
Manage Service Application
Search Service
Content Sources



2) Validar que la Zona Predeterminada o Default de la Web Application tenga habilitado la autenticación NTLM y no otra, si es necesario otro tipo de autenticación utilizar otra zona para definir esta otra autenticación, pero para poder indagar el contenido en la zona predeterminada SharePoint requiere que sea autenticación Windows o NTLM.



Buenas noticias:

Las buenas noticias es que una vez indaga con exito la zona predeterminada o default ya no es necesario de configurar otra como como Server Mappings como se hacia en SharePoint 2010.   Los resultados serán devueltos basados en la url a la que se hizo la consulta cualquiera de las zonas  definidas en el Mapeo Acceso Alternativo o AAM.




SharePoint4Fun!

Juan Manuel Herrera