martes, 12 de abril de 2011

validar los accesos a un sitemap



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

Hola amigos les comparto esta rutina para validar los accesos a un sitemap, por
medio de los roles que son integrados en la seguridad de Asp Net
Este ejemplo esta hecho en Visual Basic, ya que la mayoria de ejemplos estan hechos en C#
Para llevar a cabo lo anterior debemos crear un httpmodule, como se ve a continuacion
Imports System
Imports System.Web
Imports System.Web.Security
Namespace Jimavb.Net
Public Class Moduloseguridadhttp
Implements System.Web.IHttpModule
'creo una instancia
Public Moduloseguridadhttp As Moduloseguridadhttp
'inicio y le añado un manejadur
Public Sub Init(ByVal context As HttpApplication) Implements IHttpModule.Init
AddHandler context.AuthenticateRequest, AddressOf Me.AuthenticateRequest
End Sub
Private Sub AuthenticateRequest(ByVal sender As [Object], ByVal e As EventArgs)
Dim Application As HttpApplication = DirectCast(sender, HttpApplication)
Dim Request As HttpRequest = Application.Context.Request
Dim Response As HttpResponse = Application.Context.Response
Dim allow As Boolean = False

If Request.Url.AbsolutePath.ToLower() = FormsAuthentication.LoginUrl.ToLower() Then
Return
End If
'si no existe ningun usuario, se redirige a la forma en donde me autentifico
If Application.Context.User Is Nothing Then
Response.Redirect(FormsAuthentication.LoginUrl)
End If
If SiteMap.CurrentNode Is Nothing Then
Return
End If
'si ese nodo no tiene rol, le permitimos entrar
If SiteMap.CurrentNode.Roles.Count = 0 Then
allow = True
Else
'si el usuario tiene el rol permitido para esa pagina le permite entrar
For Each role As String In SiteMap.CurrentNode.Roles
If Roles.IsUserInRole(role) Then
allow = True
Else
Response.Write("No tiene derechos, para este menú")
End If
Next
End If
If allow = False Then
Response.Redirect(FormsAuthentication.LoginUrl)
End If
End Sub
'hacemos limpieza
Public Sub Dispose() Implements IHttpModule.Dispose
End Sub
End Class
End Namespace
, para hacer la llamada en Web.config es de la siguiente manera
'reemplazo las < por espacios o comillas, para que aparezcan el texto
"system.web
httpmodules
add name="Moduloseguridadhttp" type="Jimavb.Net.Moduloseguridadhttp">
add>httpmodules
system.web>

OJO: CUANDO LO SUBAN A PRODUCCION, SI NO REGISTRAN EL MODULO NO SE EJECUTA,
, ASI QUE HAY QUE DECLARARLO EN EL ADMINISTRADOR IIS
'y para registrarlo en el servidor IIS 7, de otra manera no lo encuentra, lo puedes hacer con el administrador o con
el siguiente codigo en web.config
system.webserver
modules
add name="Moduloseguridadhttp" type="Jimavb.Net.Moduloseguridadhttp" precondition="managedHandler">
add
modules
system.webserver>

Si saben alguna manera de ocultar los nodos, no duden en compartirla

martes, 22 de febrero de 2011

Limitar formatos de exportación en ReportViewer



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

Hola amigos, aqui les dejo una manera de limitar el número de formatos a exportar. En mi caso unicamente deseo que el usuario pueda exportar a PDF, deshabilitando la exportación a Excel y a Word
'primero debemos declarar estos imports en la página donde se encuentra el 'reportviewer
Imports Microsoft.Reporting.WebForms
Imports System.Reflection

'Después en la carga de la página ponemos la siguiente rutina
'barremos las extensiones de localreport, mi reportviewer se llama reportviewer1
For Each elemento As RenderingExtension In reportViewer1.LocalReport.ListRenderingExtensions
'ponemos la condición para entrar a poner falso la exportación a Excel y a Word
If elemento.Name = "Excel" Or elemento.Name = "WORD" Then
'traemos la información del campo con sus respectivos flags
Dim infCampo As FieldInfo = elemento.[GetType]().GetField("m_isVisible", BindingFlags.Instance Or BindingFlags.NonPublic)
'colocamos el valor de false a la extension
infCampo.SetValue(elemento, False)
End If
Next
'si conocen otra manera mas eficiente de hacer esto, no duden en compartirla

domingo, 13 de febrero de 2011

Reporte maestro-detalle



Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.
Reporte maestro-detalle
Hola amigos, esperando que estén bien, me permito hacer un pequeño instructivo para imprimir con detalles dentro del cuerpo de un reporte utilizando Visual Studio 2010, para una pagina web, Una alternativa es usar subreportes, pero me dio la impresión de que reduce el rendimiento por eso busque otra opción, esperando que sea útil, comenzamos y ya saben que cualquier mejora o comentario es bienvenido.
Supongamos que el encargado de una escuela nos pide un reporte que tiene que entregar cada cierto periodo de tiempo, con las actividades extraescolares que ha llevado a cabo cada alumno, que a su vez están asignados a determinados maestros. De tal manera que el reporte debería aparecer de la siguiente manera

Veran que no me he preocupado mucho de la presentación, ya que el objetivo es que vean como manejar los grupos para hacer que,, por ejemplo, los alumnos aparezcan en orden y con sus respectivas actividades, que es un caso muy común en muchos reportes.
Para desarrollar este enfoque consideraremos que tenemos tres tablas a las cuales vamos a unir con un Inner Join, si ya tienen sus tablas y su consulta, se pueden ir al final, para ver como manejar los grupos.
Primero creamos una tabla de maestros

Luego creamos una tabla de alumnos, tiene una clave que lo relaciona con el maestro


Luego creamos una tabla de cooperaciones por actividades tomadas por el alumno


Entramos a visual Studio y elegimos un proyecto web vacio
Creamos un folder llamado APP_CODE y dentro de este dos fólderes uno llamado BLL y OTRO DAL, los que serán la capa de negocios y capa de datos
NOTA, pretendía ocupar la capa de negocios, de hecho la hice, pero finalmente no la utilice, porque hubiera sido mas confuso y nos apartaríamos del punto principal, pero tomen en cuenta que siempre deben separar sus capas de datos de las de negocio.
Luego creamos un data set que se llamará DSActividad


Ahora nos posicionamos en el dataset DSactividad y seguimos los pasos siguientes:
Creamos la conexión a la base de datos, y la salvamos al web.config

Luego con ayuda del query builder, creamos nuestra consulta

Luego ponemos el nombre del método a: traedatosact

Finalmente el query seria como sigue, quitandos los nombre por default que pone el asistente, reemplazando por el nombre de cvemaestro2 etc

Seria este código:
SELECT maestros.cvemaestro, maestros.NombreMaestro, maestros.Direccion, maestros.Telefono, alumnos.cvealumno, alumnos.NombreAlumno,
alumnos.SalonAlum, alumnos.cvemaestro AS cvemaestro2, activalum.cvealumno AS cvealumno2, activalum.Costo, activalum.NombreActiv, activalum.cveactividad,
activalum.fechActividad
FROM maestros INNER JOIN
alumnos ON maestros.cvemaestro = alumnos.cvemaestro INNER JOIN
activalum ON alumnos.cvealumno = activalum.cvealumno
WHERE (maestros.cvemaestro = @cvemaestro)
ORDER BY cvealumno2
Despues nos vamos a nuestro reporte y añadimos un dataset
Nota:es un poco confuso esta parte, solo consideren que el nombre Dataset1, no es realmente un dataset sino mas bien su definición, la cual nos es dada por el dataset llamado Dsactividad, por lo tanto hay que recorder que a nuestro visor(reportviewer) , le tenemos que decir que objeto nos va a comunicar con los datos reales, ese objeto lo veremos posteriormente

Añadimos los datos del maestro a un encabezado u en el cuerpo del reporte ponemos una LISTA(una lista nos permite repetir esos datos a lo largo del reporte) y dentro de esa lista colocamos una TABLA (en esa tabla vendrán las actividades.


Esta parte que sigue, es la realmente importante: vemos que debajo de ROW GROUPS tenemos un grupo llamado cvealumno. ESTO QUIERE DECIR QUE TODOS LOS ALUMNoS QUE CORRESPONDAN A ESE MAESTRO SE DESPLEGARAN EN UN CUADRO, EN ESTE CASO SOLO METIMOS POCOS CAMPOS PERO PUEDEN SER BASTANTES
La forma de poner grupos es arrastrando desde “report data” el campo que deseamos que funcione como grupo

A continuación, vemos que la tabla tiene dos grupos, siendo un grupo con la clave del grupo principal(cvealumno2) y otro subgrupo cveactividad con las actividades Nota:es imporante el subgrupo de actividades de otra manera solo aparecerían los alumnos y no sus actividades.

Nota importante los campos en que están basados los grupos se pueden ocultar con los propiedades de visibilidad y para que no se vea vacio ese espacio los podemos reducir con las flechas de posición.
De tal manera que nuestro reporte aparecerá como al principio y si elegimos otro maestro, en este caso el 003 y le damos click a generar reporte nos aparece el siguiente reporte
El código que viene a continuación, lo podemos poner en el evento click para que nos vaya mostrando los diferentes maestros
ObjectDataSource1.SelectParameters("cvemaestro").DefaultValue = TxtBusqueda.Text

ReportViewer1.LocalReport.Refresh()


Notas adicionales, el objeto que nos sirve de comunicación con los datos u objetos de negocio es el ObjectDatSource el cual se enlaza con el reporteviewer de la siguiente manera:

Y el objectdatasource debe tener señalado de donde viene la información como vemos en el siguiente cuadro, en este caso lo traje directamente del datasetr, pero pudo haber sido a través de la capa de negocios, EN DONDE PUEDO PROGRAMAR Y PONER MUCHISIMAS CONDICIONES.

Y también debemos señalar el método que ocuparemos para traer la información

NOTA FINAL, SI El GRUPO NO TIENE ALGO EN COMUN CON EL OTRO ES PROBABLE QUE LES APAREZCA EL MENSAJE DE
Pueden descargar el fuente y la base de datos de aqui:
Descarga
“has a detail member with inner members. Detail members can only contain static inner members.” ESO SE DEBE A QUE NO ESTAN BIEN SUS GRUPOS o DEJARON EL GRUPO detalles que aparece por default visual studio cuando genera una tabla.
Bueno amigos, eso es todo, que estén bien.

http://www.scribd.com/doc/48735594/gruposdetalles
aqui pongo el enlace para que vean las imagenes

lunes, 6 de diciembre de 2010

Negrito de la salsa

 

Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

Hola les comparto esta canción, el tono original es un medio tono arriba de D o sea
D sostenido, pero para mayor facilidad lo tocaremos en D mayor
los acordes son D, G y A7 (primera, tercera y segunda posicion) o sea, ReM, SolM, La7

El negrito de la Salsa
en D mayor

introducción

se repite esta figura 6 veces

E|---------5---7---7---9---9--------7---------------------|
B|-----7-------8-------10------10-8-----------------------|
G|-7------------------------------------------------------|
D|--------------------------------------------------------|
A|--------------------------------------------------------|
E|--------------------------------------------------------|

luego esta 3 veces(en la cancion se repite 4 veces)

E|-7----9----7----5----|
B|-8----10---8----7----|
G|---------------------|
D|---------------------|
A|---------------------|
E|---------------------|
y empieza la voz
Goza con fiebre latina,Y el negrito de la salsa
Goza con fiebre latina,Y el negrito de la salsa
que te pone calientico,Con su son y su guaracha
Que te pone calientico,Con su son y su guaracha

este es el CORO
Hay hay
Apretadito hay hay
Con el negrito de la salsa hay hay
Bien sabrosito haay hay
Con el negrito de la salsa hay hay
Apretadito hay hay
Con el negrito de la salsa
´
Escucha a fiebre latina,Con el ritmo de la salsa
Que te pone calientico,´con su son y su guaracha, hay hay
Y para ti mi negra linda hay hay ,Yo soy el negro de la salsa
coro
Baila mi son caliente,goza mi negra linda,
ataca mi rubia hermosa, esta tu guarachita
coro
se repiten las figuras de la introducion
y pueden meter un solo empezando con untremolo en la nota A 1era cuerda 5to traste
se repite desde el coro y finaliza con las figuras de la introduccion
cualquier observacion o correción es bienvenida

jueves, 14 de octubre de 2010

Acordes de Guitarra vecina los chicanos




Estimados lectores, ha sido una experiencia agradable el hacer este blog y tener algunos lectores que comparten el gusto por la programación; actualmente estoy empezando otro proyecto, muy personal,  con tecnología web  que espero compartir con toda la comunidad de programadores y necesito recursos porque es algo muy personal y mi situación financiera no es muy buena.

 Si alguien desearía apoyarme  tengo una tarjeta Oxxo Saldazo con el número:  4766-8408-7508-1593, cualquier apoyo lo pueden hacer en cualquier tienda Oxxo o en Banamex, les agradezco y que sus proyectos lleguen a buen fin.

Les envio los acordes de Guitarra para Vecina de los Chicanos, cualquier corrección es bienvenida:
VECINA LOS CHICANOS Tono SOL MAYOR
INTRODUCCIÓN: Am D7 G E7 Am D7 G G#m Am D7
G Cm G
Vecina, ¡qué bonita es usted!
G Am Bm
se me van los ojos tras de sus encantos
A#m Am D7
al verla pasar.
Am D7
Por Dios que ya no aguanto
Am D7
las ansias de hablarle
Am D7
y de confesarle
G G#m Am D7
este mi gran amor.
G Cm G
Vecina, ¡qué bonita es usted!
G7
¡cuántas cosas bellas quisiera decirle
C E7 Am
al verla pasar!
C Cm G E7
y yo que sólo tengo ojos para mirarla
Am D7 G G7
% me muero de tristeza al sentir su frialdad.
C Cm G E7
Vecina, princesa de mi barrio,
Am D7
yo que tanto la quiero y usted ni siquiera
G G#m Am D7
me ha querido mirar.
Intermedio : G Cm G G7 C E7 Am
C Cm G E7
y yo que sólo tengo ojos para mirarla ……………….se repeti desde %
Y solo el final cambia
Bm A#m Am G#m G
me ha querido mirar.
Espero que les sea util, les inserto la imagen ya que cambia la posicion de los acordes. PD. la entrada es un cinrculo de Sol empezando con La menor