Mostrando entradas con la etiqueta Query SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta Query SQL. Mostrar todas las entradas

martes, 20 de noviembre de 2012

Tips Info # 79 Sharepoint 2010

1-Acceso denegado para todos los usuarios excepto para la cuenta de farm al hacer un restore

Esto se solucionando configurando las cuentas de super reader y writer, y dando una policy de full control a las mismas.

$wa = Get-SPWebApplication -Identity "<WebApplication>"  
$wa.Properties["portalsuperuseraccount"] = "<SuperUser>"  
$wa.Properties["portalsuperreaderaccount"] = "<SuperReader>"  
$wa.Update() 

Obviamente las cuentas deben estar previamente creadas.

Este error se debe a lo siguiente: La caché de objetos almacena propiedades de los elementos en Microsoft SharePoint Server 2010. La característica de publicación usa los elementos de esta memoria caché para representar páginas web. Los objetivos de la caché de objetos son reducir la carga en el equipo en el que se ejecuta SQL Server y mejorar el rendimiento y latencia de la solicitud. La caché de objetos realiza consultas como una de dos cuentas de usuario integradas: la cuenta de usuario súper del portal y la cuenta de lector súper del portal. Estas cuentas de usuario deben configurarse correctamente para garantizar que la caché de objetos funcione correctamente. La cuenta de usuario súper del portal debe ser una cuenta que tenga acceso de control total a la aplicación web. La cuenta de lector súper del portal debe ser una cuenta que tenga acceso completo de lectura a la aplicación web.

2-Borrar o Recuperar un web part cerrado

image

Ingrese en la URL el siguiente parámetro ?contents=1 , esto abrirá una página donde podrá borrar el web part cerrado

image

Para restaurar un web part cerrado, deberá editar la página y vaya al link de agregar web part. Al abrir la gallería, debemos elegir la sección “Closed Web Parts”

image

3-Query sobre múltiples listas de Sharepoint con GetSiteData

SPSiteDataQuery sQuery = new SPSiteDataQuery();
string where += "<Lists>";
       where += "<List ID='ID de lista 1'/>";
       where += "<List ID='ID de lista 2'/>";
       where += "<List ID='ID de lista 3'/>";
       where += "</Lists>";
       sQuery.Lists = where;
       sQuery.ViewFields = "<FieldRef Name ='Title' />";
      
DataTable results = SPContext.Current.Web.GetSiteData(sQuery);

Más info: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spweb.getsitedata.aspx

4-Agregar un agrupamiento de más de 2 columnas en Sharepoint 2010

Crear una página de web part, y agregar un “Emty Data View”

image

En el nuevo web part haz click en “Click here to select a data source” . A continuación elige la lista que deseas mostrar. A continuación se mostrará el “Data Source Details Pane”

Selecciona las columnas que desees con SHIFT, y para finalizar el proceso haz click en “Insert Selected Fields as” y elige “Multiple Item View”

image

A continuación agrega el agrupamiento que necesites:

image

5-Feature ViewFormPagesLockDown

Dentro de un site con acceso anónimo, se puede prevenir que usuarios anónimos naveguen a páginas internas o que buscadores indexen el contenido: ej:

/_layouts/viewlsts.aspx

/Lists/[NombreLista]/AlItems.aspx

Esto se puede desactivar mediante la feature ViewFormPagesLockdown

Esto es una feature oculta, pero se puede acceder vía powershell:
Get-SPFeature | where { $_.DisplayName -eq "ViewFormPagesLockdown"}

image

Esta feature tiene alcance a nivel de site collection, se puede activar mediante powershell:

Enable-SPFeature -url http://site_collection -identity XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX -confirm:$false

Puede ocasionar problemas con ciertos sites anónimos que permite que usuarios carguen encuestas o listas con determinados datos.

Incluso cuando el modo de bloqueo está activada, los usuarios anónimos pueden acceder a determinadoas direcciones URL de Sharepoint, tales como las páginas en el directorio _layouts y servicios web que están expuestos en el directorio _vti_bin. Se puede solucionar este problema mediante web.config.

Ej: deniego a todo link interno a usuarios anónimos (?)

<configuration>
<location path="_layouts">     <system.web>                        <authorization>         <deny users="?" />       </authorization>     </system.web>   </location>
<location path="_vti_bin">     <system.web>                        <authorization>         <deny users="?" />       </authorization>     </system.web>   </location>
<location path="_layouts/login.aspx">     <system.web>       <authorization>         <allow users="?" />       </authorization>     </system.web>   </location>
<location path="_layouts/error.aspx">     <system.web>       <authorization>         <allow users="?" />       </authorization>     </system.web>   </location>
<location path="_layouts/accessdenied.aspx">     <system.web>       <authorization>         <allow users="?" />       </authorization>     </system.web>   </location>
</configuration>
Más información: http://technet.microsoft.com/en-us/library/ee191479(v=office.12).aspx

viernes, 17 de agosto de 2012

Tips / Info #57 Sharepoint 2010

1-The URL is invalid, it may refer to a nonexistent file or folder or refer to a valid file that is not in the current Web

Este error puede ser por dos causas:

  • Que se haya llenado la partición de datos o de logs del SQL Server, revisar el event viewer o los uls logs si aparece el error de falta de espacio. Para solucionar el problema de espacio, realizar un shrink de los logs de base de datos.
  • Otra posibilidad es que el contenido de la página esté modificado y que tengas controles erróneos. Para ello, deberías revisar los uls logs y fijarse que control está generando el problema. Ej; te podrá aparecer el siguiente mensaje en los logs: System.Web.HttpException: Cannot find ContentPlaceHolder 'PlaceHolderBreadcrumb' in the master page '/_catalogs/masterpage/v4.master', verify content control's ContentPlaceHolderID attribute in the content page.    at System.Web.UI.MasterPage.CreateMaster

    2-Infopath error al consumir servicios REST: XML data that is rquired for this form to function correctly cannot be found.

    Verifique que la clave de registro “DisabledLoopCheck” esté en 1

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

    3-Error “The license state for the current server doesn't match the farm's license state”– SharePoint PSConfig Error

    Esto se debe a que no actualizó la información de la actualización en los servers, para ello ejecute el siguiente comando de powershell en cualquier

    Set-SPFarmConfig –InstalledProductsRefresh

    Este comando tomará las entradas del registr y reseteará las entradas en la base Config DB.

    4-Verificar mediante una consulta de SQL que productos están instalados.

    Select * from Objects with (nolock) where properties like '%icrosoft.SharePoint.Administration.SPInstallState%'

    Esta consulta nos devolverá una línea, con una columna llamada “Properties” que tiene un formato XML. Dentro de esta columna nos informará que productos están instalados:

    Los GUIDS asociados a productos lo pueden verificar en la siguiente clave de registro: SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\14.0\WSS\InstalledProducts\

    8816.image_thumb_3994883A

    0181.image_thumb_7DF47979

    Más información: http://blogs.technet.com/b/vedant/archive/2010/10/05/detecting-installed-sku-of-sharepoint-2010-and-upgrading-editions.aspx

    5-Al abrir un archivo desde el WebDav (vista del explorador), se muestra en sólo lectura, incluso con permisos de administrador

  • Revisar el archivo web.config del application actual, que no tenga la siguiente sección:

    <verbs allowUnlisted=”true”>

    <add verb=”OPTIONS” allowed=”false” />

    <add verb=”PROPFIND” allowed=”false” />

    </verbs>

    Esto se debe a que Sharepoint implementa su propia versión de WebDav (sin considerar la implementación de IIS), La lista de operaciones que ofrece Sharepoint sobre webdav son las siguientes:

    GET, POST, OPTIONS, HEAD, MKCOL, PUT, PROPFIND, PROPPATCH, DELETE, MOVE, COPY, GETLIB, LOCK, UNLOCK

    domingo, 8 de julio de 2012

    Tips/Info #47 Sharepoint

    1-Obtener información de un web part GUID o ID

    SELECT DISTINCT D.SiteID, D.WebId, W.FullURL as WebURL, D.Id As DocumentId,
                    D.DirName, D.LeafName, tp_ID
    FROM       dbo.Docs D WITH (nolock) 
    INNER JOIN dbo.Webs W WITH (nolock) ON D.WebID = W.Id
    INNER JOIN dbo.WebParts WP WITH (nolock) ON D.Id = WP.tp_PageUrlID
    WHERE WP.tp_ListId Is Null AND WP.tp_Type Is Null AND WP.tp_Flags Is Null
          AND WP.tp_BaseViewID Is Null AND WP.tp_DisplayName Is Null 
          AND WP.tp_Version Is Null
    AND WP.tp_WebPartTypeId='ID del web part'

    2-Ver y editar la configuración de Sharepoint Diagnostic Logging usando PowerShell

    Lista los niveles de log configurados para un área específica:
    get-sploglevel -identity "SharePoint Server:*" | format-table name, eventseverity, traceseverity

    Setea el nivel de log para el área Sharepoint Server para que loguee logs de "Errores"
    set-sploglevel -identity "SharePoint Server:*" -eventseverity Error -traceseverity Monitorable
    Más información: http://technet.microsoft.com/en-us/library/ff607887

    3-Algunas buenas prácticas para el logging de Sharepoint 2010

    Cambiar la unidad donde se registra los logs. De forma predeterminada, el registro de diagnóstico está configurado para escribir los registros en la misma unidad y partición que SharePoint Server 2010 donde se instaló.Debido a que el registro de diagnóstico puede utilizar un montón de espacio en el disco y la escritura en los registros puede afectar el rendimiento del disco, usted debe configurar el registro para escribir en un disco que es diferente de la unidad en la  cual SharePoint Server 2010 se ha instalado.
       
    Restringir el espacio de disco usado por logs. Por defecto, la cantidad de espacio en disco que puede utilizar el registro de diagnóstico no se limita. Por lo tanto, limitar el espacio de disco que utiliza el registro para asegurarse de que el disco no se llena, sobre todo si se configura el registro detallado para escribir eventos de nivel. Cuando la restricción del disco se agota, los registros más antiguos se eliminan y nuevos logs se registran.

    Use la configuración de logging "Verbose" con cuidado. Puede configurar el registro de diagnóstico detallado para registrar eventos de nivel. Esto significa que el sistema registrará cada acción que lleva SharePoint Server 2010.El nivel Verbose puede utilizar espacio en el disco y afectar la unidad y el rendimiento del servidor. Usted puede utilizar detallado a nivel de registro para registrar un mayor nivel de detalle cuando se están haciendo cambios críticos y volver a configurar el registro para registrar sólo los eventos de más alto nivel después de realizar el cambio.

    Regularmente haz backups de logs. Los registros de diagnóstico contiene datos importantes. Por lo tanto, que realizar copias de seguridad periódicamente para asegurarse de que estos datos se mantiene. Cuando se restringe el uso del espacio, los archivos de registro se borran automáticamente, a partir de los archivos más antiguos en primer lugar, cuando el umbral se cumple.

    Habilitar el evento de "log flooding protection". Al habilitar esta opción se configura el sistema para la detección de eventos que se repiten en el registro de eventos de Windows. Cuando el mismo evento se registra en varias ocasiones, los eventos que se repiten son detectados y suprimidos hasta que las condiciones vuelven a un estado normal.

    4-“The specified name is already in use” while activating site feature"

    Revisar el log, y buscar el ID de la feature que lanza esta excepción.
    Abrir el Sharepoint Manager (http://spm.codeplex.com/) y activar la feature, en la sección Web Features.

    Figure1[3]

    5-Verificar la consistencia de una actualización en Sharpeoint 2010

    Si la información de la versión no es consistente a través de estos tres lugares, esto puede indicar que la actualización no se ha instalado correctamente. Esto puede provocar errores y otros problemas que pueden ser muy difíciles de solucionar.

    1. La clave de registro (HKLM\Software\Microsoft\Office Server\14.0\BuildVersion)

    2. La siguiente clave de registro (HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{9014000

    0-110D-0000-1000-0000000FF1CE}\DisplayVersion)

    3. El archivo Microsoft.SharePoint.Portal.dll (\Program Files\CommonFiles\Microsoft Shared\Web Server Extensions\14\ISAPI\Microsoft.SharePoint.Portal.dll)

    sábado, 26 de mayo de 2012

    Tips/Info #23 Sharepoint 2010

    1-Script de powershell para setear el mail de los access request de los sitios

    $webapp = Get-SPWebApplication "nombre del web application"
    foreach($site in $webapp.Sites){
        foreach($web in $site.AllWebs){
            if ($web.HasUniqueRoleDefinitions){
                if($web.RequestAccessEnabled){
                    Write-Host $Web.URL
                    Write-Host "---"

                    Write-Host $Web.URL "Actualizando RequestAccessEmail"
                    Write-Host "---"
                    $web.RequestAccessEmail ="email@email.com"
                    $web.Update()
                }
                else {
                    Write-Host "Access Request no habilitado." $Web.URL
                }
            }
        }
    }

    2-Obtener los administradores de los sitios mediante powershell

    $siteUrl = Read-Host "Enter Site URL"
    $rootSite = New-Object Microsoft.SharePoint.SPSite($siteUrl)
    $spWebApp = $rootSite.WebApplication

    foreach($site in $spWebApp.Sites)
    {
        foreach($siteAdmin in $site.RootWeb.SiteAdministrators)
        {
            Write-Host "$($siteAdmin.ParentWeb.Url) - $($siteAdmin.DisplayName)"
        }
        $site.Dispose()
    }
    3-Exportar los resultados de las encuestas en Sharepoint 2010

  • Ir a Acciones del sitio/Ver todo el contenido del sitio
  • Ir a la encuesta
  • Acciones/ Exportar a hoja de datos

    image


    4-Agregar la opción de Tags & Notes dentro de cualquier página con javascript

    <a title="Etiquetar pagina" id="TagsAndNotes_ctl00_ctl42" onclick="SafeRunFunction(function() { TagDialogOpener.Open('http:\u002f\u002fsharepoint2010a:45354\u002fen-us\u002fPages\u002fdefault.aspx', document.title, '0'); }, 'SocialData.js', 'TagDialogOpener');" href="javascript:;">Etiquetar página</a>



    5-Encontrar todas las alertas de una site collection mediante una query de SQL

     Add-PSSnapin microsoft.sharepoint.powershell

    $site = Get-SPSite "http://sitiosharepoint2010/sites/sitioalertas/"
    $alertResultsCollection = @()
    foreach ($web in $site.AllWebs)
    {
    foreach ($alert in $web.Alerts)
    {
    $alertURL = $web.URL + "/" + $alert.ListUrl
    $alertResult = New-Object PSObject
    $alertResult | Add-Member -type NoteProperty -name "URL DE LA LISTA" -value $alertURL

    $alertResult | Add-Member -type NoteProperty -name "TITULO DE LA ALERTA" -value $alert.Title
    $alertResult | Add-Member -type NoteProperty -name "TIPO DE ALERTA" -value $alert.AlertType

    $alertResult | Add-Member -type NoteProperty -name USUARIO SUBSCRIPTO
    " -value $alert.User
    $alertResultsCollection += $alertResult
    }

    $site.Dispose()
    $alertResultsCollection

    # Exportar a CSV
    #$alertResultsCollection | Export-CSV "
    Alertas.csv"
    6-Borrar un archivo mediante client object
    ClientContext cc = new ClientContext(url);
    Web w = cc.Web;
    List olist = w.Lists.GetByTitle("Libreria");
    cc.Load(olist);
    var files = olist.RootFolder.Files;
    FileCollection fc =files;
    cc.Load(fc);
    cc.ExecuteQuery();
    File Deleteimtefile = fc[1]; //borro el primer archivo
    Deleteimtefile.DeleteObject();
    cc.ExecuteQuery();
    7-Ocultar la papelera de reciclaje con css
    <style type=”text/css”>

    .ms-quicklaunchheader{

    display:none;}

    .ms-recyclebin{

    display:none;}

    </style>


    8-Error al ejecutar código que trata de consultar algo del Active directory: 

    “An operations error occurred at System.DirectoryServices.AccountManagement.ADStoreCtx.FindPrincipalByIdentRefHelper”

    Ejecute la sección de código fuente que llama al Active Directory con SPSecurity.RunWithElevatedPrivileges.


    9-Mostrar pantalla de procesamiento


    image

    protected void btnEvento_Click(object sender, EventArgs e)
    {
    //Operacion de tiempo extenso
    using (SPLongOperation longOperation = new SPLongOperation(this.Page))
    {
    //Mensaje custom que aparecerá con una rueda de procesamiento
    longOperation.LeadingHTML = "<div><h2>Procesando solicitud</h2></div>";
    longOperation.TrailingHTML = "<div><h3>Por favor espere mientras el procesamiento termina</h3></div>";

    //Inicia la operación con procesamiento extenso
    longOperation.Begin();

    //El codigo del procesamiento extenso va aca


    //termina la operación con procesamiento extenso
    string redirectURL = SPContext.Current.Web.Url + "/SitePages/default.aspx";
    longOperation.End(redirectURL);
    }
    }

    10-Opciones para EventLog
























    NivelDefinición
    NoneNo ocurre ningún logging
    CriticalEste tipo de mensaje indica un error grave que ha causado un gran fallo en la solución.
    ErrorEste tipo de mensaje indica una condición de urgencia. Todos los eventos de error debe ser investigados.
    WarningEste tipo de mensaje indica un problema potencial o problema que podría requerir atención. Los mensajes de advertencia deben ser revisados y analizados en el tiempo.
    InformationLos mensajes de información no requieren ninguna acción,pero pueden proporcionar datos valiosos para el seguimiento del estado de su solución.
    VerboseEste nivel de registro de eventos corresponde a eventos o mensajes.

    11-Opciones para TraceLog
























    LevelDefinition
    NoneNingún trace logs son escritos.
    UnexpectedEste nivel se utiliza para registrar los mensajes sobre eventos que hacen que las soluciones detienen su procesamiento.Cuando se establece a este nivel, el registro sólo incluye los eventos de este nivel.
    MonitorableEste nivel se utiliza para registrar mensajes acerca de eventos irrecuperables que limitan la funcionalidad de la solución, pero no detienen la aplicación. Cuando se establece a este nivel, el registro incluirá también los errores críticos (nivel inesperado).
    High

    Este nivel se usa para registrar los eventos que son inesperados, pero que no detendrá el procesamiento de una solución. Cuando se establece para acceder a este nivel, el registro incluirá advertencias, errores controlables (nivel) y los errores críticos (nivel inesperado).

    MediumCuando se establece en este nivel, el registro de seguimientoincluye todo excepto los mensajes detallados. Este nivel se utiliza para registrar toda la información de alto nivel acerca de las operaciones que se realizaron. En este nivel, hay suficiente detalle para generar el flujo de datos y la secuencia de operaciones. Este nivel de registro puede ser utilizado por los administradores o los profesionales de soporte técnico para solucionar problemas.
    VerboseCuando se establece para acceder a este nivel, el registroincluye mensajes en todos los otros niveles. Casi todas lasacciones que se realizan se registran cuando se utiliza este nivel. Detallado rastreo produce muchos mensajes de registro. Este nivel se utiliza normalmente sólo para la depuración en un entorno de desarrollo.

  • sábado, 25 de febrero de 2012

    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