Archive for 'Desarrollo'

Hace unos días estaba atascado porque no podía lograr validar unos elementos en un formulario que se encontraba desplegado con un dialog box de JQuery. Buscando en la sabia internet encontré la manera sencilla de lograrlo, en síntesis el problema esta en que cuando se carga una vista parcial con Ajax o cualquier otra solicitud XHR el validador no puede hacer nada ya que ha sido cargado por lo tanto estos elementos nuevos necesitan ser validados ya que no estaban cuando se cargo la pagina. Para lograr esto comparto con ustedes un pequeño fragmento de código (el cual debe ser cargado en el partial view):

 1: $(function(){
 2: $.validator.unobtrusive.parse("#Elemento");
 3: });

 

Espero que les sirva de algo, cualquier cosa me pueden preguntar en los comentarios.

En la web hay muchos ejemplos de como hacer esto, pero leyéndome la documentación que viene con el EMDK 2.5 (lo pueden además conseguir en la pagina de Motorola), he encontrado la manera de leer los datos de un código de barra utilizando un equipo Symbol formalmente Motorola, en este caso el dispositivo que utilizo es un MC55A. El modo en que lanzas el laser se llama TriggerMode es una enumeración, posee tres elementos: ONCE, ALWAYS y MANUAL, por si prefieres que el laser se encienda presionando el botón para esto o la pistola. Sin mas preámbulos dejo acá la pieza de código en cuestión:

    Protected Sub DoScan()
       
Dim dev As Device = Devices.SupportedDevices(0)
       
Dim bcode As New Barcode2(dev)
       
Try
           
Cursor.Current = Cursors.WaitCursor

            bcode.Config.Reader.ReaderSpecific.LaserSpecific.AimDuration = 500
           
‘Determina el modo en que el laser es encendido, ONCE es una sola vez,
            ‘ALWAYS es para cada scan pendiente y MANUAL como su nombre lo indica.
           
bcode.Config.TriggerMode = TRIGGERMODES.SOFT_ONCE
            bcode.Config.Scanner.ActivityLedTime
= 500
           
bcode.Enable()

            ‘El valor a esperar es en milisegundos en este caso significa que el laser
            ‘va a esperar 10 segundos o hasta que lea algo.
           
Dim sdata As ScanData = bcode.ScanWait(10000)
           
If sdata.Result = Results.SUCCESS Then
                Me
.TextBox1.Text = sdata.Text
           
Else
                MsgBox
("No se detectó ningún código", MsgBoxStyle.Information, "Aplicación Scanner")
           
End If
           
bcode.Disable()
            bcode.Dispose()
            Cursor.Current
= Cursors.Default
       
Catch ex As Exception
           
Cursor.Current = Cursors.Default
            bcode.Disable()
            bcode.Dispose()
           
MsgBox(ex.Message, MsgBoxStyle.Exclamation, "Aplicación Scanner")
       
End Try
    End Sub

Pues de esa manera espero que este pedazo de código les ayude si lo necesitan.

Luego de buscar y buscar una buena librería de acceso a datos para SQLite (al menos que no me diera muchas trabas) para incorporarla dentro de mi proyecto .NET entendí que tendría que tomar el código fuente de alguna de las que existían y cambiarle lo que no me gustaba:

1ro. Intente utilizar la librería llamada System.Data.SQLite, muy buena, eficiente, segura, pero es un tormento a la hora de implementación final ya que es muy estricta con la aplicación que la referencia ya que incorpora una librería COM que se llama SQLite.Interop.DLL, ¿Cual es el problema con esto? Que sencillamente para utilizar una librería COM hoy en día hay que dar muchas vueltas y asegurar mucho el código cosa que me tomaría mas tiempo del estimado.

2do. Intente utilizar la librería Community.CsharpSQLite pero esta librería estaba disponible para el framework 3.5, pensé que cambiando el trarget framework podría resolverlo pero no fue así de fácil, tuve que agregar varios cambios en los valores de compilación y adaptar varias líneas del código, los cambios mas relevantes son:

  • Firmar los ensamblados y darle un StrongName
  • Agregar el método AddWithValue en el la colección de parámetros de la clase SQLiteCommand

En mi código tuve que tomar en cuenta los siguientes asuntos:

  • La librería no permite encoding UTF-16Le (Little Endian)
  • EL connection string de la librería es diferente (Uri=file:Ubicación del archivo, Version=3)
  • El nombre de los parámetros deben ser totalmente idénticos a los parámetros de la sentencia SQL, con esto me refiero a que cada minúscula y mayúscula debe estar exactamente igual, sino fallará la ejecución.
  • En mi librería de acceso a datos que utiliza estos objetos tuve que ponerle <SecurityTreatAsSafe()> para que no me lanzara una excepción de seguridad.

Obviamente estos puntos en cuentas se pueden arreglar en la librería y adaptarlos un poco mas a las necesidades pero no considere que sean de tropiezos para mi en tal ocasión por lo que decidí adaptarme a eso simplemente.

Por si les interesa dejo acá al final los enlaces de los fuentes en cuestión aptos para el framework 4.0 tomando en cuenta que los derechos de autor pertenecen a sus desarrolladores los cuales mantienen el proyecto en esta URL: http://code.google.com/p/csharp-sqlite/ y sabiendo que yo solo adapte este código a mis necesidades particulares por lo que no me hago responsable de algún mal resultado o comportamiento que puedan afectar particularmente tu equipo.

Descargar Archivo (Password del archivo: walalm.com)

Uniform, es un pequeño complemento o librería de JavaScript que lo que hace sencillamente es poner los elementos HTML (inputs) más bonitos y agradables a la vista pero sin que pierdan su funcionalidad.

Pues sucede que el otro día necesite utilizar esta librería que ejercía un cambio sobre controles que se encontraban dentro de un UpdatePanel, oh si, el UpdatePanel es un tormento cuando hay que lidiar con tareas del lado del cliente efectuadas con JavaScript; en este caso lo sucedido es que al hacer un postback asincrónico se perdía la belleza de los controles, ah caramba, luego de mucho intentar hacer que la rueda se moviera casi me estaba rompiendo la cabeza cuando encontré la forma de resolverlo; sencillamente era atar el evento “EndRequest” propio del UpdatePanel (Del lado cliente)  al método de JavaScript de uniform para que volviera aplicarle la belleza a los controles. Aquí pongo el código en cuestión:

$(document).ready(function () {

// Se ejecuta el método de manera inicial
$("#upcontainer :input").uniform();

// Se ata el evento endRequest con el metodo de uniform
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () { $("#upcontainer :input").uniform(); });

});

Espero que esto les resuelva la vida de la misma manera que a mi me ayudó.