miércoles, 29 de febrero de 2012

Links útiles #5–Sharepoint 2010

1-Crear un content type con Visual Studio 2010

http://www.sharepointbriefing.com/spcode/develop-sharepoint-2010-content-type-using-visual-studio-2010.html

2-Mantenimiento de bases de datos Sharepoint 2010

Aprenda cómo mantener las bases de datos de datos del host de datos y la configuración para Microsoft SharePoint 2010. Lea las directrices y ejemplos de estudio de las estrategias de mantenimiento de bases de datos y las tareas recomendadas.

http://technet.microsoft.com/en-us/library/cc262731.aspx

3-Guía rápida para configurar kerberos

http://jmhogua.blogspot.com/2012/02/guia-rapida-para-configurar-kerberos.html

4-Setear la configuración regional de la hora de Sharepoint

Cuando la diferencia horaria entre el servidor y los clientes, difieran, actualice la zona horaria.

http://geekswithblogs.net/wades/archive/2012/02/28/setting-sharepoint-regional-time-zone-settings.aspx

5-Propiedades de perfiles default de Sharepoint 2010

http://msdn.microsoft.com/en-us/library/hh147513.aspx

Problema con el campo “public site redirect”: http://oscarmartin.org/sharepoint-2010/de-donde-viene-el-valor-de-public-site-redirect-en-el-perfil-de-usuario-de-sharepoint/?utm_source=rss&utm_medium=rss&utm_campaign=de-donde-viene-el-valor-de-public-site-redirect-en-el-perfil-de-usuario-de-sharepoint

6-Desarrollar y desplegar un servicio WCF en SharePoint 2010

http://geeks.ms/blogs/lruiz/archive/2012/02/29/sharepoint-desarrollar-y-desplegar-un-servicio-wcf-en-sharepoint-2010-con-las-cksdev.aspx

http://nikspatel.wordpress.com/2012/02/29/step-by-step-building-custom-wcf-services-hosted-in-sharepoint-part-i/

http://nikspatel.wordpress.com/2012/02/29/step-by-step-building-and-consuming-custom-wcf-services-hosted-in-sharepoint-part-ii/

martes, 28 de febrero de 2012

Tips #3–Sharepoint 2010

1-Determinar si tu aplicación está ejecutando en un proceso sandboxed

   1:  if(System.AppDomain.CurrentDomain.FriendlyName.Contains("Sandbox"))
   2:  {
   3:    // Your code is running in the sandbox.
   4:  }



2-Extensión de Visual Studio para Visual Web Part para un sandboxed solution e informe sobre métodos no permitidos en una sandboxed solution (Visual Studio 2010 Sharepoint Power Tools)



http://visualstudiogallery.msdn.microsoft.com/8e602a8c-6714-4549-9e95-f3700344b0d9/


3-Obtener el usuario actual de la request Sharepoint 2010



Hay varios métodos, pueden variar dependiendo si está ejecutando la solución o debuggeando.


   1:  System.Security.Principal.WindowsIdentity.GetCurrent().Name // returns MY_COMPUTER\\my_user
   2:   
   3:  HttpContext.Current.User.Identity.Name // returns MY_COMPUTER\\my_user
   4:   
   5:  HttpContext.Current.Request.ServerVariables["AUTH_USER"] // returns MY_COMPUTER\\my_user
   6:   
   7:  Microsoft.SharePoint.SPContext.Current.Web.CurrentUser.LoginName // returns SHAREPOINT\\system




Si desea obtener el usuario real logueado, ejecute el siguiente código:


   1:  SPWeb site = SPContext.Current.Web;
   2:  SPSecurity.RunWithElevatedPrivileges(delegate()
   3:  {
   4:      using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID))
   5:     {
   6:         using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))
   7:         {
   8:              string currUser = site.CurrentUser; //not the ElevatedSite.CurrentUser
   9:         }
  10:     }
  11:  });



4-Función de failed en javascript cuando se usa Sharepoint Client Object Model



   1:  function OnItemQueryFailed(sender, args)
   2:  {
   3:     alert('Error:\n' + args.get_message() + '\n' + args.get_stackTrace());
   4:  }
http://msdn.microsoft.com/en-us/library/ee551330.aspx
 

5-Hacer un IISReset cuando se provisiona un servicio User Profile Service Application



Más info: http://www.petestilgoe.com/2012/02/sp2010-an-error-has-occurred-while-accessing-the-sql-server-database-or-the-sharepoint-server-search-service/


6-Sharepoint no encuentra un usuario recién creado en el AD



Para solucionar este problema, debe hacer una sincronización incremental del servicio User Profile Service Application.


http://www.mysharepointadventures.com/2012/02/audience-targeted-webpart-not-working-for-ad-group/

Guardando data de configuración en Sharepoint 2010 (SPPersistedObject)

Como plataforma de desarrollo, SharePoint es muy poderoso.Pero todavía hay algunas desventajas para los desarrolladores, tales como el mal desempeño para operar list items, el almacenamiento de datos personalizados que no es fácil, y así sucesivamente. Si queremos desarrollar un producto que necesita operar datos muy grandes o llevar a cabo cálculos muy complejos,en general, debemos crear una base de datos de asistente para guardar nuestros datos. Pero cuando queremos desarrollar un producto pequeño, SharePoint nos ofrecen varias opciones.

There are four class with a property Properties (hashtable type), they are SPWeb, SPFolder, SPListItem. The property Properties is a hash table, so we can save data with a key value pair, and the value must should be can serialized. When we update the object, the property will be write to database with the object, and you can get the data from the object with a key too. We will not not describe it in detail, Here we will tell you about another kind storing data method, it is the SPPersistedObject.

Una posibilidad es el uso de la propiedad “Properties” (tabla hash), más información en este post: http://todosharepoint.blogspot.com/2012/02/spwebs-propertybag.html

image_thumb27

lunes, 27 de febrero de 2012

Links útiles #4–Sharepoint 2010

1-Diferencias entre Sharepoint Server 2010 y Sharepoint Online

http://blogs.catapultsystems.com/mpoole/archive/2012/02/11/feature-differences-between-sharepoint-2010-server-and-sharepoint-online.aspx

2. Diagramas técnicos Sharepoint 2010

http://technet.microsoft.com/en-us/library/cc263199.aspx

3. Handler para archivar items cuando se borran

public override void ItemDeleting(SPItemEventProperties properties)
{…}
http://www.sharepoint-tips.com/2011/11/event-handler-to-archive-items-when.html
En el mismo artículo, también se explica cómo copiar adjuntos (attachments) de una lista a otra: http://www.sharepoint-tips.com/2008/11/how-to-copy-attachments-from-one-list.html
4. Administración de documentos – Content Type

http://www.jasperoosterveld.com/2012/02/sharepoint-2010-document-management_27.html
5. Saber donde está esta usando una feature en Sharepoint 2010 tanto a nivel de site como de site collection

Ej de escritura:

   1:  Write-Host $Feature.DisplayName " usado en el sitio: " $Web.Url

http://oscarmartin.org/sharepoint-2010/script-para-ver-donde-se-esta-usando-una-caracteristica-en-sharepoint-2010/?utm_source=rss&utm_medium=rss&utm_campaign=script-para-ver-donde-se-esta-usando-una-caracteristica-en-sharepoint-2010


 


 

domingo, 26 de febrero de 2012

Obtener STSUPLD.DLL sin instalar Microsoft Office.

Si usted encuentra que "Upload Multiple Files..."  está grisado o no está disponible en SharePoint 2010 y :

  • Estás ejecutando una versión de 32 bits de Internet Explorer
  • ¿No tienes una copia de Microsoft Office 2007 o 2010 disponibles
  • Ha añadido el sitio de SharePoint Trusted or Intranet Security zone

Todavía se puede habilitar esta funcionalidad mediante la instalación de SharePoint Designer 2007. Está instalació registra la dll STSUPLD.DLL

Este cargador de archivos tiene sus limitaciones, ej: sólo es posible cargar 100 archivos a la vez. Si necesita más flexibilidad, puede montar el sitio de SharePoint mediante el Explorador de Windows.

Diferentes maneras de actualizar un list item.

SPListItem.Update() :

Es el método más común. Actualiza la base de datos con los cambios que se le hicieron al item. Si un documento está checkout de una document library y trata de actualizar la metadata, lanzará una excepción.

SPListItem.SystemUpdate() :

Este método actualiza el item con cambios que se han hecho, pero no modifica los campos “Modified” y “Modified By”.

Cuando se llama este método, los eventos se disparan, las modificaciones son reportadas en los logs de cambios y auditoria pero las alertas no son enviadas.

SPListItem.SystemUpdate(Boolean) :

Este método es útil con listas que tiene el versionado activado. Si le paso false, es lo mismo que SystemUpdate. Si le pasa true, la versión del item es incrementado, en caso contrario no.

SPListItem.UpdateOverwriteVersion()

Actualiza el item sin crear otra versión del item.

 

Fuente:

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.systemupdate.aspx

http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.update.aspx

http://www.sharepointkings.com/2009/02/using-splistitemupdateoverwriteversion.html

 http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.updateoverwriteversion.aspx

Más información:

http://www.gavd.net/servers/sharepointv4/spsv4_item.aspx?top=2&itm=1424

Tips #2 – Sharepoint 2010

  • Obtener el nombre interno del job “nombre del job

    Get-SPTimerJob | Where {$_.Title -eq "nombre del job"} | ft id,name

    Listas todos los jobs y sus nombres internos

    Get-SPTimerJob | Sort-Object title | ft title,name


    • Enviar un list item a la papelera de reciclaje


    SpListItem.delete() borra el item permanentemente. Hay que usar el



       1:  SPSite spsite = new SPSite("http://MyWebApplication");
       2:   
       3:  SPWeb spweb = spsite.OpenWeb();
       4:   
       5:  SPList splist=spweb.Lists["MyList"];
       6:   
       7:  SPListItem spListItem = splist.Items.GetItemById(2);
       8:   
       9:  //este método envia el item a la papelera
      10:   
      11:  spListItem.Recycle();




    • Topology Discovery Service Application: sin este servicio, consumir servicios entre farms no es posible. Es conocido como: Application Discover and Load Balancer Service Application.


    Central Administrator:

    clip_image001



    IIS:

    clip_image002



  • Crear un Quota Template

    Ir a Central Administration-> Application Management->Specify Quota Templates

    clip_image002

    Desde aquí se puede crear una plantilla nueva o modificar una plantilla existente. Vale la pena mencionar que si se modifica una plantilla existente, NO se aplicará a las colecciones de sitios ya creados con la plantilla, sólo para las nuevas plantillas.
    Así que voy a crear una nueva plantilla llamada "Sitio de grupo pequeño”, con un almacenamiento de 20 MB para propósitos de demo. También voy a especificar los límites de los Sandbox Solutions Code.

    clip_image004

    Cuando se crea un Site Collection se podrá utilizar este Quota Template.

    clip_image006

    Qué pasa cuando la quota es alcanzada? Puede cambiar el comportamiente yendo en el Central Administration a la sección ‘Site Collection Quotas and Locks’ . Central Administration-> Application Management->Configure Quotas and Locks.

    clip_image008

    Hay un número de acciones disponibles. Por cada site collection puede especificar “Site Lock Information”, tales como: Not Locked, Adding content prevented, Read Only and No Access. Además puede especificar el campo ‘Additional Lock Information’. Este campo se muestra al usuario cuando la quota ha sido alcanzada.

    clip_image010

    sábado, 25 de febrero de 2012

    Links útiles 4–Sharepoint 2010

    1.Subir archivo csv via powershell (Server y Cliente OM)

    http://www.spjeff.com/2012/02/26/powershell-upload-csv-file-to-list-both-server-and-client-om/

    2.PowerPivot para Sharepoint 2010

    FOR BUSINESS USERS (Executives, Managers & Decision makers):

    Microsoft PowerPivot (Business Intelligence) site – Information, videos and datasheets:
    http://www.microsoft.com/en-us/bi/powerpivot.aspx

    Top 10 reasons to try PowerPivot for Excel 2010:
    http://office.microsoft.com/en-us/excel/top-10-reasons-to-try-powerpivot-for-excel-2010-HA101810443.aspx

    What is PowerPivot:
    http://www.powerpivotpro.com/what-is-powerpivot

    PowerPivot for SharePoint 2010 – The Business User’s Perspective:
    http://blogs.office.com/b/microsoft-excel/archive/2009/10/29/powerpivot-for-sharepoint-2010-the-business-user-s-perspective.aspx

    Microsoft SQL Server 2008 R2 – PowerPivot for Microsoft Excel 2010 Download:
    http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7609

    FOR SHAREPOINT ADMINS:

    Hardware and Software Requirements (PowerPivot for SharePoint):
    http://msdn.microsoft.com/en-us/library/ee210640.aspx

    Installation (PowerPivot for SharePoint):
    http://msdn.microsoft.com/en-us/library/ee210654.aspx

    Configuration (PowerPivot for SharePoint):
    http://msdn.microsoft.com/en-us/library/ee210609.aspx

    SQL Server PowerPivot for SharePoint forum:
    http://social.msdn.microsoft.com/Forums/en-US/sqlkjpowerpointforsharepoint

    FOR SHAREPOINT DEVELOPERS/ADMINS:

    Data Sources Supported in PowerPivot Workbooks:
    http://technet.microsoft.com/en-us/library/ee835543.aspx

    Add Data to Your PowerPivot Workbook (Sample Data):
    http://powerpivotsdr.codeplex.com/releases/view/46355

    Create Your First PowerPivot Workbook (Tutorial):
    http://technet.microsoft.com/en-us/library/ee835510.aspx

    Microsoft PowerPivot for Excel 2010 Samples:
    http://www.microsoft.com/download/en/details.aspx?id=102

    3.Mover site collections entre content databases

    http://jshidell.com/2011/12/16/moving-sharepoint-2010-site-collections-to-new-content-databases-using-powershell/

    4.Recursos limitados para Sandboxed Solutions

    http://msdn.microsoft.com/en-us/library/gg615462.aspx

    http://blogs.msdn.com/b/johnwpowell/archive/2010/03/01/a-lap-around-sharepoint-2010-sandboxed-solutions-resource-quotas.aspx

    5.Bloquear características sociales Sharepoint 2010

    http://www.rharbridge.com/?p=633

    Tips 1–Sharepoint 2010

    • En el modelo de objetos, se trabaja a menudo con un objeto SPWeb. En particular, con la propiedad SPWeb.Lists o SPList.Items para recuperar elementos de una lista. El uso de estas propiedades plurales viene con una penalización de rendimiento, ya que toda la matriz se carga tan pronto como usted lo utiliza en el código.
      Ejemplo: web.Lists ["prueba"] va a recuperar todas las listas. Lo mismo va para list.Items.Count, lo que se carga todos lose lementos de la lista, lo cual es un gran problema para las listas grandes. Utilizar los siguientes métodos:GetListByUrl ItemCount en su lugar.
    • Cuando usted necesite mostrar una vista de list items en una página(por ejemplo, en un webpart), puede utilizar SPListViewByQuery para ello. Dado un objeto SPQuery y añadirlo a la colección de controles de la webpart, SharePoint renderizará una lista entera.
    • SharePoint almacena cierta información por defecto en las listas por defecto, cómo User Information List. Se puede usar SPSite.GetCatalog, el cual toma un enumerado, y le devuelve la lista que desee.

    • Cuando haga un restore de una base de datos sobre una existente, puede surgir el siguiente error: System.Data.SqlClient.SqlError: Exclusive access could not be obtained because the database is in use. (Microsoft.SqlServer.Smo)

    Para ello utilice :execute SP_WHO (lista de proceso de usuario que bloquean la base), y a continuación use KILL xxxxx

    • Obtener información de un usuario:

    Cada usuario de un sitio tiene un ID propio (numérico). la fuente de este ID es la lista oculta (User Information List)
    Esta lista puede accederse mediante el link " /_catalogs/users/simple.aspx" en cada sitio de Sharepoint.

    Esta lista contiene todos los usuarios que fueron sumandos al sitio.
    Para obtenet data de esa lista puede hacer lo siguiente:

       1:  SPSite spsite = new SPSite("http://MyWebApplication");
       2:   
       3:  SPWeb spweb = spsite.OpenWeb();
       4:   
       5:  SPList splist=spweb.SiteUserInfoList;
       6:   
       7:  SPListItem userInfo = splist.Items.GetItemById(SPContext.Current.Web.CurrentUser.ID);
       8:   
       9:  string pictureURL = Convert.ToString(userItem["Picture"]);




    • Borrar un objeto de Sharepoint.

        En la Configuration Database determino el objeto id.

           1:  SELECT id
           2:  ,classid
           3:  ,parentid
           4:  ,name
           5:  ,status
           6:  ,version
           7:  ,properties
           8:  FROM   objects WITH(nolock)
           9:  WHERE  name LIKE ' lo que quiero borrar'




          A continuación borro el objeto:


          stsadm -o deleteconfigurationobject -id "<object id>"


           


           


           

    Links útiles 3–Sharepoint 2010

    1. Crear un campo lookup via programación Sharepoint 2010

    http://lemonharpy.wordpress.com/2011/06/07/dependant-lookup-fields-sharepoint-2010/

    2. Integración de administración de documentación entre CRM 2011 and SharePoint 2010

    El siguiente describe los pasos hacer que Sharepoint sea el server de documentación de CRM.

    El componente de lista de Microsoft Dynamics CRM 2011 para SharePoint hace que los documentos de Microsoft Dynamics CRM que están almacenados en SharePoint estén disponibles con el look and feel de CRM. Este componente también permite a Microsoft Dynamics CRM crear automáticamente las carpetas que se utilizan para almacenar los documentos relacionados con Microsoft Dynamics CRM en los registros de SharePoint.

    http://blogs.technet.com/b/ptsblog/archive/2012/02/24/crm-2011-and-sharepoint-2010-integration-part-1.aspx

    3. PowerShell y tareas repetitivas

    Script de Power Shell de SharePoint 2010 para eliminar los elementos de una lista mayor a 60 días de antigüedad: http://jmhogua.blogspot.com/2012/02/script-de-power-shell-de-sharepoint.html

    Programar un script de powershell y el task scheduler: http://jmhogua.blogspot.com/2012/02/como-programar-un-script-de-powershell.html

    4. Nombre de dominio incorrecto en Nombre de cuenta después de la sincronización de perfiles de usuario

    La parte del host de su nombre de dominio de Active Directory (por ejemplo, corporate.local) no coincide con el nombre NetBIOS del dominio (por ejemplo CORP).De lo contrario, las importaciones de perfiles de usuario aparecerá cómo corporate\christian en lugar del valor real CORP\christian

    http://blog.bugrapostaci.com/tag/netbiosdomainnamesenabled/

    http://adaptivesp.wordpress.com/2011/03/07/february-cu-and-netbiosdomainnamesenabled/

    http://spinsiders.com/brianlala/2011/09/08/new-add-spprofilesyncconnection-cmdlet-seems-to-ignore-netbiosdomainnamesenabled-property/

    http://iedaddy.com/2012/01/wrong-domain-name-in-accountname-after-user-profile-sync/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ExperiencesOfAnInlandEmpireDad+%28Experiences+of+an+Inland+Empire+Dad%29

    5. Error al deployar una solución de Sharepoint.

    Error occurred in deployment step ‘Activate Features’: Feature with Id ‘#featureid#’ is not installed in this farm, and cannot be added to this scope

    http://extreme-sharepoint.com/2012/02/21/feature-error-vs2010/

    6. Importando las fotografías de usuario del directorio activo a los perfiles de usuario de SharePoint 2010

    http://geeks.ms/blogs/haarongonzalez/archive/2011/10/20/importando-las-fotograf-237-as-de-usuario-del-directorio-activo-a-los-perfiles-de-usuario-de-sharepoint-2010.aspx

    7. Setear un sitio y subsitio a usar un master page por default

    http://blog.brainlitter.com/2012/02/20/how-to-set-all-webs-sub-sites-as-some-call-them-in-a-site-collection-to-use-a-common-master-page/

    Cosas a tener en cuenta para MySites Sharepoint 2010

    • Cada Usuario de MySite tiene dos site collections: My Site host site collection y el user's individual site collection.
    • El My Site host site collection es site collection que aloja el My Newsfeed y My Profile.
    • Podemos añadir DB al web application que aloja MySites como cualquier otra web application. Esta base de datos almacena los datos cargados en My Content de MySite.
    • Cuando el usuario haga clic en My Content  en la user's individual site collection se creará MySite. Algunas cosas para tener en cuenta para crear site collection individuales:
      • Inclusión de caracteres comodines para los path de MySites o personales
      • Self Service Site creation está habilitado
      • Los usuarios deben tener el permiso de crear sitios personales asignados.
    • MySite requiere que un site collection exista en la raíz de la aplicación web (que aparece como / en la interfaz de usuario). Sin esto, usted recibirá un mensaje que indica que no hay ninguna colección de sitios en la raíz cuando se intenta habilitar la creación de sitios para la aplicación Web.
    • La feature de “self-service site creation” tiene consideraciones de seguridad para cross-site scripting. Es recomendado hostear My Sites en un dedicado web application para aislar cualquier scripts running sobre MySite afecte a los demás sites .
    • La feature Trusted My Site Host Locations previene a un usuario crear más de un MySite en una organización con múltiples User Profile service applications. Ej, en un farm que está esparcido regionalmente, podría haber múltiples User Profile service applications para cada región. Por default, un usuario puede crear un diferente MySite en cada User Profile service application o server farm, lo que puede provocar resultados innesperados desde la parte de administración y del usuario en si. Para prevenir que el usuario cree múltiples MySites, configure “trusted My Site host locations”. Cuando se especifica, los usuarios son redirigidos a la ubicación de host de MySite que se destina para sus cuentas, independientemente de dónde se navega cuando se intenta crear o acceder a sus sitios de MySite. Esta característica garantiza que cada usuario puede crear una sola MySite en una organización.
    • Cuando tiene múltples My Site farms y User Profile service applications, se debe configurar “trusted My Site host locations” y usar “User Profile Replication Engine para mantener sincronizada la data entre User Profile services applications.
    • Requisitos de almacenamiento: La gente puede cargar gran cantidad de documentos en mi sitio. Así que es importante contar con una cuota definida en el almacenamiento. La plantilla de personal del sitio de cuotas se aplica automáticamente cuando cada usuario crea una colección de sitios individual en su MySite haciendo clic en la pestaña MyContent. De forma predeterminada,esta plantilla de cuota tiene un límite de almacenamiento de100 MB. Se debe configurar la plantilla de cuota antes de implementar Mis sitios en su empresa debido a los cambios posteriores no afectarán a las colecciones existentes del sitio. Si usted decide configurar la plantilla de cuota más tarde, puede utilizar secuencias de comandos de Windows PowerShell para una actualización para las colecciones de sitios existentes.
    • Usted puede restringir los tipos de archivos que los usuarios ponen en sus MySites mediante el "Blocked file type".
    • User Profile Service Application crea 3 databases:
      • Profile database – usada para almacener user profile information.
        Synchronization database – usada para almacenar información de configuración y staging para la sincronización de datos de perfiles  desde fuentes externas (Ej: Active Directory Domain Services (AD DS)).
        Social tagging database – usada para almacenar social tags y notes creados por el usuario.
    • Si decide desactivar MySites completamente, usted todavía puede obtener los beneficios de la Búsqueda de Personas. Usted puede configurar los permisos para que los usuarios pueden actualizar sus perfiles sin que les permitirá crear un sitio MySite  (Desactivar el servicio de auto creación del sitio). Esto le permite bloquear la creación de colecciones de sitios de MySites, pero aún así permite a los usuarios acceder a su información de perfil propio y para buscar y ver los perfiles de otros usuarios.

     

    Procedimientos recomendados para Mis sitios

    http://technet.microsoft.com/es-ar/library/cc262706.aspx

    Links Útiles 2

    1. El arreglo (javascript): _spBodyOnLoadFunctionName

    Cuando la página es cargada, el evento onload ejecuta cada función de este arreglo.

    http://www.objspsite.com/2011/07/spbodyonloadfunctionnames-javascript.html

    2. Obtener información de todos los folders usando SPQuery

    Por default SPQuery retorna sólo los documentos del root principal, pero usando la propiedad “ViewAttributes” es posible recorrer recursivamente la lista.

    http://www.objspsite.com/2011/07/get-data-from-all-folder-of-library_2104.html

    3. Solucionar problemas de cantidad de items en listas externas

    Cuando trabajas con listas externas de más de 2000 items, pueden lanzar excepciones de varios tipos:

    · Timeout expired. BDC Runtime Object Model has throttled the response. The response from the service took more than '180000' milliseconds. The limit can be changed via the "Set-SPBusinessDataCatalogThrottleConfig' cmdlet.

    · WCF Service Connector has throttled the response. The response from the WCF service contains more than '3000000' bytes. The maximum amount of data that can be read through WCF Service Connector is '3000000' bytes. The limit can be changed via the 'Set-SPBusinessDataCatalogThrottleConfig' cmdlet.

    · Web Service Connector has throttled the response. The response from the web service contains more than ‘3000000’ bytes. The maximum amount of data that can be read through Web Service Connector is ‘3000000’ bytes. The limit can be changed via the ‘Set-SPBusinessDataCatalogThrottleConfig’ cmdlet.

    · Opening of a new connection is throttled. Maximum enabled connections ‘200’ for proxy are already been opened.

    · Database response throttled. Maximum number of rows that can be read through the database system utility is 2000.

    · Unable to display this Web Part. To troubleshoot the problem, open this Web page in a Microsoft SharePoint Foundation-compatible HTML editor such as Microsoft SharePoint Designer. If the problem persists, contact your Web server administrator. Correlation ID: ...........

    Esto ocurre porque se desea traer demasiada información. A continuación algunos links para solucionarlo

    http://akanoongo.blogspot.com/2011/02/how-to-resolve-2000-items-resolution-in.html

    http://community.bamboosolutions.com/blogs/sharepoint-2010/archive/2012/02/23/sharepoint-2010-cookbook-how-to-fix-quot-unable-to-display-this-web-part-quot-when-working-with-external-list-in-sharepoint-2010.aspx

    http://blogs.msdn.com/b/bcs/archive/2010/02/16/bcs-powershell-introduction-and-throttle-management.aspx

     

    4. Crear listas de Sharepoint 2010 con C#

    http://blogs.sharepointdevelopers.info/2012/02/c-snippet-to-create-sharepoint-list.html

    http://www.learningsharepoint.com/2010/09/05/create-list-from-list-template-sharepoint-2010-programmatically/

    http://lemonharpy.wordpress.com/2011/03/22/create-list-in-sharepoint-2010-programmatically/

    5. Crear items de listas (custom, con un adjunto, Publishing Page Library, libreria de documentos, calendario, ) de Sharepoint 2010

    https://www.nothingbutsharepoint.com/sites/devwiki/SP2007Dev/Pages/Creating%20a%20List%20Item%20instance%20programmatically%20using%20the%20object%20model.aspx

    SPWeb’s Propertybag

    The most common scenario for working with site settings is using the site’s propertybag. There are two different API properties on the SPWeb class – AllProperties (a Hashtable) and Properties (a PropertyBag). Only the AllProperties property should be used, the Properties property is added to SharePoint 2010 in order to provide backwards compatibility with older applications.

    The unconventional PropertyBag data type stores its keys in all lowercase, thus not supporting case-sensitive keys, while the conventional Hashtable does support case-sensitive keys. On top of that, while entries added to Properties get propagated to AllProperties with a lowercase key, entries added to AllProperties do not get propagated to Properties.

    If you are working with property entries that only your custom application will be reading and writing from, simply always use AllProperties and you will be good to go. However I often find myself having to work with properties that are read or written by SharePoint internals, and SharePoint itself is very inconsistent in its interaction with Web (Site) properties, probably due to its evolving nature being a rather old product as far as software is concerned.

    So the best solution that I have come up with to date is to add your entries to both API properties.

     

       1:  // Add a property entry
       2:  web.Properties[key] = value;
       3:  web.AllProperties[key] = value;
       4:  web.Update();
       5:  web.Properties.Update();
       6:   
       7:  // Remove a property entry
       8:  web.AllProperties.Remove(key);
       9:  web.Properties[key] = null;
      10:  web.Update();
      11:  web.Properties.Update();



    Fuente:


    http://bramnuyts.be/2012/01/10/working-with-spwebs-propertybag/


    http://trentacular.com/2009/06/sharepoint-the-wicked-spwebproperties-propertybag/


    http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb_members.aspx

    SharePoint Enterprise Search Migration Tool

    La SharePoint Enterprise Search Migration Tool (SMT), creado por Microsoft, es una gran herramienta para mover / migrar la configuración de búsqueda de una aplicación de servicio de búsqueda de SharePoint a otro, e incluso de un SSP SharePoint Server 2007 a ​​un SharePoint 2010 SSA o FAST para SharePoint . La herramienta está disponible para su descarga en el Archivo de MSDN - tanto como un binario y su código fuente. Se trata de una aplicación de consola que crea un documento XML al exportar la configuración y utiliza el mismo XML al importar los ajustes, y funciona muy bien en un entorno de programación. El SMT que está disponible en MSDN Archivo le permite migrar los best bets, los ámbitos de búsqueda y la configuración de la colección de sitios de búsqueda.

    Más información:

    http://www.wictorwilen.se/Post/Enhanced-Search-Migration-Tool-for-SharePoint-2010.aspx

    Descargar: http://archive.msdn.microsoft.com/odcsp2010searchmigra

    Crear una nuevo submenu en “Acciones del sitio”

    Crear un “SharePoint 2010 empty project” en Visual Studio 2010, elegir la opción de “Farm Solution”.

    Agregar un nuevo módulo, llamdo “SiteActionMenue”

    Verás los siguientes archivos.

    Puede borrar el archivo sample.txt.

     

    Link útiles 1

     

    1.       Extender el web part de search: http://blogs.msdn.com/b/stevennicolaou/archive/2010/06/24/extend-the-search-box-web-part-in-sharepoint-2010.aspx

    2.        Cambiar el texto del search box usando jquery

    http://snipplr.com/view/54473/change-the-default-search-box-text-in-sharepoint-2010-using-jquery/

    3.        Cambiar la configuración regional mediante programación

    http://www.gavd.net/servers/sharepointv4/spsv4_item.aspx?top=1&itm=1422

       1:  static void OcultarNombre()
       2:  {
       3:      using (SPSite mySite = new SPSite("http://sp"))
       4:      {
       5:          using (SPWeb myWeb = mySite.OpenWeb())
       6:          {
       7:              SPRegionalSettings myRegionalSet = myWeb.RegionalSettings;
       8:              SPTimeZone myZone = myRegionalSet.TimeZone;
       9:              Console.WriteLine(myZone.Description + " - " + myZone.ID.ToString());
      10:              SPTimeZoneInformation myZoneInfo = myZone.Information;
      11:              Console.WriteLine(myZoneInfo.Bias.ToString());
      12:          }
      13:      }
      14:  }
     
     4.     Integrar páginas ASP.NET dentro de Sharepoint
     
     https://www.nothingbutsharepoint.com/sites/devwiki/PlayBook/Pages/Approaches%20to%20integrate%20ASP.NET%20web%20application%20into%20SharePoint.aspx

    SPMonitoredScope

    Una Región Monitoreada es una parte del software que recopila información para ser mostrada en el Panel del Desarrollador. En SharePoint 2010 todo el código que ejecuta lo hace por defecto dentro de Regiones Monitoreadas, que cuentan cuantas veces se ejecuta cada rutina y cuanto tiempo se demora en ejecutar:

    Ej:

       1:  using (SPMonitoredScope GetListsBtnScope = new
       2:   
       3:  SPMonitoredScope("GetListsBtn_Click"))
       4:   
       5:  {
       6:   
       7:  //your code goes here
       8:   
       9:  }

    El evento GetListsBtn_Click aparece en el developr Dashboard




    • Un desarrollador puede utilizar SPMonitoredScope para:
      Identificar el uso excesivo de recursos.

    • Identificar los cuellos de botella de rendimiento.

    • Determinar cómo cierto componente interactúa con otros componentes.

    Por ejemplo, este código mide  logea el tiempo de ejecución, el número de solicitudes, y el número de consultas de SharePoint de SQL Server(incluyendo el texto de la consulta) que se realizan por la llamada externa.

       1:  using (new SPMonitoredScope("My Scope Name",TraceSeverity.Verbose,1000,
       2:     new SPRequestUsageCounter(3),
       3:     new SPSqlQueryCounter()))
       4:  {
       5:      callExternalCode();
       6:  }



    Más información:


    http://www.wictorwilen.se/Post/Improve-your-SharePoint-2010-applications-with-monitoring-using-SPMonitoredScope.aspx


    http://msdn.microsoft.com/en-us/library/ff512758.aspx

    Obtener el próximo ID de una lista de Sharepoint 2010

    El campo ID es un campo autoincremental.

       1:  public static int NextItemID(SPSite site, Guid listId)
       2:  {
       3:  int id = -1;
       4:  SPSecurity.RunWithElevatedPrivileges(delegate()
       5:  {
       6:  if (site.WebApplication.ContentDatabases.Count > 0)
       7:  {
       8:  string DBConnString = site.WebApplication.ContentDatabases[0].DatabaseConnectionString;
       9:  SqlConnection con = new SqlConnection(DBConnString);
      10:  try
      11:  {
      12:  con.Open();
      13:  SqlCommand com = con.CreateCommand();
      14:  com.CommandText = String.Format(“SELECT NextAvailableId FROM AllListsAux where ListID = ‘{0}’”, listId.ToString());
      15:  id = (int)com.ExecuteScalar();
      16:  }
      17:  finally
      18:  {
      19:  con.Close();
      20:  }
      21:  }
      22:  });
      23:  return id;
      24:  }





    Campo: tp_NextAvailableId
    Descripción: Next available ID for an item that is added to a list.

    En Sharepoint 2007 cambia la consulta SQL:

    SELECT tp_NextAvailableId FROM AllLists where tp_ID='{Id of the List}'

    Fuente:

    http://sprider.org/2011/10/15/get-next-list-item-id-in-sharepoint-list/

    http://kwizcom.blogspot.com/2009/08/how-do-i-tell-what-next-list-item-id-is.html

    Infopath current user

    1. Click derecho sobre el Text Box y seleccionar las propiedades del Text Box
    text box properties

    2. En el tab de Data,en la sección Default Value, click en el botón de function.
    Click Function

    3. Hacer click en Insert Function
    Insert Function

    4. Seleccionar la categoria User

    5.En funciones elegir username
    userName

    7. Preview del formthere it is

    SharePoint Software Factory

    Nueva versión de la extensión de Visual Studio para ayudarnos a programar en Sharepoint. http://spsf.codeplex.com

     

    NUEVAS FEATURES:

    • Menu "List And Doc": Linq to SharePoint (imports the schema of several lists to LINQ classes)
    • Menu "BCS": Simple BCS Model
    • Menu "BCS": Import BCS Model from Database
    • Menu "BCS": Model BCS Model with classes
    • Menu "BCS": Quick Deploy BCS Model (undeploys/deploys BCS model via powershell)
    • Menu "Security": Minimal CAS, Medium CAS, recipes for single CAS Policy Items etc.
    • Menu "ASP.NET": WCF Webservice
    • code snippets added, partly from http://spcodesnippets.codeplex.com Thx to Ayman El-Hattab (http://aymanelhattab.com)
    • Added custom FxCopDictionary to allow project specific exclusions for abbreviations, keyword, acronyns etc. Dictionary will be automatically used in Realase build configuration.

     

    Incrementar el tamaño máximo de template de listas

    Si intenta guardar una lista como una plantilla de lista, puede ver el siguiente error, debido a que la lista sea demasiado grande:

    “The list is too large to save as a template. The size of a template cannot exceed 10485760 bytes.”

    Puede aumentar el tamaño máximo de una plantilla de lista del sitio, ejecute el siguiente comando  (tenga en cuenta que 500 MB es lo más grande que puede setear):

    stsadm -o setproperty -propertyname max-template-document-size -propertyvalue 50000000

    PDF Files en SharePoint Online

    Ahora se puede abrir archivos PDF directamente en Adobe Reader - y el archivo PDF se mantendrá conectado a SharePoint Online. También puede editar y guardar los cambios a SharePoint Online desde el escritorio. Y además, ahora se puede utilizar control de versiones (check-in y check-out) con los archivos PDF para una mejor gestión y revisión.

    Para aprovechar las ventajas de esta actualización, siga los siguientes pasos.

    • Espere por la actualización de SharePoint Online
    • Actualice Adobe Reader a la versión 10.1.2 de cliente.
    • Añade su sitio web de SharePoint Online a la zona de seguridad Sitios de confianza en InternetExplorer (por ejemplo, https://contoso.sharepoint.com).
    • Marque el Recordar mi contraseña en la casilla al iniciar sesión en un sitio de SharePoint Online.

    Privilegios elevados en código de Sharepoint

    SharePoint utiliza impersonation  de ASP.Net para personalizar la plataforma basado en  el usuario actual autorizado. Objetos de SharePoint son conscientes de la identidad del usuario y muchas partes de SharePoint sacan provecho de esta capacidad. Por ejemplo, cuando llegue a las listas en un sitio a través de la API, que sólo ven los que el usuario actual tiene acceso.

    Si utiliza la autenticación de Windows y el código llama el modelo de objetos de SharePoint a partir de un proceso de trabajo de IIS, la solicitud debe suplantar la identidad del usuario que realiza la llamada. Sharepoint Foundation configura ASP.NET para suplantar al usuario que llama de forma automática, pero su código puede funcionar inesperadamente, o no, si se suspende la suplantación.  Más info: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsite.aspx

    Cuando usar RunWithElevatedPrivileges y cuando no

    RunWithElevatedPrivileges is a great way to solve the database connection problem, but often it can become somewhat of a Pandora’s box. It can become a go-to tool for every permission error encountered in SharePoint code. However, there are some issues that can occur with overuse of this style of programming, not least of which is that you lose some core SharePoint functionality inherent with impersonating the user.

    A StackOverflow discussion about the pitfalls of RunWithElevatedPrivilges is a good summary and starting point for reading on the subject. Also, I’ve included below 3 good references for further reading on the topic.

    A veces para suspender la impersonalización de usuario, es posible usar “SPSecurity.RunWithElevatedPrivileges”.

    RunWithElevatedPrivileges es una gran manera de resolver el problema de conexión de base de datos, pero a menudo puede llegar a ser algo así como una caja de Pandora.Puede convertirse en una herramienta de go-to para cada error de permiso encontrado en el código de SharePoint.Sin embargo, hay algunos problemas que pueden ocurrir con el uso excesivo de este estilo de programación, no menos importante de los cuales es que se pierde la funcionalidad de SharePoint básico inherente a suplantar al usuario.

    Mejores prácticas en el uso de RunWithElevatedPrivileges

    • Evite usar SPSecurity.RunwithElevatedPrivilege para acceder al modelo de objetos de Sharepoint. Use SPUserToken para impersonalización con SPSite.
    • Si usas SPSecurity.RunwithElevatedPrivilege, has un dispose de todos los objectos en el delegate. No pases objectos de SharePoint fuera del método RunwithElevatedPrivilege.
    • Sólo use SPSecurity.RunwithElevatedPrivilege para hacer llamadas externas bajo la identidad del app pool. No lo uses para elevar los privilegios de objectos de Sharepoint.
    • Siempre usa el constructor SPSite con una instancia de SPUserToken para crear un contexto de seguridad con privilegios elevados. Para impersonalizar el sistema, usa la propiedad SystemAccount.UserToken del actual contexto SPSite, ej:
      var site = new SPSite(SPContext.Current.Site.ID,  SPContext.Current.Site.SystemAccount.UserToken);
    • Evitar pasar objetos de Sharepoint entre diferentes contextos de seguridad (SPSiteinstances), con exception de SPUserToken. Un objeto SPUSer creado en un SPSite A no puede pasarse a un SPSite B. Esto puede ser fuente de oscuros bugs.
    • Restring que assemblis pueden usa privilegios elevados corriendo en minimal trust, evita el uso de la GAC, y has auditoria de cualquier CAS policies deployada.

    martes, 21 de febrero de 2012

    Algunos códigos de idioma ID (LCID) de configuración regional

    Identificador de configuración regional (LCID) : valor A 32 bits definido por Microsoft Windows que consta de un identificador de idioma, ordenar ID y bits reservados que identifican un idioma determinado.

    Inglés EE.UU.
    1033 (& H409)

    Español (tradicional)
    1034 (& H40A)

    Portugués (Brasil)
    1046 (& H416)

     

    Fuente:

    http://support.microsoft.com/kb/221435

    Encontrar todos los archivos desprotegidos (check out) de un sitio

    El siguiente código de powershell permite recorrer un sitio y subsitios que devuelve una lista de archivos desprotegidos.

       1:  function GetCheckedOutFiles($web)
       2:  {
       3:  Write-Host "Processing Web: $($web.Url)..."
       4:          foreach ($list in ($web.Lists | ? {$_ -is [Microsoft.SharePoint.SPDocumentLibrary]})) {
       5:              Write-Host "`tProcessing List: $($list.RootFolder.ServerRelativeUrl)..."
       6:              foreach ($item in $list.CheckedOutFiles) {
       7:                  if (!$item.Url.EndsWith(".aspx")) { continue }
       8:                  $hash = @{
       9:                      "URL"=$web.Site.MakeFullUrl("$($web.ServerRelativeUrl.TrimEnd('/'))/$($item.Url)");
      10:                      "CheckedOutBy"=$item.CheckedOutBy;
      11:                      "CheckedOutByEmail"=$item.CheckedOutByEmail
      12:                  }
      13:                  New-Object PSObject -Property $hash
      14:              }
      15:              foreach ($item in $list.Items) {
      16:                  if ($item.File.CheckOutStatus -ne "None") {
      17:                      if (($list.CheckedOutFiles | where {$_.ListItemId -eq $item.ID}) -ne $null) { continue }
      18:                      $hash = @{
      19:                          "URL"=$web.Site.MakeFullUrl("$($web.ServerRelativeUrl.TrimEnd('/'))/$($item.Url)");
      20:                          "CheckedOutBy"=$item.File.CheckedOutByUser;
      21:                          "CheckedOutByEmail"=$item.File.CheckedOutByUser.Email
      22:                      }
      23:                      New-Object PSObject -Property $hash
      24:                  }
      25:              }
      26:          }
      27:  foreach($subWeb in $web.Webs)
      28:  {
      29:  GetCheckedOutFiles($subweb)
      30:  }
      31:          $web.Dispose()
      32:  }
      33:   
      34:  $web = get-spweb $args[0]
      35:   
      36:  GetCheckedOutFiles($web)


    ./GetCheckedOutFiles http://urltoweb | Format-Table url | out-file output.txt -width 500

     


    Fuente:


    http://www.thorntontechnical.com/tech/powershell-tech/powershell-tip-find-all-checked-out-files

    Detrás de escenas de una consulta de search en Sharepoint 2010

    En los siguientes artículos encontrará una descripción de los pasos que se ejecutan detrás de una consulta de search en Sharepoint 2010.

    http://blogs.msdn.com/b/russmax/archive/2012/02/15/guide-to-walking-a-sharepoint-2010-search-query-behind-the-scenes.aspx

    http://blogs.msdn.com/b/russmax/archive/2010/04/23/search-2010-architecture-and-scale-part-2-query.aspx

    En resumen:

    1. A search is performed by a user

    2. The WFE serving the call uses the associated search service application proxy to connect to a server running the Query and Site Settings Service also known as the Query Processor. It uses WCF for this communication.

    3. The QP will connect to the following components to gather results merges\security trims and return results back to WFE:

  • Query Component - holds entire index or partition of an index
  • Property Store DB – holds metadata\properties of indexed content
  • Search Admin DB – holds Security Descriptors\Configuration data

    4. WFE displays search results to the user

  • Resetear la “Farm Passphrase”

    Se debe ser miembro del rol SharePoint_Shell_Access de la base de datos de configuración de SharePoint. Ver Get-SPShellAdmin y Add-SPShellAdmin.

    Abrir SharePoint 2010 Management Shell como administrador

    Ingresar lo siguiente:

    $passphrase = ConvertTo-SecureString -asPlainText –Force

    El sistema preguntará por un string , ingresa la nueva passphrase y presiona enter.

    El prompt aparecerá de nuevo, ingresa lo siguiente:

    Set-SPPassPhrase -PassPhrase $passphrase -Confirm

    Te preguntará de nuevo por la passphrase, ingresala y presiona enter.

     

    Más información:

    http://iedaddy.com/2011/01/sharepoint-2010-reset-the-farm-passphrase/

    Al activar la feature “Document Id” en la site collection me lanza “Acceso denegado“

    Una vez que se activo la feature “Document ID” a nivel de site collection se desea modificar el prefijo del id de documento generado de forma automática.

    Si embargo, al presionar OK lanza el error de “Acceso denegado”

    Este error es generado porque el permiso “Create Subsite” ha sido removido de la web application actual.

    Pasos para resolver:

    1. Central Administration->Manage Web Applications->Web Application name ->User Permission.
    2. Dentro de la categoría “Site Permission” activar el checkbox de “Create Subsites”.

    Más información:

    http://sharepoint.mindsharpblogs.com/Brian/archive/2012/02/19/%E2%80%98Access-Denied%E2%80%99-Error-When-Activating-Document-ID-Site-Collection-Feature.aspx

    Microsoft IT Showcase para SharePoint Server 2010

    Microsoft IT documenta y publica un conjunto de recursos conocidos como Microsoft IT Showcase, que describe la manera en que se diseñaron e implementaron varias tecnologías y productos de Microsoft.

    Fuente:

    http://blogs.msdn.com/b/sharepoint_sp/archive/2012/02/20/191-c-243-mo-lo-hace-microsoft-it-compruebe-estos-recursos-de-it-showcase-para-sharepoint-server-2010.aspx

    Conocer el tamaño y la cantidad de documentos de una content database

     

    Ejecutar la siguiente consulta contra la content database deseada:

    --"count" and "size" of all docs in your SP2010 contend DB
    --run script against your SharePoint 2010 wss_Content..... db
    SELECT
    COUNT(*) AS 'Count',
    (SUM(CONVERT(bigint,Size))/1024) AS 'Size in kbyte',
    ((SUM(Size)/1024)/COUNT(*)) AS 'AVG Size per Doc. in kbyte'
    from dbo.AllDocs WITH(NOLOCK)
    WHERE ID IN
    (
    SELECT tp_DocID FROM dbo.AllUserData WITH(NOLOCK)--comment this clause out if you also want include the SP systemfiles
    )
    AND Size is NOT NULL
    AND Extension != '000'
    --"count" and "size" of all docs in your SP2010 contend DB group by fileextension
    --run script against your SharePoint 2010 wss_Content..... db
    SELECT
    COUNT(ID) AS 'Count',
    (SUM(CONVERT(bigint,Size))/1024) AS 'Size in kbyte', --covert because of an "int" overflowrisk in a lager db
    Extension AS 'Filetype',
    ((SUM(Size)/1024)/COUNT(*)) AS 'AVG Size per Doc. in kbyte'
    from dbo.AllDocs WITH(NOLOCK)
    WHERE ID IN
    (
    SELECT tp_DocID FROM dbo.AllUserData WITH(NOLOCK) --comment this clause out if you also want include the SP systemfiles
    )
    AND Size is NOT NULL
    AND Extension != '000'
    GROUP BY
    Extension
    ORDER BY 'Size in kbyte' DESC



     


    Fuente:


    https://www.nothingbutsharepoint.com/sites/itpro/Pages/COUNT-and-SIZE-of-all-your-documents-in-SharePoint-2010.aspx

    Tips to optimize SharePoint performance

    Les dejo algunos tips para optimizar la performance. Podrán extender la lectura en las fuentes de los posts:

    Tip 1: Separate user and database traffic

    But SharePoint places a tremendous amount of demand on SQL -- each request for a page can result in numerous calls to the database, not to mention service jobs, search indexing and other operations.

    Tip 2: Isolate search indexing

    In order to prevent search and user traffic from conflicting, an additional server may be added to the farm, which is dedicated solely to servicing search queries (in smaller environments, the index server may also serve this function). The farm administrator would then configure the search service to perform crawls only against this dedicated server. This configuration may reduce traffic to the Web front-end servers by as much as 70% during index operations.

    Tip 3: Adjust SQL parameters

    One quick way to avoid future headaches is to provision the major SharePoint databases on separate physical disks (or LUNs if a storage-area network is involved). This means one set of disks for search databases, one for temporary databases and still another for content databases. Additional consideration should be given to isolating the log files (*.ldf).

    Another technique is to proactively manage the size and growth of individual databases. By default, SQL grows database files in small increments, either 1MB at a time or as a fixed percentage of database size (usually 10%). These settings can cause SQL to waste cycles constantly expanding databases, and prevents further data from being written while the databases are expanding. An alternative approach is to pre-size the databases up to the maximum recommended size (100GB) if space is available and set auto growth to a fixed size (e.g. 10MB or 20MB).