Métodos de extensión en C# .Net, Agrega métodos a tus clases ya compiladas

En .Net tú puedes agregar métodos a tus clases ya compiladas, a las de .Net o a cualquier dll que descargues para tus proyectos. Esto es útil para darle más dinamismos a .Net y puedas tener mayor flexibilidad para crear funcionalidades.

En este video te mostrare como puedes agregar métodos a tus clases ya compiladas.

Curso para realizar pagos en línea con php, conekta, html5, javascript

En este curso te mostrare como puedes poner un formulario en tus sitios web el cual pueda realizar pagos en línea utilizando el proveedor conekta y con el lenguaje de programación php.

Este curso esta en proceso, puedes recibir notificaciones suscribiendote a mi canal de youtube en el siguiente enlace: canal de youtube

Diagrama del proceso de pago en línea

1.- Tokenizar tarjeta

2.- Realizar pago y guardado en base de datos

Descargar código fuente

¿Cómo obligar al comando xsd.exe a poner el nombre que deseemos a nuestra clase de c# creada a partir de archivos xsd?

Para todos los que hemos trabajado con facturación electrónica nos resulta común crear nuestras clases a partir de los archivos xsd otorgados por hacienda.

Hay un bug cuando creamos nuestra clase a partir de muchos xsd con la aplicación xsd.exe ya que esta le agrega al nombre final la concatenación de los nombres de todos los archivos utilizados, pero en Windows tenemos una limitante de 248 caracteres.

Por ejemplo para la facturación electrónica de Colombia tenemos que utilizar más de 10 archivos xsd y lo normal es que utilizáramos un comando así:

xsd 
DIAN_UBL.xsd DIAN_UBL_Structures.xsd xmldsig-core-schema.xsd CodeList_CurrencyCode_ISO_7_04.xsd CodeList_LanguageCode_ISO_7_04.xsd CodeList_MIMEMediaTypeCode_IANA_7_04.xsd CodeList_UnitCode_UNECE_7_04.xsd UBL-CommonAggregateComponents-2.0.xsd UBL-CommonBasicComponents-2.0.xsd UBL-CommonExtensionComponents-2.0.xsd UBL-ExtensionContentDatatype-2.0.xsd UBL-QualifiedDatatypes-2.0.xsd UnqualifiedDataTypeSchemaModule-2.0.xsd /classes

El cual nos dará un error ya que la concatenación del nombre del archivo resultante supera los 248 caracteres.
Para otorgarle un nombre de salida debemos hacer lo siguiente:

xsd DIAN_UBL_Structures.xsd xmldsig-core-schema.xsd CodeList_CurrencyCode_ISO_7_04.xsd CodeList_LanguageCode_ISO_7_04.xsd CodeList_MIMEMediaTypeCode_IANA_7_04.xsd CodeList_UnitCode_UNECE_7_04.xsd UBL-CommonAggregateComponents-2.0.xsd UBL-CommonBasicComponents-2.0.xsd UBL-CommonExtensionComponents-2.0.xsd UBL-ExtensionContentDatatype-2.0.xsd UBL-QualifiedDatatypes-2.0.xsd UnqualifiedDataTypeSchemaModule-2.0.xsd .\DIAN_UBL.xsd /classes

Poniendo .\DIAN_UBL.xsd antes del parámetro /clases hará que nuestro archivo final se llame DIAN_UBL.cs.

Video explicando paso a paso:

¿Cuál es el código javascript para simular la tecla f11 del navegador? Pantalla completa en navegador.

Antes de todos, cabe recalcar, que ningún navegador les permitirá poner la pantalla completa sin que el usuario tenga interacción con el sitio web.
A continuación anexo el código que puede incluir en un botón o algún elemento html para que active el full screen de su navegador.


 var el = document.documentElement;
        var rfs = // for newer Webkit and Firefox
            el.requestFullScreen
            || el.webkitRequestFullScreen
            || el.mozRequestFullScreen
            || el.msRequestFullScreen
                ;
                if(typeof rfs!="undefined" && rfs){
                    rfs.call(el);
                } else if(typeof window.ActiveXObject!="undefined"){
                // for Internet Explorer
                var wscript = new ActiveXObject("WScript.Shell");
                if (wscript!=null) {
                    wscript.SendKeys("{F11}");
                }
                }

Esto pueden agregarlo para que cuando el usuario de clic en la pagina se haga full screen de la siguiente manera:


document.getElementsByTagName("body")[0].onclick= function(){

         var el = document.documentElement;
        var rfs = // for newer Webkit and Firefox
            el.requestFullScreen
            || el.webkitRequestFullScreen
            || el.mozRequestFullScreen
            || el.msRequestFullScreen
                ;
                if(typeof rfs!="undefined" && rfs){
                    rfs.call(el);
                } else if(typeof window.ActiveXObject!="undefined"){
                // for Internet Explorer
                var wscript = new ActiveXObject("WScript.Shell");
                if (wscript!=null) {
                    wscript.SendKeys("{F11}");
                }
                }
    }

Crear CRUD en MVC .Net con C#, Entity Framework y Sql Server

En este video te enseñare a crear un CRUD con la tecnología MVC .Net sin utilizar javascript, es decir, con solicitudes propias de la tecnología.

Un CRUD es el acrónimo de Create, Read, Update y Delete, en español: crear, leer, modificar y eliminar, y es en si la creación de un módulo básico en programación.

Descargar código fuente

LINQ en C# .Net intermedio en 10 minutos, take, skip, select, union, count

En este video veremos LINQ a nivel intermedio, haremos ejercicios prácticos con los cuales te explicare como puedes utilizar las funciones take, skip, select, union y count en tus consultas de LINQ.

Código


  class Program
    {
        static void Main(string[] args)
        {
            List<Persona> lst = new List<Persona>() {
                new Persona() { Edad = 40, Nombre = "Pancho" },
                new Persona() { Edad = 30, Nombre = "Juan" },
                new Persona() { Edad = 11, Nombre = "Mario" },
                new Persona() { Edad = 18, Nombre = "Juana" },
                new Persona() { Edad = 6, Nombre = "Memo" },
            };

            List<Persona> lstSoloTexto = new List<Persona>() {
                 new Persona() { Edad = 30, Nombre = "Héctor" },
                 new Persona() { Edad = 38, Nombre = "Fernando" },
                 new Persona() { Edad = 12, Nombre = "Miguel" }

            };

            List<string> lstOrdenadosSoloNombres = (
                                                    from a in 
                                                        (from d in lst
                                                       select d )
                                                       .Union(
                                                        from d in lstSoloTexto
                                                        select d
                                                        )
                                                    orderby a.Nombre
                                                    select a.EdadYNombre
                                                    )
                                                   .ToList();

            int numerodepersonas = lstOrdenadosSoloNombres.Count;

            foreach (var Nombre in lstOrdenadosSoloNombres)
            {
                Console.WriteLine(Nombre);
            }

        }

        public class Persona
        {
            public int Edad { get; set; }
            public string Nombre { get; set; }

            public string EdadYNombre
            {
                get {
                    return Edad + " - " + Nombre;
                }
            }

        }
    }

Nuevo esquema de cancelación de facturas electrónicas en C# .Net, CFDI 3.3 SAT

En este video abarcare todo lo que debes saber cómo programador para cancelar bajo el nuevo esquema del SAT para la cancelación de facturas electrónicas que entro en vigor este pasado 1 de noviembre del 2018.

Curso de Web scraping en C# .Net

En este nuevo curso te mostrare como puedes hacer web scraping de manera fácil y rápida con C# .Net.

1.- Obtener contenido HTML, seleccionar elementos por clase, nombre, id

En este video te muestro como puedes seleccionar elementos de una página web de manera natural, utilizando su clase, su id o su nombre de etiqueta.

2.- Guardar contenido de un sitio web en base de datos

En este segundo video te enseñare a como puedes guardar el contenido de un sitio web en una base de datos.

3.- Descargar todas las imágenes de una url

En este tercer video te enseñare como puedes descargarte todas las imagenes que se visualizan en una url de un sitio web.

4.- Descargar todas las imágenes de TODO un sitio web

En este video te enseñare a como navegar por todas las ligas de una url e ir recursivamente url por url del sitio entero descargando las imagenes.

Código fuente


using HtmlAgilityPack;
using ScrapySharp.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using WebScraping.Models;

namespace WebScraping
{
    class Program
    {
        static List&lt;string&gt; lstYaInvocadas = new List&lt;string&gt;();
        static List&lt;string&gt; lstImagenesDescargadas = new List&lt;string&gt;();
        static string pathImages = @"C:\tuRuta\";
        static void Main(string[] args)
        {
           
            HtmlWeb oWeb = new HtmlWeb();
            string url = "https://hdeleon.net/";

           


            /*Video: 2 - Obtener titles ***********************************************/
             using (webscrapingEntities db = new webscrapingEntities()) {
                 for (int i = 1; i &lt;= 32; i++) {


                     if (i &gt; 1)
                         url += "/page/" + i + "/";

                     HtmlDocument doc2 = oWeb.Load(url);

                     foreach (var Nodo in doc2.DocumentNode.CssSelect(".entry-title"))
                     {

                         var NodoAnchor = Nodo.CssSelect("a").First();
                         var oTitle = new titles();
                         oTitle.title = NodoAnchor.InnerHtml;

                         db.titles.Add(oTitle);
                         //MisTitulos.Add(NodoAnchor.InnerHtml);


                     }

                     Console.WriteLine("se analizo la pagina: "+i);
                 }

                 db.SaveChanges();
             }
             

            /* Video 3 - Ejemplo de robar imagenes ********************************************/
            
          
            HtmlDocument doc = oWeb.Load(url);

            //obtenemos las imagenes
            int num = 0;
            foreach (var Nodo in doc.DocumentNode.CssSelect("img"))
            {
                Console.WriteLine("Imagen robada: " + Nodo.GetAttributeValue("src"));
                using (WebClient oClient = new WebClient())
                {
                    string urlImagen = Nodo.GetAttributeValue("src");
                    oClient.DownloadFile(new Uri(urlImagen), pathImages + num + ".jpg");
                }
                num++;
            }


            /*Video 4 - Obtener todas las imagenes de todo el sitio web *************************/
            HtmlDocument doc3 = oWeb.Load(url);

            //obtener las imagenes de la url
            foreach (var Nodo in doc3.DocumentNode.CssSelect("img"))
            {
                // Console.WriteLine("Imagen robada: " + Nodo.GetAttributeValue("src"));
                using (WebClient oClient = new WebClient())
                {
                    string urlImagen = Nodo.GetAttributeValue("src");
                    string[] arrUrlImagen = urlImagen.Split('/');
                    string nombreImagen = pathImages + arrUrlImagen[arrUrlImagen.Length - 1];
                    if (!lstImagenesDescargadas.Contains(arrUrlImagen[arrUrlImagen.Length - 1]))
                    {
                        oClient.DownloadFile(new Uri(urlImagen), nombreImagen);

                        lstImagenesDescargadas.Add(arrUrlImagen[arrUrlImagen.Length - 1]);
                    }
                }
            }

            //recursividad urls
            foreach (var Nodo in doc3.DocumentNode.CssSelect("a"))
            {
                string urlSon = Nodo.GetAttributeValue("href");
                if (!lstYaInvocadas.Contains(urlSon) &amp;&amp; urlSon.StartsWith("https://hdeleon.net/"))
                {
                    Console.WriteLine(urlSon);
                    lstYaInvocadas.Add(urlSon);
                    ObtienesImagenes(urlSon);

                }
            }

        }

        #region Helpers

        private  static void ObtienesImagenes(string url,string tab="")
        {
            try
            {
                HtmlWeb oWeb = new HtmlWeb();
                HtmlDocument doc3 = oWeb.Load(url);

                foreach (var Nodo in doc3.DocumentNode.CssSelect("img"))
                {
                    // Console.WriteLine("Imagen robada: " + Nodo.GetAttributeValue("src"));
                    using (WebClient oClient = new WebClient())
                    {
                        string urlImagen = Nodo.GetAttributeValue("src");
                        string[] arrUrlImagen = urlImagen.Split('/');
                        string nombreImagen =pathImages+ arrUrlImagen[arrUrlImagen.Length - 1];
                        if (!lstImagenesDescargadas.Contains(arrUrlImagen[arrUrlImagen.Length - 1]))
                        {
                            oClient.DownloadFile(new Uri(urlImagen), nombreImagen);

                            lstImagenesDescargadas.Add(arrUrlImagen[arrUrlImagen.Length - 1]);
                        }
                    }
                }

                foreach (var Nodo in doc3.DocumentNode.CssSelect("a") )
                {
                    string urlSon = Nodo.GetAttributeValue("href");
                    if ( !lstYaInvocadas.Contains(urlSon) &amp;&amp; urlSon.StartsWith("https://hdeleon.net/"))
                    {
                        Console.WriteLine(tab+urlSon);
                        lstYaInvocadas.Add(urlSon);
                        ObtienesImagenes(urlSon, tab + "&gt;");
                       

                    }
                }
            }
            catch { }
          
        }

        #endregion
    }
}