Bloquear llamadas de números de teléfono sin instalar aplicación en Android

by Marc Cortada 14/07/2017

En Android se pueden bloquear números de teléfono sin instalar ninguna aplicación. Siguiendo los sencillos pasos descritos en este post conservarás la lista negra de teléfonos incluso si cambias de teléfono móvil siempre que sea otro Android y lo sincronices con la misma cuenta de gmail. Todas las llamadas que provengan de los números que tu elijas serán bloqueadas e irán directamente al buzón de voz.

El sistema es sencillo:

  1. Crear un nuevo contacto llamado (por ejemplo) "No coger". Si lo creas en la lista de contactos de gmail este contacto se sincronizará el día que cambies de dispositivo si lo configuras con la misma cuenta de gmail.
  2. En las opciones de contacto (haciendo clic en los los tres puntos de arriba a la derecha) marcas la opción "Al buzón de voz".
De esta manera, todos los teléfonos que estén introducidos en este contacto se enviarán al buzón de voz y la llamada no entrará. Los contactos de Android pueden contener muchos números de teléfono, por lo tanto con un contacto configurado de esta manera como lista negra es suficiente.
 
Una vez tienes el contacto creado solo hace falta añadir los números cada vez que te llame uno desconocido. Si quieres, antes de añadirlo, puedes verificar si se trata de un número de spam telefónico en las webs que permiten hacer esta consulta.
 
Para añadir un teléfono a este contacto que ya te ha dejado una perdida es sencillo.
  1. Hacer clic en el icono del teléfono.
  2. Ir al histórico de llamadas (un reloj que aparece normalmente abajo a la izquierda).
  3. Clic en el teléfono que quieres añadir.
  4. Clic en "Añadir a contactos".
  5. En el cuadro de búsqueda buscas el contacto existente "No coger" (no hacer clic en crear nuevo contacto).
  6. Clic en el contacto "No coger" y el número se añadirá de manera automática en este contacto.
  7. Guardar el contacto pulsando el botón de "listo" (normalmente arriba a la izquierda).
¡Y ya está! Este número ya no volverá a sonar más en tu teléfono y si miras de nuevo en el historial ya no aparecerá el número, aparecerá el nombre del contacto "No coger".
 
También puedes añadir de manera manual tantos teléfonos como quieras editando el contacto. No importa qué tipo de teléfono pongas (móvil, casa, trabajo...) y los tipos de teléfono pueden estar repetidos en un mismo contacto. 
 
Este sistema se basa en la idea de que cada contacto puede tener muchos números de teléfono y los contactos pueden bloquearse para que las llamadas vayan directamente al buzón. Con un uso adecuado de estas dos características del sistema Android no hace falta ninguna aplicación para bloquear teléfonos, ni para tener una lista negra e incluso tenerla sincronizada con otros dispositivos.
 
Finalmente, no conozco el límite de números de teléfono que puede tener un contacto, pero debe ser un número muy alto porque tengo muchos y no he llegado. En caso de llegar al límite, siempre se podría crear otro contacto llamado (por ejemplo) "No coger 2" siguiendo los mismos pasos que hemos seguido al principio, e ir añadiendo más números al nuevo hasta que también se llene.
 
Espero que este post sea útil y así evitar llamadas no deseadas de spam telefónico.

Tags:

Categorías: Android | How to | Trucos

Touchpad synaptics no responde al tocar con dos dedos (clic derecho)

by Marc Cortada 28/06/2014

Recientemente he actualizado a Windows 8.1 y todo ha ido bien excepto el panel táctil de synaptics: al hacer clic con los dos dedos no hacía el clic derecho.

Lo he resuelto haciendo los siguientes pasos: Más...

Tags:

Categorías: How to

Actualizar valores usando un cursor con T-SQL

by Marc Cortada 19/06/2014

El siguiente ejemplo muestra cómo actualizar valores directamente utilizando un cursor en SQL Server. Lo que hace es sencillo: dada una tabla llamada Tabla1, actualiza el valor de la columna llamada columna1 solo de las filas que sean pares. La idea de este ejemplo podría ser útil para modificar filas de una tabla que tiene repetidos (por decir algo).

Si ya estás familiarizado con T-SQL, te interesan especialmente las líneas 6 y la 23 del ejemplo. Son las que contienen la información clave.

Si quieres copiar y pegar correctamente el código comienza seleccionando el texto del código fuente sin el número de línea.

DECLARE Test CURSOR 
     FOR SELECT
		[columna1]
       ,[columna2]
  FROM [dbo].[Tabla1] 
     FOR UPDATE of columna1;

Declare @col1 as varchar;
Declare @col2 as varchar;
declare @colTest as int;

-- Contaremos en base 1, no en base 0
set @coltest = 1;

OPEN Test

FETCH NEXT FROM Test 
INTO @col1, @col2

WHILE @@FETCH_STATUS = 0
BEGIN
	if (@coltest % 2) = 0
	update [Tabla1] set [columna1] = 'Hola' where current of Test

	set @coltest = @coltest + 1;
FETCH NEXT FROM Test 
    INTO @col1, @col2
END 
CLOSE Test;
DEALLOCATE Test;

Tags:

Categorías: SQLServer | How to | Programación y desarrollo

Sumar y agrupar usando solamente el operador lambda

by Marc Cortada 10/06/2014

El siguiente código es un ejemplo que:

  • Agrupa valores de una lista de objetos utilizando varios campos clave para la agrupación.
  • Suma otros campos de esa misma lista de objetos en base a la agrupación anterior.
  • Solo utiliza el operador Lambda en C#.

Nota: está en inglés porque lo he utilizado en otros sitios.

Más...

Tags:

Categorías: C# | How to | Linq | Programación y desarrollo

Activar Agent XPs

by Marc Cortada 03/12/2013

Cuando la propiedad Agent XPs no está habilitada, el nodo del Agente de SQL Server no está disponible en el explorador de objetos de SQL Management Studio. En esta entrada se documentan dos formas de activar el Agent XPs: Una, gráficamente desde SQL Management Studio (esta forma está menos documentada por Internet). Y la otra, mediante un script.

Más...

Tags:

Categorías: BBDD | SQLServer | How to

Cómo conectar Android como dispositivo de almacenamiento masivo

by Marc Cortada 14/07/2013

Una buena forma de acceder al smartphone y hacer una copia de seguridad de los archivos, es conectarlo a un PC con el cable USB y trabajar con el smartphone Android como dispositivo de almacenamiento masivo. Una vez conectado nos aparecerán dos iconos de dispositivos de almacenamiento masivo: uno para la tarjeta interna del teléfono y otro para la tarjeta adicional que tengamos introducida (normalmente de mayor capacidad).

Una vez accedamos a las nuevas unidades de nuestro PC que podremos ver desde Mi PC o en inicio > equipo, solo tendremos que copiar y pegar los archivos que nos interesen desde estas unidades hacia una carpeta que esté en una unidad del ordenador (o otra unidad externa como un disco o memoria USB si también está conectada al PC). Y a partir de aquí tendremos los archivos que nos interesan (vídeos, fotos, música, etc.) copiados en otro sitio fuera de nuestro teléfono.

En caso de tener un Samsung, no es necesario instalar Kies y probablemente para otras marcas tampoco será necesario el programa que nos proporcione el fabricante, ya que las opciones que se tienen que ajustar son de sistema operativo Android. Remarcar que esto último no tiene por qué ser siempre así, algún fabricante o marca puede haber "capado" estas opciones haciendo necesario instalar un programa en el ordenador.

Después de conectar el teléfono al ordenador con el cable USB, puede que no salgan las unidades externas y que Android no aparezca como un dispositivo de almacenamiento masivo a la primera. Esto puede solucionarse configurando una opción que a veces no viene establecida de fábrica para que Windows detecte correctamente el smartphone como unidad externa. Aquí vienen los pasos a seguir:

Cómo conectar un smartphone Android al PC: Más...

Tags:

Categorías: Android | How to | Trucos | Utilidades

Configurar SQL Server como servidor de estado de sesión de ASP.NET

by Marc Cortada 05/07/2013

Si después de intentar configurar el servidor de estado de sesión de SQL server nos encontramos con un error de inicio de sesión que nos indica que no se ha podido conectar con la base de datos (o algún otro tipo de error al intentar conectar), puede deberse a que no se han seguido todos los pasos necesarios para configurar SQL Server como servidor de sesiones. En algunos documentos que hay en la red no se especifican todos los pasos que hay que seguir indicando solamente una parte de ellos. En esta entrada os comento todos los pasos que he tenido que seguir para que funcione correctamente.

Básicamente, hay que tener en cuenta dos cosas: Una, que ejecutar el programa aspnet_regsql.exe no es suficiente para tener configurado SQL Server como servidor de inicio de sesión, la base de datos que crea es insuficiente porque hay que tener dos (aspnetdb y ASPState si respetamos los nombres por defecto). Después de ejecutar este programa/asistente, se tiene que ejecutar manualmente un script que creará la otra base de datos. Este script es: InstallSqlState.sql y puede estar ubicado en la carpeta C:\Windows\Microsoft.NET\Framework\v4.0.30319\. La carpeta variará en función de la instalación y/o la versión de .Net que tengamos instalada. La segunda cosa que hay que tener en cuenta es que este script tiene un comentario en la cabecera que dice que es recomendable usar el aspnet_regsql.exe en lugar de lanzarlo manualmente. Pues no, debe lanzarse manualmente después de ejecutar el programa/asistente porque este no ejecutará el script.

En resumen, los pasos completos a seguir para instalar un servidor SQL Server como servidor de estado de sesión son: Más...

Tags:

Categorías: ASP.NET | SQLServer

Cómo recorrer todos los controles de una página aspx

by Marc Cortada 19/05/2013

Queremos recorrer todos los controles de una página para establecer ciertas propiedades a un determinado valor. Sin embargo, solamente queremos establecer estos valores a controles de un determinado tipo (por ejemplo, las etiquetas Label de la página). La función FindControl del elemento Page nos servirá para encontrar un elemento a partir de su ID, pero no servirá para recorrer varios elementos. Por otra parte, esta función a veces no encuentra los controles dependiendo de cómo estén ubicados dentro de una página. Como se verá más adelante, tampoco servirá la propiedad Controls del objeto Page para recorrer todos los elementos contenidos en una página.

Como añadido a esta entrada y para quién trabaje con forms en lugar de WebForms, la estructura de almacenamiento de los controles es exactamente la misma. Los controles no cuelgan de Form.Controls, si no que cuelgan de la propiedad Controls del contenedor donde están ubicados. Así que lo único que se tendrá que hacer es adaptar este recorrido a los tipos System.Windows.Forms, en lugar de los System.Web.UI(…). Por lo tanto, la idea de esta entrada es válida tanto para Windows Forms como para WebForms, aunque se tendrán que retocar los tipos usados en el código de ejemplo.

Por ejemplo, vamos a establecer por programación los textos de todas las etiquetas (Label) que hay dentro de una página desde una fuente externa (una BD, un XML…). Esta situación puede darse al desarrollar una aplicación multi-idioma, donde el texto de una determinada etiqueta se guarda en distintos idiomas en un recurso externo al código y al archivo de etiquetas (aspx).

Si intentamos recorrer todos los elementos de la propiedad Controls disponible en Page, solamente encontraremos aquellos controles ubicados directamente en la página. Todas aquellas etiquetas que estén incluidas en otros elementos, como un Panel o cualquier otro contenedor de elementos, no las tendremos accesibles desde la propiedad Controls en Page.

Para ello hay que hacer un recorrido de todos los elementos que están en la propiedad Controls de cada control de la página. En nuestro caso, para cada elemento que encontremos, comprobaremos si se trata de un control Label. Si es así, llamaremos a la función que sea necesaria para rellenar el texto y seguiremos recorriendo los controles. Si no es una Label, no haremos nada y seguiremos recorriendo los demás controles.

Si estamos utilizando una máster page y también queremos recorrer los elementos incluídos en ésta, se tendrá que retocar el código para comenzar el recorrido con los controles que hay en la MasterPage (propiedad Controls de MasterPage), en lugar de comenzar el recorrido con los controles que hay en la propiedad Controls de Page tal y como se muestra en el ejemplo. Sin embargo, la idea del recorrido es la misma.

El código que os muestro a continuación recorre todos los controles de una página, evalúa si se trata de una Label y establece el valor de la propiedad Text (está en inglés por un tema de internacionalización). Más...

Tags:

Categorías: ASP.NET | C# | How to | Programación y desarrollo | Windows Forms

Una etiqueta Label no es accesible dentro de un UpdateProgress

by Marc Cortada 20/01/2013

Si queremos acceder a una etiqueta contenida dentro de un UpdateProgress por programación, el compilador puede retornar un error indicando que no se encuentra el símbolo. La etiqueta está incluida correctamente dentro de los elementos de la página aspx o el control ascx "UpdateProgress > ProgressTemplate" tal y como se muestra en el ejemplo:

<asp:UpdateProgress ID="UpdateProgress1" runat="server">
<ProgressTemplate>
<asp:Label ID="etiquetaTextoEspere" runat="server"></asp:Label>
</ProgressTemplate>
</asp:UpdateProgress>

Sin embargo, al intentar acceder a la etiqueta etiquetaTextoEspere por programación con una línea de código como se muestra a continuación:

this.etiquetaTextoEspere.Text = "Hola";

El compilador retorna el error:

Error 37 (…) no contiene una definición de 'etiquetaTextoEspere' ni se encontró ningún método de extensión 'etiquetaTextoEspere' que acepte un primer argumento de tipo (…) (¿falta una directiva de uso o una referencia de ensamblado?) (…) Más...

Tags:

Categorías: ASP.NET | C# | Programación y desarrollo

Borrar histórico de conexiones de terminal server

by Marc Cortada 16/01/2013

La lista desplegable de terminal server recuerda las últimas direcciones IP o nombres de servidor. Por seguridad o cualquier otro motivo puede no interesarnos que esté disponible la lista de las últimas conexiones realizadas.

Para borrar la lista es recomendable cerrar todas las sesiones abiertas de terminal e ir al registro de Windows. Botón inicio y teclear regedit en el campo búsqueda o en ejecutar. En regedit buscar la clave y borrar los valores de registro: HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default. El valor predeterminado no se puede borrar pero lo podemos establecer en blanco.

Después abrimos terminal server y veremos cómo la lista está en blanco, pero puede aparecer el nombre/IP de la última conexión. Esta conexión desaparecerá cuando iniciemos otra conexión a otro servidor y cerremos la sesión. En ese momento aparecerá solamente el valor del último servidor.

Tags:

Categorías: How to | Trucos | Utilidades

Condición OR en filtro avanzado de AX

by Marc Cortada 04/01/2013

Si en la pantalla de un filtro avanzado de AX ponemos varias entradas con distintos campos y valores, estableceremos un filtro que tendrá en cuenta estos criterios con la condición "Y" ("AND"). Pero ¿qué pasa si lo que queremos es establecer el filtro de distintos campos y valores con la condición "O" ("OR")? Por ejemplo: filtrar por clientes que son de un grupo determinado o ("OR") que tienen una determinada divisa. ¿Cómo se puede poner una OR en un filtro de AX?Más...

Tags:

Categorías: Axapta | How to | Trucos

Error al cargar Excel desde DTS, dice que hay valores nulos cuando no los hay

by Marc Cortada 07/12/2012

Al ejecutar uno de los pasos de un paquete DTS de SQL Server 2000 me da el error:

Texto del error: "El número de filas con errores sobrepasa el máximo especificado. Error de conversión 'DTSTransformation…' de TransformCopy: el destino no admite valores NULL en el par de columnas 1 (columna de origen 'ID_...' (DBTYPE_R8), columna de destino 'ID_...' (DBTYPE_I4))."

El paso de la DTS que da el error consiste en una carga de datos de una hoja Excel a una tabla de SQL Server. Nos dice que hay una fila que contiene un valor nulo en un campo cuya tabla de destino no admite valores nulos.

Sin embargo al repasar la hoja de cálculo veo que todos los valores de ese campo (o columna) están informados. Por lo tanto, aparentemente este error no tiene razón de ser. ¿Qué puede estar pasando? Pues pueden pasar dos cosas:

  1. Hay filas al final del rango de datos que no están completamente eliminadas (este es el más fácil de resolver, aunque a veces cuesta de ver).
  2. Hay datos cuyo tipo no es consistente por cualquiera de las siguientes posibilidades:
    1. La columna de destino de SQL Server es del tipo número y en el Excel el número está guardado como texto.
    2. Al revés, SQL Server espera un texto y tenemos un número en Excel.
    3. Sea como sea la columna de destino, en Excel tenemos algunos datos como texto y otros como número (este es el caso del ejemplo).

¡Solamente que nos pase una de estas cosas ya es posible que tengamos este error!

Para solucionar el primer caso (1):Más...

Tags:

Categorías: BBDD | SQLServer | Excel | Solución a errores

Editar Access con opciones de edición bloqueadas

by Marc Cortada 21/11/2012

Cuando un Access se deja listo para enviar a los usuarios finales, normalmente se crea un formulario de inicio y se bloquean las opciones de edición y diseño de formularios, tablas, vistas, etc. De modo que cuando se abre solamente aparece el formulario, y solamente se pueden llevar a cabo las funcionalidades implementadas en ese formulario. No tendremos las opciones de edición disponibles, así que para volver a editar cualquier objeto (formulario, tabla, vista...) tendremos que entrar en modo edición.

Para abrirlo en "modo edición" basta con hacer doble clic en el icono pulsado la tecla mayúsculas simultáneamente. O bien, seleccionar el archivo Access, pulsar intro + mayúsculas.

Si aparece alguna advertencia de seguridad que al aceptarla se cierra y vuelve a abrir el archivo, tendremos que aceptar la alerta manteniendo pulsado el botón mayúsculas hasta que el archivo se haya abierto de nuevo.

Tags:

Categorías: Access | BBDD | How to | Programación y desarrollo | Trucos

Actualizando versión de .NET framework con SourceSafe y VS 2010

by Marc Cortada 27/09/2012

Actualmente estoy actualizando algunas aplicaciones web que corrían en un Windows Server 2003 con NET 2.0 + extensiones AJAX, hacia un servidor 2008 R2 IIS 7 y .NET 4.0.

Lo primero que me encontré es lo que explico en esta entrada ¿dónde está la versión .NET 3.5? Aclarada esta duda, me dispongo a obtener la versión que está en SourceSafe etiquetada como la versión en explotación. Una vez disponibles los archivos de esta versión, la idea es abrirla con Visual Studio para que añada las entradas necesarias en el archivo web.config. Con esto pretendo conseguir que funcione en el .NET framework 3.5 aunque esté marcada como una 2.0 en IIS (ver esta entrada).

Muchos archivos de código ya han evolucionado a otras versiones que todavía están en desarrollo, versiones que todavía no me interesa migrar. Eso es: me interesa abrir, actualizar, compilar y poner en marcha el proyecto con los archivos en la última versión puesta en producción, no en la última versión que es de desarrollo. Naturalmente estos cambios también habrá que incorporarlos posteriormente a la versión actualmente en desarrollo, pero eso es otro tema.

Mi sorpresa es que al intentar ejecutar la versión me encuentro con cambios que no estaban pasados a producción, si no que eran de versiones posteriores que todavía están en desarrollo. Después de volver a repetir la operación "obtener" marcando claramente la etiqueta de la versión en explotación, comprobando que los archivos obtenidos son los de la versión de producción, y viendo que todo está bien, vuelvo a abrir el proyecto con Visual Studio 2010. Sin embargo, me vuelvo a encontrar con los archivos en última versión, no en la etiquetada que he obtenido del SourceSafe. Comienzo a pensar que la migración de versión da más problemas de los que me esperaba, normalmente este proceso es automático y sin demasiadas complicaciones.

¿Cuál es la sorpresa? Visual Studio al convertir el proyecto (no sé si antes o después) hace un obtener última versión al SourceSafe. Se explica rápido pero darme cuenta me ha costado un ratillo de pruebas e investigar qué estaba pasando. Bueno, quien sea un poco experimentado en temas de desarrollo ya sabe lo que supone dar con la causa de estas sorpresas.

Pues nada, que lo sepáis. Si actualizáis versión de .NET con VS y un SourceSafe (no sé si pasa lo mismo con otras herramientas de control de código fuente) VisualStudio obtiene la última versión. Así que después de hacer la migración, hay que retroceder a la versión que se quiere migrar.

Sabiendo esto, el proceso de actualización del proyecto funciona sin problemas, VisualStudio se encarga de todo como era de esperar.

Espero que os sea útil.

Tags:

Categorías: ASP.NET | Programación y desarrollo | Visual Studio 2010

Utilizar Word para editar entradas en BlogEngine.NET

by Marc Cortada 17/09/2012

Se puede utilizar Word con casi todas sus características para crear o editar entradas en BlogEngine.NET. Si las entradas contienen imágenes Word también se encargará de subirlas al servidor. Solamente tendremos que configurar los siguientes parámetros (son de nivel usuario, no hace falta ser programador o usuario experto) tanto para Word 2007 como para Word 2010:

  • Hacemos clic en la opción "nuevo" desde el logotipo de office.
  • Doble clic en "nueva entrada de blog".
  • Clic en administrar cuentas.
  • Clic en Botón "nuevo".
  • De la lista desplegable que nos pide un proveedor de blog seleccionamos el valor "otros".
  • Pulsamos siguiente.
  • La primera casilla desplegable donde nos pregunta por la API, seleccionamos: "Registro web meta".
  • La siguiente casilla nos pregunta la dirección URL. Ponemos la siguiente: http://www.<nombre_dominio>.com/<nombre_Blog>/metaweblog.axd La dirección puede cambiar de formato respecto al ejemplo que os muestro, pues en la URL pueden haber más directorios entre la barra (/) del final del dominio y la barra que va antes del nombre del blog (en este caso es la misma). Si es así, se tendrá que adaptar la URL a cada caso particular.
  • Y después, ya solo queda introducir el nombre de usuario, contraseña, y marcar si se quiere recordar la contraseña (si el ordenador es compartido o público no es recomendable).
  • Aceptar.

Si todo ha ido bien ya podemos utilizar Word para publicar entradas directamente a nuestro blog. Si tenemos más de un blog del mismo BlogEngine.NET, se tendrán repetir los pasos anteriores para cada blog.

Los pasos descritos están basados en la versión 2007 y pueden variar en la versión 2010.

Fuente:

Artículo (en inglés) de uno de los creadores de esta herramienta.

Tags:

Categorías: BlogEngine.NET | How to | Utilidades

No aparece la versión 3.5 en la lista de versiones disponibles de IIS

by Marc Cortada 09/09/2012

Yo también he buscado esta versión en la lista desplegable para poner en marcha una aplicación compilada con la 3.5, pero no está ¡y no aparecerá! Incluso, como muchos, he buscado el aspnet_regiis para registrar la 3.5 ¡pero tampoco se puede registrar!

La clave está en que .NET 3.5 es una extensión de .NET 2.0. Eso es: la versión 3.5 no es una versión completamente independiente como lo son la 2.0 o la 4.0. Se han realizado cambios en el lenguaje de programación como la capacidad para utilizar tipos anónimos, extensión de métodos, expresiones lambda, LINQ, se ha integrado AJAX… Sin embargo, al no ser una nueva versión, a nivel de IIS todo queda exactamente igual. Para que una aplicación compilada en 3.5 funcione, dejaremos marcada la versión 2.0 en la configuración del grupo de aplicaciones de IIS (para empezar). Y ahora viene la pregunta: ¿funcionará? Puede que aún no, queda alguna cosilla más... Más...

Tags:

Categorías: ASP.NET | C# | IIS | Programación y desarrollo

Salto de línea en un archivo con C#

by Marc Cortada 07/09/2012

Dependiendo del entorno, un salto de línea en un archivo de texto se puede representar de diferentes maneras ('\n', '\r\n'...). La mejor manera de insertar un salto de línea en C# es utilizar la propiedad NewLine de la clase Enviroment:

Environment.NewLine

Esta es la propiedad que utilizan los métodos Console.WriteLine y StringBuilder.AppendLine.

Fuente: artículo original de msdn.

Tags:

Categorías: C# | Programación y desarrollo

Implementar un delegado inline en C#

by Marc Cortada 23/08/2012

En C# Podemos implementar un delegado o un evento inline de la siguiente manera (ideal para métodos muy cortos).

this.objeto.Delegado += delegate(object sender, DayRenderEventArgs e)
{
 //Implementación
};

Tags:

Categorías: C# | Programación y desarrollo

Crear instancias dinámicamente en C#

by Marc Cortada 16/08/2012

Para crear dinámicamente y en tiempo de ejecución una instancia de un objeto a partir del nombre de la clase que podríamos obtener, por ejemplo, desde una cadena de texto (string), podemos utilizar la siguiente instrucción en C#:

string nombreClaseEspecifica = "Namespace.NombreClase";
TipoGenerico tipo = (TipoGenerico)Activator.CreateInstance(Type.GetType(nombreClaseEspecifica));

Estas prácticas también se conocen como "reflection".

NOTA: Esta práctica solamente debe utilizarse en caso de no haber más alternativas. Suele ser de difícil mantenimiento (pej: localización de errores), genera un código de difícil comprensión y puede penalizar el rendimiento.

Tags:

Categorías: C# | Programación y desarrollo

Identificación de usuario en intranet con IIS 7

by Marc Cortada 31/07/2012

La propiedad User.Identity.Name (o HttpContext.Current.User.Identity.Name) se utiliza para conocer el nombre de usuario del cliente que está visitando la aplicación, pero devolverá una cadena vacía según cómo esté configurado IIS.

Para que esta propiedad nos devuelva el nombre del usuario identificado en el directorio activo, basta con habilitar la autenticación de Windows y deshabilitar la autenticación anónima en el apartado autenticación de IIS, ya sea a nivel de sitio web o a nivel de servidor (ver imágenes). Más...

Tags:

Categorías: ASP.NET | IIS | Programación y desarrollo

Softlinks a archivos o carpetas en Windows al estilo Linux

by Marc Cortada 05/07/2012

¡Sí, se puede! En Windows se pueden crear enlaces virtuales a archivos al estilo UNIX o Linux. Estos enlaces (no confundir con accesos directos) pueden ser de gran utilidad para el desarrollo de aplicaciones, permisos de acceso a directorios, puestas en marcha y control de versiones, etc. (en esta entrada hay un ejemplo de aplicación real).

Esta funcionalidad está disponible desde Windows Vista y Windows 7 en lo que se refiere a sistemas operativos de sobremesa o estaciones de trabajo. En lo que se refiere a la familia de servidores está disponible dese Windows Server 2008. En todos los sistemas es recomendable instalar SP1 y este hotfix, ya que realizan algunas correcciones. En el enlace al hotfix encontraréis más información.

Para entender cómo funciona un enlace o softlink, haré una prueba y detallaré la diferencia entre un acceso directo y un enlace. De hecho la prueba será sobre un directorio, aunque los softlinks también pueden apuntar a un archivo.Más...

Tags:

Categorías: Programación y desarrollo

Utilizar el mismo diseño en web y aplicación móvil con BlogEngine.NET

by Marc Cortada 05/07/2012

Los diseños de BlogEngine.NET están definidos en la ruta themes\<nombre tema>. Una vez tenemos definido un tema para la aplicación web, BlogEngine.NET no permite asignar el mismo tema a otra aplicación. Por lo tanto tenemos dos opciones: duplicar las carpetas y asignarlas, o crear un softlink a una carpeta con un tema existente.

Si no tenemos acceso al servidor (por ejemplo solo podemos acceder vía FTP porque tenemos contratado hosting) solamente podremos aplicar la opción de duplicar la carpetas, con la desventaja de que cada cambio que realicemos en un tema lo tendremos que aplicar al otro tema. Probablemente, no pasará mucho tiempo en que algún día apliquemos un cambio en el diseño de un tema y se nos olvide duplicar estos cambios al otro tema.

Sin embargo, si tenemos pleno acceso al servidor (por ejemplo vía terminal server) podremos tener un tema y crear un softlink al mismo. Con esto se consigue que BlogEngine.NET vea dos carpetas, es decir, dos temas independientes que en realidad serán el mismo. Por una parte tenemos la ruta física y por otra una ruta virtual que apunta a la misma ruta física. Dicho de otro modo: no son dos carpetas separadas, es una carpeta y un apuntador a la misma, pero cualquier aplicación lo verá como dos carpetas. De este modo, todos los cambios que apliquemos a una carpeta aplicarán también a la otra (serán los mismos archivos físicos) y así no tendremos que preocuparnos de mantener actualizadas dos carpetas distintas.

Este blog tiene el mismo tema para aplicación móvil que para aplicación web y estoy utilizando la técnica de softlinks.

Si queréis más información sobre qué es un softlink, podéis visitar esta entrada.

¿Cómo hacerlo? Es muy sencillo:

Primero de todo os recomiendo hacerlo en un entorno de pruebas en el mismo servidor. Si tenéis creado un sitio web para pruebas podéis usarlo antes de hacerlo en el real. No se elimina ningún archivo en todo el proceso, pero siempre es recomendable tener una copia de seguridad.

  1. Entramos al servidor y abrimos un explorador de archivos.Más...

Tags:

Categorías: BlogEngine.NET | Programación y desarrollo | Trucos

Crear un servicio web con Business Connector de Axapta (2009)

by Marc Cortada 19/06/2012

Business Connector permite integrar cualquier aplicación basada en .NET con Axapta Object Server (AOS). Por tanto, un servicio web, formulario web o cualquier otro tipo de aplicación de escritorio basada en .NET podrá interactuar directamente con AOS. Solamente tendremos que agregar una referencia a una dll al proyecto de Visual Studio que queramos que tenga acceso a Axapta. ¡Esta librería abre un sinfín de capacidades!

Cómo hacerlo: Más...

Tags:

Categorías: ASP.NET | Axapta | How to | Programación y desarrollo

Problemas al eliminar grupos de usuarios en AX (Axapta)

by Marc Cortada 19/05/2012

Cuando se borra un grupo de usuarios en AX desaparece de la lista de grupos y parece que se elimina, pero cuando se vuelve a abrir la lista de grupos el grupo aparentemente eliminado vuelve a aparecer.

La forma en la que he resuelto este problema Más...

Tags:

Categorías: Axapta | Solución a errores

Relacionar los nombres de los pasos del log de una DTS con los nombres del paquete

by Marc Cortada 11/05/2012

El log de los paquetes del SQLServer 2000 no registra el nombre del paso que hemos definido en el editor de paquetes, si no que registra su nombre interno. Si queremos relacionar un paso del log con el paso concreto en el editor de paquetes (para rastrear un error, optimizar rendimiento…) iremos a esta opción del editor de paquetes.Más...

Tags:

Categorías: BBDD | SQLServer | Programación y desarrollo | Trucos

Entradas por mes