jueves, 27 de abril de 2017

107. Obtener el nombre de un archivo de una URL

Muchas veces debemos obtener el nombre de un archivo de una URL, esto para poder trabajar con aplicaciones que se encuentran en la nube o simplemente en el ámbito de internet.

Bueno, el truco es muy sencillo.

1. Asignamos la dirección a un objeto tipo URI.

Uri uri = new Uri("https://midireccion.blob.core.windows.net/micontenedor/Comprobante_9e94ee40-b2e0-4900-afcc-7dc1e101a3f7.xml?sv=20rbCkWqTFp0gaGlpCwwXwI4DV3T46");

2. Obtenemos la parte de la dirección correspondiente a LocalPath, esto nos dará la siguiente dirección:

/micontenedor/Comprobante_9e94ee40-b2e0-4900-afcc-7dc1e101a3f7.xml

3. Obtenemos el nombre del archivo por medio de GetFileName

Nuestro código se convierte en algo como esto:

            Uri uri = new Uri("https://midireccion.blob.core.windows.net/micontenedor/Comprobante_9e94ee40-b2e0-4900-afcc-7dc1e101a3f7.xml?sv=20rbCkWqTFp0gaGlpCwwXwI4DV3T46");

            string filename = System.IO.Path.GetFileName(uri.LocalPath);

Felices Líneas

lunes, 17 de abril de 2017

106. Hora local por país

Estamos en una época en la que las redes se globalizan cada día mas, y poco a poco perdemos mas el control del sitio en donde se encuentra una aplicación alojada, hace pocos años hablábamos de que la aplicación se alojaba dentro de un servidor que se encontraba en la misma empresa, poco después hablábamos de servidores que se encontraban en centros de datos en la misma región geográfica, pero hoy estos servidores se encuentran en cualquier parte del mundo.

Y el tiempo es uno de los puntos que debemos considerar, ya que la hora cambia de país a país, de una región geográfica a otra, es conveniente manejar siempre la hora UTC (Coodinated Universal Time), la hora UTC, es un estándar internacional que se obtiene partiendo del tiempo atomico internacional, y se considera la sucesora de la hora GTM (basada en el meridiano de Greenwish), la hora UTC es la hora que se emplea en internet, y para efectos de programación, es la hora universal.

Al programar en C# la hora UTC se obtiene invocando la siguiente función:

DateTime.Now.ToUniversalTime()

Sin embardo el mostrar hora UTC, o el comparar la hora UTC con la hora local puede traer algunas complicaciones, sobre todo para aquellas personas no familiarizadas con esto.

Esto además puede traer problemas en la información ya que la hora UTC no es la hora local.

Para poder manejar en la nube o en algún servidor la hora local, es necesario indicar al proceso la hora de la región que vamos a utilizar.

Para ello usaremos la siguiente función:

DateTime dt = TimeZoneInfo.ConvertTimeFromUtc(DateTime.Now.ToUniversalTime(),TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time (Mexico)"));

¿Qué es lo que hace?

Bueno le estamos pidiendo al servidor la hora del mismo en formato UTC, y este lo estamos transformando a la hora del país con el que deseamos trabajar, en este ejemplo estamos usando la hora central del Mexico, con ello, no importa en que país este el servidor, nos aseguramos de trabajar con la hora correcta para la región en la que se ejecuta nuestra aplicación.

Felices lineas

miércoles, 5 de abril de 2017

105. Cargar nodos de XML en renglones separados

Un query muy útil para casos en los que recibimos información en XML pero nos interesan los nodos, es el siguiente:

CREATE TABLE tablaXML
(
Id INT IDENTITY PRIMARY KEY,
Datos XML,
FechaInsercion DATETIME
)

DECLARE @x xml

SELECT @x = BulkColumn FROM (
SELECT CONVERT(XML, BulkColumn) AS BulkColumn
FROM OPENROWSET(BULK 'C:\0\millones\0000000002.xml', SINGLE_BLOB) AS x) AS y

INSERT INTO tablaXML(Datos, FechaInsercion)
SELECT T.c.query('.') AS result,GETDATE() 
FROM   @x.nodes('/comprobantes/*') T(c) 
GO 

Que debo sustituir, hay que sustituir la ruta de donde se tomara el archivo, por la ruta de su archivo, y además el nombre del nodo, en mi caso fue comprobantes, por la ruta de XML de su nodo.

Que es lo que hace, bueno en primer lugar carga el XML de un archivo a una variable de tipo XML que podemos manipular, después tomando esa variable buscamos el nodo en particular con el que deseamos separar el XML, esto nos permite obtenerlo por renglones e insertarlo en una base de datos.

Esta es una forma rápida de separar XML de gran tamaño

Felices líneas