martes, 5 de octubre de 2010

Recursos de desarrollo sharepoint

Con la nueva versión de sharepoint, les doy algunos enlaces de interés para los desarrolladores de sharepoint.



Emanuel Soto

Emanuel Soto

Emanuel Soto

Emanuel Soto

Emanuel Soto

lunes, 4 de octubre de 2010

Introducción al uso de sharepoint Designer

Para los que son nuevos con el uso de sharepoint 2010 pueden ver este vídeo donde se explica el uso de básico de sharepoint designer 2010





Emanuel Soto
Emanuel Soto


Emanuel Soto

Crear una pagina de ingreso Sharepoint 2010

Al desarrollar una aplicación en sharepoint, normalmente se quiere personalizar la página de ingreso al sistema, con el uso de usuarios externos se puede personalizar la pagina de ingreso creando una pagina que derive de la clase FormsSignInPage.


Puedes usar la siguiente configuración de la página:

Emanuel Soto


<%@ Assembly Name="Microsoft.SharePoint.IdentityModel, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Assembly Name="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>


<%@ Page Language="C#" Inherits="Microsoft.SharePoint.IdentityModel.Pages.FormsSignInPage" %>


<%@ Import Namespace="Microsoft.SharePoint.WebControls" %>
<%@ Register TagPrefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls"
    Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register TagPrefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Import Namespace="Microsoft.SharePoint" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>



Para poder personalizar el master.page que la pagina va usar debemos agregar el siguiente código en la misma página.

Emanuel Soto


<script runat="server"> 

protected void Page_PreInit(object sender, EventArgs e)
    {
        this.MasterPageFile = "~/_catalogs/masterpage/Login.master";


    }
<script>

Y para el cuerpo se puede usar la siguiente código:

<asp:content id="ContentInterno" runat="server" contentplaceholderid="PlaceHolderMain">
    

    <div style="display: none">
        <SharePoint:EncodedLiteral runat="server" EncodeMethod="HtmlEncode" ID="ClaimsFormsPageTitle" />
        <SharePoint:EncodedLiteral runat="server" EncodeMethod="HtmlEncode" ID="ClaimsFormsPageTitleInTitleArea" />
    </div>
    
 <asp:Login ID="signInControl" FailureText="<%$Resources:wss,login_pageFailureText%>"
    OnLoginError="OnLoginError" OnLoggedIn="OnLoggedIn" 
                        runat="server">
                        <LayoutTemplate>


    
               
                                <label class="form-label">Usuario:<asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
                                                Text="*"></asp:RequiredFieldValidator></label>
                                
                                <asp:TextBox class="form-input" ID="UserName" runat="server"></asp:TextBox>
                                
                                <label class="form-label">Clave: <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
                                        Text="*"></asp:RequiredFieldValidator></label>                        
                        
                                <asp:TextBox class="form-input" ID="Password" runat="server" TextMode="Password"></asp:TextBox>


                                <label class="form-label-error">
                                <asp:Literal id="ltlMensaje" runat="server"></asp:Literal>
                                <asp:Literal id="FailureText" runat="server" Visible="false"></asp:Literal>
                                <asp:ValidationSummary id="vs" runat="server"></asp:ValidationSummary>
                                </label>
                        
                                
                                <asp:button class="form-submit" id="Login" CommandName="Login" runat="server" Text="">                                    
                                </asp:button>
                                
                              
                        
   </LayoutTemplate>
                    </asp:Login>
    <div id="SslWarning" style="color: red; display: none">
        <SharePoint:EncodedLiteral runat="server" EncodeMethod="HtmlEncode" ID="ClaimsFormsPageMessage" />
    </div>
</asp:content>

Espero que estos pasos les pueda ayudar a configurar una página personalizada en sharepoint


Emanuel Soto

Emanuel Soto

Emanuel Soto


Emanuel Soto


Emanuel Soto

Sharepoint 2010 - FBA

Buscando información dentro de internet sobre el manejo de usuarios externos en sharepoint, encontre el siguiente webcast donde se muestra el manejo de membership.

También puedes encontrar mas información del uso de FBA en sharepoint dentro de la comunidad de sharepoint donde se tiene el proyecto de CKS Forms Based Authentication Solution.


Para poder hacer una configuración con LDAP, puedes seguir los pasos de este post y si quieres usar el membership provider puedes ver el post que publique aquí.

Emanuel Soto
Emanuel Soto
Emanuel Soto
Emanuel Soto
Emanuel Soto
Emanuel Soto

Configuración ASP.NET Charting Control

Dentro de .NET desde el framework 3.5 se tiene los nuevos controles para  presentar gráficos, la documentación la puedes encontrar en Microsoft Chart Controls Documentation  y existe un foro.
Ahora pondré los pasos que se necesita seguir para poder configurar este manejador de gráficos en Sharepoint 2010.


  1.        Instalar la extensión desde Microsoft Chart Controls
  2.        Modificar el web.config para que pueda manejar este tipo de controles.
a.       Agregar dentro de la sección SafeMode/PageParsePaths
<SafeMode MaxControls="200" CallStack="false" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="false">
      <PageParserPaths>
        <PageParserPath VirtualPath="/Shared Documents/*" AllowServerSideScript="true" CompilationMode="Always" />
      </PageParserPaths>
    </SafeMode>
b.      Agregar el ensamblado dentro de la sección de safecontrols
<SafeControl Assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI.DataVisualization.Charting" TypeName="*" Safe="True" AllowRemoteDesigner="True" />    
    </SafeControls>
c.       Dentro de System.web/httpHandlers
                        <httpHandlers>
      <add verb="*" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />
</httpHandlers>
d.      Para cargar el ensamblado modificar la sección assemblies

<compilation batch="false" debug="false">
      <assemblies>
        …
        <add assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />

      </assemblies>

e.      Agregar a la sección pages
<pages enableSessionState="false" enableViewState="true" enableViewStateMac="true" validateRequest="false" pageParserFilterType="Microsoft.SharePoint.ApplicationRuntime.SPPageParserFilter, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" asyncTimeout="7">
      …
      <controls>
        <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      </controls>
    </pages>

f.        Agregar a la sección handlers
                               <handlers>
                               …
<remove name="ChartImageHandler" />
      <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
 …
                               </handlers>
g.       Agregar una variable dentro appSettings
                               <appSettings>
                               …
 <add key="ChartImageHandler" value="storage=memory;timeout=20;" />
</appSettings>





Emanuel Soto
Emanuel Soto
Emanuel Soto
Emanuel Soto
Emanuel Soto
Emanuel Soto

viernes, 1 de octubre de 2010

Problemas con el uso de SPListItem


Dentro de sharepoint se tiene los objetos SPListItem para manipular la información de un elemento dentro de la lista, pero cuando se usa este elemento de la siguiente forma, suponiendo que la lista tiene elementos, podríamos acceder al primer elemento de la lista:

SPListItemCollection items = SPContext.Web.Current.Lists[“Lista”];
items[0][“Title”] = “Nuevo titulo”;
items[0].Update();

Este código no genera error, pero tampoco realiza los cambios que hemos hecho.
Lo correcto seria crear un objeto SPListItem.

SPListItem item = items[0];
item[“Title”] = “Nuevo titulo”;
ítem.Update();

Emanuel Soto
Emanuel Soto
Emanuel Soto

Uso de profiles en Sharepoint 2010

Dentro de Sharepoint también se puede usar el perfil para manejar información adicional de los usuarios.

Para las clases que va usar para guardar la información podría usar una configuración como la siguiente:
Clase que deriva de ProfileBase

    public class CProfile : ProfileBase
    {
        public DatosPersona DatosPersona
        {           
            get { return (Personal)GetPropertyValue("Personal"); }
        }

        /// <summary>
        /// Get the profile of the currently logged-on user.
        /// </summary>     
        public static CProfile GetProfile()
        {
            return (CProfile)System.Web.HttpContext.Current.Profile;
        }

        /// <summary>
        /// Gets the profile of a specific user.
        /// </summary>
        /// <param name="userName">The user name of the user whose profile you want to retrieve.</param>
        public static CProfile GetProfile(string userName)
        {
            return (CProfile)Create(userName);
        }

    }

Datos que va a guardar:

    [Serializable]
    public class DatosPersona
    {
        public string Id { get; set; }

        public string NombreCompleto { get; set; }

        public string ApellidoPaterno { get; set; }
    }

Para poder registrar el profile en sharepoint tiene que agregar dentro de los assemblies que va usar sharepoint la dll donde se encuentra la clase
Un ejemplo del ensamblado que tienes que agregar a assemblies puede ser:

<assemblies>
<add assembly="Namespacedelaclase, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a992b3cd0fe46baf" />
</assemblies>

Para registrar el profile dentro de los proveedores tienes que agregar la cadena de conexión que va usar el profile, y después agregar dentro de los proveedores el nuevo profile

  • Cadena conexión


<connectionStrings>
    <add connectionString="CadenaConexion;" name="CadenaConexion" />
</connectionStrings>
 

  • Profile


<profile defaultProvider="NombreProfile" inherits=" Namespacedelaclase.CProfile">
      <providers>
        <add name=" NombreProfile " type="System.Web.Profile.SqlProfileProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" applicationName="/" connectionStringName="CadenaConexion" />
      </providers>
</profile>