martes, 7 de diciembre de 2010

Android 2.3

Para los interesados en el desarrollo en Android, pueden ver las características de la ultima versión de android aqui.

Este es el video de Android 2.3


domingo, 5 de diciembre de 2010

MVC - Herramienta para realizar seguimiento de errores

Emanuel Soto, Emanuel Soto, Emanuel Soto, Emanuel Soto,Emanuel Soto, Emanuel Soto, Emanuel Soto, Emanuel Soto

Una de las herramientas que se puede usar para realizar el seguimiento de errores en MVC se puede encontrar una completa descripción aquí.
Emanuel Soto, Emanuel Soto, Emanuel Soto, Emanuel Soto,Emanuel Soto, Emanuel Soto, Emanuel Soto, Emanuel Soto

sábado, 4 de diciembre de 2010

Linq

Para referencia a Linq pueden ver los post que de este blog donde se da una serie de links del uso de linq.
También se puede encontrar buena información del uso de linq en la página de microsoft

viernes, 3 de diciembre de 2010

Linq Sharepoint

Para las personas que estén interesadas en el uso de linq en sharepoint pueden ver estos blogs donde se da ejemplos y ayuda sobre este tema:





Emanuel Soto


Emanuel Soto


Emanuel Soto


Emanuel Soto

martes, 2 de noviembre de 2010

Sharepoint Problemas Ajax UpdatePanel

Al usar AJAX dentro de Sharepoint me encontré con un problema al usar el UpdatePanel, ya que al usar el UpdatePanel este solo funcionaba una sola vez, las siguientes acciones que se realizaban no eran capturadas por el update panel, buscando un solución para este problema encontré el siguiente código de javascript que permite solucionar este problema.
Este código lo tienen que poner para que el update panel se comporte correctamente.

Emanuel Soto
Emanuel Soto


<script type="text/javascript">
    _spOriginalFormAction = document.forms[0].action;
    _spSuppressFormOnSubmitWrapper = true
</script
Emanuel Soto



jueves, 21 de octubre de 2010

Android 2.2

Para los interesados en el desarrollo en Android, pueden ver las características de la ultima versión de android aqui.
Este es el video de Android 2.2

martes, 19 de octubre de 2010

Compresión de archivos .NET

Dentro del desarrollo dentro de .NET en algun momento he tenido la necesidad de comprimir archivos en formato .ZIP, para ello les recomendaría usar esta librería para lo compresión de archivos,  dentro de estas tenemos:

http://dotnetzip.codeplex.com/

Ejemplo de código para la compresión de archivos:


Emanuel Soto


            using (ZipFile zip = new ZipFile())
            {
                zip.AddFile("c:\\ejemplo.png", "images");
                zip.AddFile("c:\\ejemplo2.pdf", "files");
                zip.AddFile("ejemplo.txt");
                zip.Save("MyZipFile.zip");
            }


http://www.icsharpcode.net/OpenSource/SharpZipLib/Default.aspx


Emanuel Soto
                        using (ZipOutputStream s = new ZipOutputStream(File.Create(args[1])))
            {

                s.SetLevel(9); // Nivel de compresión

                byte[] buffer = new byte[4096];

                foreach (string file in filenames)
                {

                    // Crear la entrada para agregar el archivo
                    ZipEntry entry = new ZipEntry(Path.GetFileName(file));
                    entry.DateTime = DateTime.Now;
                    s.PutNextEntry(entry);
                    //Agregar el contenido a la nueva entrada.
                    using (FileStream fs = File.OpenRead(file))
                    {
                        int sourceBytes;
                        do
                        {
                            sourceBytes = fs.Read(buffer, 0, buffer.Length);
                            s.Write(buffer, 0, sourceBytes);
                        } while (sourceBytes > 0);
                    }
                }

                //Finalizar la creación
                s.Finish();
                s.Close();
            }

Emanuel Soto

martes, 12 de octubre de 2010

Configuración de smtp con gmail

Para la configuración de gmail dentro asp.net:

Agregar la siguiente configuración dentro del web.config



<mailSettings>
      <smtp from="CORREO@gmail.com">
        <network host="smtp.gmail.com" userName="CORREO@gmail.com" password="COTRASEÑA" port="587" />
      </smtp>
</mailSettings>




Para enviar el correo tienes que configurar la validación del certificado para eso tienes que agregar el siguiente código para la validación del certificado remoto, este código lo tienes que usar antes de enviar correo.





public static bool ValidateServerCertificate(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
        {
            return true;
        }





Y un método de ejemplo para enviar el correo que utiliza la validación del certificado puede ser como sigue:

public static void EnviarMail()
        {
            ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

            MailMessage message = new MailMessage();
           
            message.To.Add(“correodestino@dominio”);
           

            message.Subject = titulo;
            message.Body = body;
            message.IsBodyHtml = true;
           
            message.Priority = MailPriority.Normal;

            try
            {
                SmtpClient client = new SmtpClient();
               
                client.EnableSsl = true;               
                client.Send(message);
            }
            catch
            {
               //Manejo de errores

            }
        }

Herramientas desarrollo de workflows para Sharepoint 2010

Emanuel Soto

Dentro de sharepoint se tiene la posibilidad de trabajar con workflows, estos pueden ser creados
tanto en Visual Studio 2010 como en sharepoint designer 2010, para que puedan tener en cuenta las diferencias que hay entre estas herramientas pueden ver el siguiente link


Emanuel Soto

Emanuel Soto

jueves, 7 de octubre de 2010

XML Problemas Validacion

Al realizar una validación de XML tuve un problema al usar el código de ejemplo de microsoft, al leer un archivo de XML,
Este es el código que pueden encontrar en el ejemplo dado por microsoft
Emanuel Soto

Emanuel Soto



    // Create the XmlSchemaSet class.
    XmlSchemaSet sc = new XmlSchemaSet();

    // Add the schema to the collection.
    sc.Add("urn:bookstore-schema", "books.xsd");

    // Set the validation settings.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas = sc;
    settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
 
    // Create the XmlReader object.
    XmlReader reader = XmlReader.Create("booksSchemaFail.xml", settings);

    // Parse the file. 
    while (reader.Read());
Este código me da un error al leer mi xml:
  •  Codificación Unicode, usando XMLParseContext puedes solucionar este problema, referencia.
Una vez que se usa Unicode sale un error al leer el xml
  • Error Message: Data at the root level is invalid. Line 1, position 1.
Para solucionar el problema use el siguiente código.
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.ValidationType = ValidationType.Schema;
                sc.Add("urn:bookstore-schema", "books.xsd");
                settings.IgnoreWhitespace = true;
                settings.ValidationFlags = XmlSchemaValidationFlags.ReportValidationWarnings;
                settings.ValidationEventHandler += new ValidationEventHandler(ValidationCallBack);
                using(StreamReader sr = new StreamReader("booksSchemaFail.xml"))
                {
                    using(XmlReader reader = XmlReader.Create(new StringReader(sr.ReadToEnd()),settings))
                    {
                        while (reader.Read());
                    }
                }

Emanuel Soto

Emanuel Soto



Emanuel Soto

Emanuel Soto


Emanuel Soto


Emanuel Soto


Emanuel Soto

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>