April 12, 2016

No Comments

¿Qué es el Big Data?

Hoy en día y debido a los grandes avances en tecnología y la gran cantidad de personas que hacemos uso de ella, es una realidad que generamos una cantidad infinita de información que debe ser almacenada en algún lugar para poder hacer uso de ella.

Este nuevo concepto aparece cuando tenemos un volumen de datos de un petabyte, es decir, un millón de gigabytes de información, sin embargo, para que estos datos sean útiles y nos aporten conocimiento, es necesario analizarlos y darles el tratamiento adecuado para que sean útiles y el objetivo principal, sea fácil acceder a ellos en el momento que sea necesario.

 

 

Lo que vuelve interesante el concepto es la explotación que le podemos dar a la información ya que el análisis del big data puede proporcionar oportunidades a sectores tradicionales como el transporte, la salud o la fabricación, y puede mejorar la investigación y acelerar la innovación, además de influir en la productividad.

 

Existen 5 tipos de big data que son clasificados así debido al uso de la información:

 

  • Contenido Web y Social: En este apartado se encuentra toda la información que es obtenida de redes sociales, como: Facebook, Twitter, LinkedIn, etc.

     

  • Dispositivo a dispositivo: Se refiere a las tecnologías que permiten conectarse a otros dispositivos como sensores, medidores, etc., que traducen los eventos que captan en información significativa.

     

     

  • Datos de transacciones: Incluye los registros de facturación, de llamadas, etc.

     

  • Biométricos: Se refiere a toda la información biométrica en la que se incluyen huellas digitales, reconocimiento facial y genético, etc.

     

     

  • Datos generados por los humanos: Aquí se incluye toda la información personal, correos electrónicos, historiales médicos, documentos electrónicos, etc.

 

A continuación mostramos una lista de decisiones a tomar en cuenta para la aplicación de una solución de big data:

 

  • Análisis: Distinguir si la información se analizará en tiempo real o se organiza de tal manera que pueda analizarse posteriormente, es muy importante esta decisión, ya que afecta a otras como hardware, software, frecuencia de datos esperada, etc.

     

  • Metodologías de procesamiento: La elección de esta metodología ayuda a identificar las herramientas y técnicas apropiadas para nuestra solución.

     

  • Frecuencia y tamaño de los datos: La cantidad de información que se espera y con qué frecuencia llega, así como el tamaño de la misma, lo que nos ayudará a determinar el mecanismo y formato de almacenamiento.

     

  • Formato de la información: No será lo mismo planear nuestra arquitectura de big data para una tienda de música que para manejo de historiales clínicos.

     

  • Origen de datos: Identificar los orígenes de datos ayudará a determinar el ámbito desde una perspectiva empresarial

 

  • Consumidores de datos: Identificar a los consumidores nos da la ventaja de anticiparnos a detalles técnicos en nuestra arquitectura.

 

  • Hardware: Es una de los análisis más complicados y el que no se puede determinar si no tenemos claros los puntos anteriores, aquí se definen las limitaciones y el alcance que tendrá nuestra solución.

     

 

April 12, 2016

No Comments

CREAR JOBS EN SQL SERVER

En este breve tutorial realizaremos un pequeño ejemplo de los JOB’s en SQL para eso debemos conocer primero el significado de Job.

En SQL Server existe la posibilidad de automatizar tareas a través de proceso llamado Jobs el cual tiene un parecido a realizar una tarea programada en Windows en donde se pueden especificar los pasos y controlarlos.

Las ventajas de los Jobs es que guardan las modificaciones de la base de datos ya que todas las operaciones que se realizas sobre los datos que son usados para recuperación o restauración de una base de datos.

Resumiendo esto se puede programar una tarea que se ejecute a cierta hora del día y ejecute un proceso o sentencia SQL en la mayoría de los casos esto se usa para realizar BackUp a las tablas.

Para este ejemplo realizaremos un Job para ejecutar un SELECT a una hora determinada del día.

 

Pasos

Iniciamos SQL Server.

 

Al tener ejecutando SQL Server podemos apreciar del lado izquierdo el menú con las bases de datos disponibles así como la administración de seguridad etc. En la parte inferior de las opciones encontramos SQL Server Agent

Que en la mayoría de los casos esta deshabilitado. Para habilitarlo damos click derecho sobre el SQL Server Agent y seleccionamos Start (Iniciar) donde nos saldrá el siguiente mensaje que seleccionaremos la opción de Yes (Si)

 

Ya tendremos acceso a las opciones del agente y entre ellas la opción de Jobs

El siguiente paso es dar click derecho sobre la carpeta Jobs y seleccionar New Job en esta sección se ingresa el nombre del trabajo , el propietario , Categoría que sirve por si se tiene muchos Jobs en un mismo servidor se pueden agrupar para después filtrarlo. En mi caso creare un Job con el nombre Example sin categorizar y con mi usuario.

El siguiente paso es ir a Steps (Pasos) que se encuentra en el menú del lado izquierdo

En esta sección crearemos el paso a ejercer por nuestro Job al dar click en Add tendremos la siguiente ventana

En este caso se proporciona el nombre del paso así como lo que se ejecutara si es una sentencia Trans-SQL o un comando de powershell etc, así como la base de datos a la cual se le ejecutara dicha acción yo seleccionare la de NorthWind y en la sección de Command se proporciona el script a ejecutar que en mi caso es un simple SELECT a la tabla de Employees pero se puede cargar un TXT con las sentencias que deseamos ejecutar

Antes de terminar este paso nos dirigimos a la pestaña de advanced (Avanzadas) donde se le indica que paso seguir después de ejecutar el primer paso como por ejemplo de indicamos que sigua con el siguiente paso o salir del trabajo y notificar que fue concluido, al igual si el paso llegara a fallar se puede indicar que hacer. Y en la parte de output file se indica el archivo de salida de nuestro paso ya concluido aquí seleccionaremos el lugar donde se almacenara el resultado.

Para este caso lo almacenare en la carpeta de Project con el nombre de TestSelect

El último paso es programar la ejecución del Job y para eso damos click sobre la opción Schedules (Programación) donde nos pedirá el nombre del Schedule así como la recurrencia del mismo, la frecuencia, la hora de ejecución , duración.

Y listo tenemos nuestro Job listo para funcionar.

 

Resultado

En punto de las 04:15:17 Pm que se programó el Job obtuvimos el archivo con el resultado de nuestra prueba que es el siguiente

April 12, 2016

No Comments

Que es Modernizr

 

Modernizr es una librería de JavaScript que forma parte de gran número de sitios web en la actualidad, la principal característica que lo hace una herramienta de gran utilidad es la capacidad de detectar tecnologías desde el navegador del usuario, por ejemplo, HTML 5 Y CSS3.

 

 

Con la aparición y el avance de diversas tecnologías, tenemos la posibilidad de crear nuevos elementos, más llamativos, detallados y con excelentes diseños y los usuarios en ocasiones no van a la par de esta tecnología y es donde esta va superando a los navegadores, lo que ocasiona que nuestro sitio se vea inadecuadamente y puede ser una experiencia desagradable para el usuario.

 

Es por eso que existe esta herramienta, ya que nos permite comprobar si el navegador del usuario cuenta con ciertas funciones o características, y si no es así, queda por nuestra parte está ejecutar un script específico para navegadores anteriores y tratar de emular lo que si pueden interpretar los navegadores actuales.

 

Las versiones de estas herramientas se encuentran disponibles desde su página:

 

https://modernizr.com/

 

 

Donde encontraremos 2 versiones, la de desarrollo y la de producción, donde la diferencia, es que la de desarrollo cuenta con todas las pruebas que se realizaron, es decir, es una versión sin comprimir y la versión de producción es la versión compacta de las características de esta herramienta.

A continuación se muestra un ejemplo de cómo incluir las funcionalidades de esta herramienta:

 

<script src=”modernizr.js” type=”text/javascript”></script>

 

Posteriormente agregamos la siguiente línea:

 

<html class=”no-js”>

 

Esto es necesario ya que con esto podemos detectar si un usuario tiene deshabilitado el JavaScript, en caso de estar todo correcto Modernizr reemplazará esta clase por la clase js.

 

Con esto ya tenemos configurado nuestro ambiente para poder contar con las ventajas que Modernizr le ofrece a nuestro sitio web, si inspeccionamos el código que interpreta el navegador, podemos observar que se han añadido muchas clases a la etiqueta HTML, esto lo hace la herramienta y depende de las características que tenga el navegador de los usuarios, es decir, entre más reciente sea el navegador, menor cantidad de clases va a tener porque cuenta con las ultimas funcionalidades.

 

En el caso contrario se agregaran varias debido a que no será compatible con la mayoría de las funcionalidades.

 

Modernizr también nos ofrece una funcionalidad con la cual podemos comprobar la compatibilidad de nuestro navegador, esto se realiza de la siguiente manera:

 

If (!Modernizr.borderradius) {

    alert(‘El navegador no cuenta con dicha característica’);

};

 

Como podemos ver es una herramienta de gran utilidad, en este caso disparamos un aviso de que no es compatible, pero esto puede ser cambiado por una funcionalidad que sustituya borderradius.

April 12, 2016

No Comments

ACTUALIZACION DE PS4 PERMITE JUGAR DESDE TU PC O MAC

Tras el informe que se dio en el pasado Tokyo Game Show donde se daba a conocer algunas actualizaciones importantes en la consola de Sony.


Una ventaja de esta es la posibilidad de poder jugar remotamente desde una pc a los juegos de PS4.

Para poder disfrutar de esta novedad debe tener conectado el DualShock 4 por USB en la computadora o MAC con Windows 8.1 o posterior y en Mac OS X 10.10 o posterior con la opción de tener una resolución de 360p a 720p con un Framerate de 30 a 60fps, aunque no llega a la resolución nativa de PS4 con 1080p es una buena función para cuando tenemos que salir de casa y hacer uso de nuestra consola a distancia

 

Otras de las funciones en esta actualización es la de:

Creación de Eventos: puedes almacenar fechas de eventos desde torneos o citas con nuestros amigos también podemos recordarles e nuestros amigos de eventos pendientes al enviárselos.

Notificación online de amigos: Como estaba en la consola PS3 podemos poner una notificación de amigos en específico que deseamos nos informe la consola de su actividad sin tener que estar recibiendo la notificación por cada usuario que se conecte al sistema.

Aparecer como desconectado: Este se sitúa en el menú de perfil y listo para aparecer invisible cuando estamos ocupados en algún juego

 

Aquí el video con más información sobre las actualizaciones:

https://youtu.be/kxzzb4hBAkk

March 23, 2016

No Comments

Stencyl – Plataforma para desarrollo de videojuegos

 

Actualmente la programación y los videojuegos se encuentran en el foco de las instituciones educativas y es que la innovación en este ámbito viene significando un futuro prometedor, tanto para los creadores, como para los consumidores, ya que representa uno de los negocios más exitosos a nivel mundial.

 

Stencyl es una plataforma para la creación de videojuegos 2D, que nos permite crear videojuegos desde Linux, OS X y Windows para varias plataformas, integrando una interfaz gráfica drag and drop mediante bloques con diferentes funcionalidades, lo que hace una solución aparte de innovadora, de gran facilidad para interactuar en ella.

 

 

No obstante Stencyl tiene la opción de extender la funcionalidad del motor a través de código, lo que lo hace ser una excelente opción tanto para principiantes como para desarrolladores.

A continuación se muestran los costos de las licencias de esta plataforma:

 

 

En donde podemos observar que la diferencia entre cada una de ellas es la capacidad de poder extender los sistemas en donde puede ser lanzada la aplicación creada.

 

Stencyl nos permite crear un juego ya sea desde cero o con platillas existentes que ponen a disposición los miembros y desarrolladores de la gran comunidad con la que cuentan además de kits con algunas rutinas, procedimientos, funciones, librerías e incluso juegos de ejemplo para poder familiarizarnos con la plataforma, sin necesidad de tener que programarlo.

 

A pesar de las grandes ventajas que tenemos con este Framework existen también ciertas desventajas que se listan a continuación.

 

Ventajas:

  • Muy fácil de aprender y de utilizar
  • Facilidad de desarrollo para diversas plataformas
  • Arquitectura intuitiva de desarrollo
  • Motor de física incluido
  • Gran cantidad de información y documentación, debido a la gran comunidad con la que cuenta.

     

Desventajas:

  • Solo sirve para juegos 2D
  • Es necesario pagar para hacer desarrollo en Android
  • Tiempos de compilación extensos

     

Como podemos ver a pesar de las desventajas es una plataforma altamente recomendable para personas que quieran ingresar en el ámbito de desarrollo de juegos y una gran oportunidad para realizar un negocio, sin necesidad de ser expertos y en donde el límite es la imaginación.

March 23, 2016

No Comments

CTE’S RECURSIVO EN SQL PARA PRINCIPIANTES

Este es el complemento del artículo anterior sobre los CTE en este conoceremos lo que son los Common Table Expressions Recursive. (expresión de la tabla común) donde los resultados del conjunto son temporales donde se puede hacer la referencia el ABC como son SELECT, UPDATE, DELETE, INSERT o también puede crear una vista dentro del CTE.

Una de las ventajas del CTE es que es una sentencia que puede ser no recursiva o recursiva lo cual muchas veces nos ayuda mucho al tratar con ciertos registros.

Estructura.

El CTE se define con una clausula WITH Antes de la consulta principal ya sea un SELECT o INSERT por ejemplo. La cláusula WITH puede incluir uno o más CTE’S

WITH <Common_Table_Expression>

<common_Table_Expression>

Cte_name [ (Column_name [….])]

AS(cte_query)

 

Creación de CTE recursivo.

Esto se refiere que no hace referencia a si misma dentro del CTE.

Para nuestro ejemplo usaremos una tabla que contiene la estructura recursiva simulando archivos dentro de archivos que se llama FolderFromUsers

 

 

En la tabla existe la columna Id que se genera al insertar un registro y la columna Parent que identifica a que carpeta padre pertenece.

 

Con esta consulta obtendremos la jerarquía de los folders según el usuario.

WITH
Folder_CTE
AS (

SELECT
Id, Parent, UserClient, Name
as
NombreCarpeta,
Year
as AnioCreacion,
Month
as MesCreacion

FROM
[MGCSDB_DEV].[dbo].[FolderFromUsers]

WHERE
Parent
IS
NOT
NULL
AND
UserClient
=
‘758d19d3-dd5b-46f4-8e66-c06fd280179e’

UNION
ALL

SELECT
e.Id, e.Parent, e.UserClient, e.Name
as
NombreCarpeta, e.Year
as
AnioCreacion, e.Month
as
MesCreacion

FROM
[MGCSDB_DEV].[dbo].[FolderFromUsers]
e

INNER
JOIN
Folder_CTE
ecte
ON
ecte.Id = e.Parent

)

SELECT
*

FROM
Folder_CTE

 

Donde en esta sección se identifica una unión de la misma tabla para realizar una recursividad donde el Id se une con el parent Id buscando la jerarquía que le corresponde.

SELECT
Id, Parent, UserClient, Name
as
NombreCarpeta,
Year
as AnioCreacion,
Month
as MesCreacion

FROM
[MGCSDB_DEV].[dbo].[FolderFromUsers]

WHERE
Parent
IS
NOT
NULL
AND
UserClient
=
‘758d19d3-dd5b-46f4-8e66-c06fd280179e’

UNION
ALL

SELECT
e.Id, e.Parent, e.UserClient, e.Name
as
NombreCarpeta, e.Year
as
AnioCreacion, e.Month
as
MesCreacion

FROM
[MGCSDB_DEV].[dbo].[FolderFromUsers]
e

INNER
JOIN
Folder_CTE
ecte
ON
ecte.Id = e.Parent

 

En la parte de abajo se manda a llamar la tabla recursiva que en este caso se declaro como Folder_CTE

)

SELECT
*

FROM
Folder_CTE

 

 

Esto es el resultado. Donde se puede apreciar que el registro 16 es el padre y de ahí se desprende el registro 17 que se repite dos veces con sus respectivos hijos.

 

March 1, 2016

No Comments

CTE’S NO RECURSIVO EN SQL PARA PRINCIPIANTES

En este pequeño tutorial crearemos un CTE (Common Table Expressions) en SQL paso a paso.

CTE al español significa expresión de la tabla común donde los resultados del conjunto son temporales donde se puede hacer la referencia el ABC como son SELECT, UPDATE, DELETE, INSERT o también puede crear una vista dentro del CTE.

Una de las ventajas del CTE es que es una sentencia que puede ser no recursiva o recursiva lo cual muchas veces nos ayuda mucho al tratar con ciertos registros.

Estructura.

El CTE se define con una clausula WITH Antes de la consulta principal ya sea un SELECT o INSERT por ejemplo. La cláusula WITH puede incluir uno o más CTE’S

WITH <Common_Table_Expression>

<common_Table_Expression>

Cte_name [ (Column_name [….])]

AS(cte_query)

 

Creación de CTE no recursivo.

Esto se refiere que no hace referencia a si misma dentro del CTE.

Para nuestro ejemplo usaremos la base de datos de NORTHWIND Orders.

 

Y de empleados esto es para saber cuánta es la carga que tiene el empleado de sus productos para eso se crea la siguiente sentencia.

 

 

Donde en esta sección

WITH


cteCargaTotales
(OrderId,empleado,peso)


AS


(


SELECT
OrderID
,
EmployeeID,
ROUND(SUM(Freight), 2)


FROM
Orders


GROUP
BY
OrderID,EmployeeID


)

 

Definimos la sentencia WITH y en seguida el nombre que tendrá nuestro CTE y las columnas que tendrá. En la parte de abajo se crea la sentencia de select con el total de la carga.

En esta sección

SELECT


sp.FirstName +
‘ ‘
+ sp.LastName
AS
FullName,


sp.City
AS
Location,


ts.peso

FROM
Employees
AS
sp


INNER
JOIN
cteCargaTotales
AS
ts


ON
sp.EmployeeID = ts.empleado

ORDER
BY
ts.peso
DESC

 

Se realiza un SELECT de todos los empleados donde tenemos su nombre la ciudad que reside y a continuación se realiza un INNER JOIN Con la parte de arriba que definimos como cteCargaTotales y se muestra la columna de peso.

 

Aquí el resultado final.

Como podemos ver esto es una forma sencilla de realizar un CTE no recursivo.

 

 

 

Happy coding ;=)

March 1, 2016

No Comments

¿Qué es OAuth2?

OAuth2 es un protocolo de autorización que permite a terceros, clientes o sistemas, acceder a contenidos propiedad de un usuario, alojados en un servidor de recursos sin que éstos tengan que manejar ni conocer las credenciales del usuario, es decir, usuario y contraseña.

 


 

A continuación se describen las acciones de cada uno:

 

  • Propietario de recursos. Es la entidad que nos da acceso a recursos protegidos.

     

  • Cliente. Es la aplicación que hace peticiones a recursos protegidos, con la autorización del usuario que es propietario de ellos.

     

  • Servidor de recursos. Es el servidor o sistema que nos da acceso a los recursos protegidos. Es capaz de aceptar y responder peticiones usando un Access Token, vía URL.

     

  • Servidor de autorización. Hay ocasiones en que el servidor de autenticación es el mismo que el de recursos, en el caso contrario, este servidor es capaz de generar los tokens de acceso para nuestra aplicación.

 

La ventaja de utilizar un mecanismo de seguridad como OAuth2 es que facilita la comunicación entre el usuario y una aplicación tercera y genera más confianza al no tener que ingresar sus credenciales en la misma y es más segura la interacción para el usuario.

 

Funcionamiento

 

El cliente debe estar dado de alta en un servidor de recursos al cual se quiere acceder, en este cuenta con un client_id y la comunicación es mediante URL’s de redirección para intercambios de token y accesos.

 

Existen 2 maneras de llevar a cabo el proceso de autorización y validación:

 

  • Authorization end-point: Este punto de acceso debe ser el encargado de validar clientes y propietarios de recursos, mediante una URL de redirección que dirige el flujo una vez que el propietario y el cliente han sido validados.

     

  • Token end-point: Este punto es el encargado de dar los tokens de acceso al servidor de recursos.


Cuando un cliente quiere acceder a recursos de un propietario, lo primero que necesita es solicitar permisos al propietario del recurso. Este paso se denomina Authorization Grant. Para que un servidor de recursos conceda un token de acceso, es imprescindible presentarle un Authorization Grant junto a las credenciales del cliente que intenta acceder a dichos datos.

Los token de acceso deben tener un periodo de expiración después del cual se consideran caducados y el proveedor debe rechazarlos, obligando al cliente a obtener un nuevo token de acceso, cada vez que este expire.

De esta manera se lleva a cabo el proceso de comunicación entre aplicaciones con el protocolo de autorización OAuth2.

Ejemplo:

 

 

 

February 8, 2016

No Comments

PRIMEROS PASOS EN MVC Y SINTAXIS RAZOR

Para entender un poco más de cómo se utiliza la sintaxis del motor de vistas Razor en MVC vamos a crear un nuevo proyecto para eso abrimos Visual Studio. Nuevo proyecto.

 

Seleccionamos ASP.NET MVC 4 Web Application donde seleccionamos la ubicación y el nombre de nuestro proyecto en este caso el mio es ProjMVC

 

En las plantillas seleccionamos una plantilla Vacía esta plantilla no contiene ningún controlador ni vista. Pero no te preocupes aquí crearemos una.

En cuanto al motor de vista seleccionamos el motor Razor. En cuanto a la opción de pruebas unitarias en esta ocasión la dejamos sin seleccionar.

 

Una vez creado el proyecto podemos ver que ya están cargadas las carpetas con la estructura MVC en este caso son:

  1. Vistas
  2. Modelos
  3. Controladores

 

Para comenzar vamos agregar un nuevo controlador para eso nos colocamos en la carpeta Controller click derecho Add –> Controller. En Controller Name insertamos el nombre que deseamos tener en nuestro controlador en mi caso es Index y por norma se sugiere dejar enseguida de el nombre Controller como es mi caso.

Las plantillas apoyan al desarrollador creando una estructura en la cual pueda agregar, modificar y eliminar información de alguna base de datos. En nuestro caso la dejamos en Controlador MVC Vacío.

 

Al momento de agregar podemos observar que ya se creó el controlador dentro de la carpeta controllers

 

Al dar doble click sobre nuestro controlador tendremos la siguiente vista.

Donde nos creó un método que regresa un ActionResult el cual regresa a nuestra vista. En este caso no tenemos ninguna vista creada aun. Pero para crearla es muy sencillo. Tan solo es dar click derecho sobre el nombre del método y seleccionar Add View (Agregar Vista).

 

Donde nos abrirá una ventana donde nos indica el nombre de la nueva vista en mi caso es Index. El motor de Vistas que en este tutorial es Razor. También tenemos la opción de crear una vista fuertemente tipada a un modelo en este caso no tenemos un modelo creado que se vaya a comunicar con el controlador y la vista así que la dejamos en blanco al igual tenemos la opción de agregar una master page. En este caso igualmente dejamos en blanco a continuación damos click en Agregar.

Podemos observar que ya se creó la vista dentro de la carpeta Views (Vistas) y tenemos la siguiente pantalla al dar doble click.

Esta parte es la que nos interesa en este artículo para conocer un poco de la sintaxis de Razor.

En la parte superior podemos observar que se encuentra una sección declarada con un @{}

Dentro de esa sección nosotros podemos definir variables como comúnmente las manejábamos en el servidor con formularios en asp.net

En este caso declaremos dos inputs y un botón como en la siguiente imagen.

 

Estos input se van a comunicar con razor, ¿de qué manera? bueno como podemos observar en la parte inferior esta una variable llamada @totalMessage Esta variable es declarada en la sección antes mencionada del arroba y corchetes como veremos a continuación.


Dentro de esta sección podemos insertar la lógica como si fuera JavaScript teniendo la oportunidad de comunicarnos con los elementos que están declarados en nuestra página como veremos a continuación en donde obtendremos el valor de los dos textbox y por medio de un postback realizaremos una suma.


Como podemos apreciar con Request y el Id de nuestros controles podemos tener acceso a los mismos con la ventaja de también tener el intellinses para poderte ayudar a completar el código.

En este caso lo que realiza el código anterior es crear la variable de salida: totalMessage. Así como la la variable que alojara el resultado: total. Y dentro de las variables num1 y num2 obtenemos lo que el usuario ingrese en la página y realizamos el total indicándole que tanto num1 como num2 son enteros y guardando el resultado en totalMessage para mostrarlo en la página en esta sección


 

Debemos realizar un paso más antes de poder probar nuestros primeros pasos en MVC el cual es indicar la ruta la cual abrirá nuestra primera página para eso en el Explorado de soluciones buscamos la carpeta App_Start y dentro damos doble click sobre la clase RouteConfig.cs.


 

Este nos abrirá la siguiente página.


En donde nos indica que el controlador tiene por nombre Index que es el nombre que le indicamos al inicio al controlados que quedo como IndexController pero en este caso solo se utiliza index y la acción es el nombre del método que ejecutaremos en este caso el nombre del método es Index. En la parte de id se pueden enviar parámetros pero en esta ocasión no los usaremos.

Ahora si podemos probar nuestros primeros pasos en MVC al dar click en Ejecutar.


Resultado:

 


 

Happy Coding ;=)

Eduardo Sánchez Almazán

 

 


 

February 8, 2016

No Comments

Detectar campo faltante cuando Model State IsValid es false

 

Cuando se desarrolla en MVC tenemos el Modelo, Vista y el Controlador este último se encarga de toda lógica que se envía directo a la vista.

En algunas ocasiones necesitamos actualizar ciertos campos dentro de alguna tabla de nuestra base de datos y nos encontramos con ciertos problemas en los cuales se ve involucrado el ModelState

Como lo veremos en el siguiente ejemplo:

Aquí tenemos el Model del ejemplo:

 

Donde se puede observar que la columna FileName es Requerida

public class Document

{

public int Id { get; set; }

 

[Required(ErrorMessageResourceType = typeof(DocumentResource),

ErrorMessageResourceName = “FileNameError”)]

[Display(Name = “FileName”, ResourceType = typeof(DocumentResource))]

public string FileName { get; set; }

 

public DateTime DateCreated { get; set; }

 

public string CreatedBy { get; set; }

 

}

 

Aqui tenemos el Controller.

public ActionResult Create([Bind(Include = “FileName,DateCreated,CreatedBy”)] Document document)

{

if (ModelState.IsValid)

{

document.DateCreated = DateTime.Now;

document.CreatedBy = “juan perez”;

 

db.Documents.Add(document);

db.SaveChanges();

return RedirectToAction(“Index”);

}

 

return View(document);

}

En este método tenemos que recibe los campos de Id, Name, UserId, DateCreated y CreatedBy

El problema viene aquí en la vista cuando consume el controller de Create. Y está esperando recibir todas las columnas que sean requeridas y si hace falta alguna y el ModelState será False (Para este ejemplo no se está enviando la columna FileName que es requerida)

 

Si deseamos saber el por qué el Model State es False tan solo debemos colocar la siguiente consulta y nos detallara el problema por el cual el ModelState es false.

     var errors = ModelState.Where(x => x.Value.Errors.Count > 0)

              .Select(x => new { x.Key, x.Value.Errors })

              .ToArray();

 

Aquí podemos ver con la consulta el campo que ocasiona la excepción por la cual el ModelState es False

 

Y aquí el detalle con el campo.