You are on page 1of 17

GUIA DE APRENDIZAJE NO.

015
EJEMPLO GENERAL SOBRE PAGINA DE BIBLIOTECA CON ASISTENTE DE
TAREAS
INSTRUCTOR: Ing. Ariel Almonacid Arias
AREA: Programacin en ASP.NET.
ESTUDIANTE: _____________________________________________________.
GRADO: ___________.
OBJETIVOS: Dar a conocer al estudiante la manera rpida y fcil de generar una aplicacin We sin muc!as
complicaciones mediante el uso de DataSet con sus respecti"as entidades de negocio #DataTales# usando adems
controles como el $onten%lace&older' (oginVie)' *ridVie)s' DetailsVie)+
CONTENIDOS
%ara este e,emplo "amos a crear un sitio )e:
-rc!i"o' .ue"o' Sitio We' Empty We Site/Sitio We Vac0o1+
-gregamos a nuestro nue"o proyecto una ase de datos llamada Bilioteca y en ella agregamos 2 talas as0:
(a primera:
Oser"en 3ue los "alores no se declaran nulos+
En el campo copias declarado como int' en sus propiedades de columna/parte inferior1' colocamos 4 en la opcin
"alor o enlace predeterminado y a esta tala la nomraremos como (iros+
-!ora creamos una segunda tala llamada %r5stamos as0:
$uando creemos la lla"e primaria Id6%restamo/esta cla"e ser artificial por3ue no estar asociada a ninguna entidad
f0sica7automatica1 y "amos a !acer 3ue sea la ase de datos la 3ue gestione la unicidad as0:
En las propiedades de la columna del campo/parte inferior1 Id6%restamo' arimos las opciones de especificacin de
identidad' y en /Identidad1 colocamos SI+
En las propiedades de la columna del campo De"uelto' colocamos 4 en la opcin Valor o Enlace %redeterminado'
todo 3uedar0a as0:
%osteriormente en el e8plorador de ser"idores' damos clic9 derec!o en Diagrama de Base de Datos' -gregar .ue"o
Diagrama' /si en el mensa,e de crearlo o no1' agrego las dos talas' genero la relacin entre Id6(iro de la tala
(iros con Id6(iro de la tala %restamos' 3uedando as0:
*uardamos y damos el nomre al diagrama como Diagrama+
:a creado el modelo de datos cerramos este y "amos al e8plorador de ser"idores' clic9 derec!o sore la tala
(iros' mostrar datos de la tala y empe;amos a llenarlos/en Id6(iro colocamos <4 ceros' y en $aratula colocamos
por e,emplo:<+,pg=esta imagen al igual 3ue las dems se agregan al proyecto dentro de una carpeta llamada
Imgenes>1+
(uego mostramos los datos de la tala %restamos y empe;amos a llenarla' oser"e 3ue en el campo Id6%restamo
aparecer como Null, ya 3ue como lo indi3ue anteriormente es un campo de identidad y se generara
ascendentemente de manera automtica+
-!ora "amos a desarrollar el es3ueleto "isual de mi aplicacin mediante el uso de pginas maestras/sir"en de
plantilla general 3ue pro"eer a la aplicacin un dise?o estndar para todas los formularios )e de la pgina' es
decir centrali;ar en un mismo sitio la disposicin de todos los elementos "isuales del proyecto/esta pgina maestra la
puedo modificar sin alterar el contenido de mis dems sites1' .ota: mi proyecto puede tener ms de una pgina
principal o @aster %age1:
:a generada la carpeta Imgenes con sus respecti"as imgenes' damos clic9 derec!o sore el proyecto y
agregamos nue"o elemento' %gina %rincipal' la nomramos/%lantilla1' de,amos el c!ec9o8 acti"ado/colocar el
cdigo en un arc!i"o independiente1+ En el cdigo interfa; de usuario generado eliminamos el control 3ue me pone
por defecto el $ontent%lace&older el asistente de la aplicacin:
Vamos a dise?o' en el cuadro de propiedades deo estar uicado en DO$A@E.T' luego "oy al menu Tala' Insertar
Tala' 2 filas y B columnas' anc!o <44CD luego comino las celdas E y F/clic9 derec!o' modificar' cominar celdas1+
- las primeras B celdas/las de la parte superior1' se le insertan controles Images con sus respecti"as AG(/Esta ser
la caecera1D en la celda H 3ue ser nuestra seccin de menIs/generemos un color de fondo=propiedad gcolor>1D
dentro de la H celda y la celda cominada "amos a a?adir otra tala de < columna y < fila/en espaciado entre celdas
le damos E' en anc!o <441D en la ;ona de menIs/tala de la celda H1 agregamos un te8to8/Id: tBus3ueda1 y un
utton/Buscar' Id: tBus3ueda=ser"ir como filtro para consultar por t0tulos de liros>1' en las propiedades de esta
tala JTDK' "amos a Style7Blo3ue7Vertical-lignLTop Mpara 3ue sus controles 3ueden en la parte superior#D a!ora
a?adiremos en la tala de las celdas cominadas un control especial 3ue es el $ontent%lace&older/3ue sera el
espacio reser"ado para el contenido de las demas paginas o formularios de la aplicacin=elementos "isuales>1D a!ora
creamos los formularios 3ue iran en el $ontent%lace&older/al momento de seleccionar el We form acti"emos el
c!ec9o8: seleccionar la pagina principal1' seleccionamos la plantilla master pages y agregarD se genera un codigo
interfa; de usuario/en este codigo ponemos el cursor en la eti3ueta N %age1' en el cuadro de propiedades
seleccionamos J%-*EK' y le damos un titulo a la pagina en la opcion Title MGegistro de (iros#' luego "amos a
dise?o/oser"emos 3ue todo lo 3ue esta por fuera del control $ontent%lace&older esta in!ailitado1' escriamos en
este control $oleccin de (irosD asi tamien agregamos el formulario para la pagina de %restamos colocando en su
title#%restamos#' /tamien podemos poner el titulo dentro de las opciones de DO$AE@E.TS en propiedades1' y en
el $ontent%lace&older digitamos MDetalle de (iros mas %restamo de (iros#' tamien agregemos un formulario
llamado @is%restamos%endientes' damos su title' y dentro del $ontent%lace&older digitamos M%restamos de (iros
%endientes por De"ol"er#
-!ora incorporaremos a la aplicacin una pe3ue?a capa logica de datos y configurareros el acceso a la ase de
datos' !ay diferentes tecnicas para definir las entidades de negocio de nuestra aplicacion' en +.et podemos utili;ar
O@(' clases propias' tipos e8pecificos de +.et como son DataSets' DataSets tipados' etc' pero ' en nuestro e,emplo
"amos a utili;ar DataSet para definir y Data-dapters para enla;ar la entidades de negocio con la ase de datos' las
entidades de negocio seran elementos contenidos en los DataSet como son los DataTales' concretamente "amos a
crear B DataSets/uno para liros/formulario Default1' otro para prestamos pendientes/formulario prestamos
pendientes1' y otro para el detalle de liros mas prestamos de liros/Pormulario %restamos11' a3u0 cada DataSet "a a
definir una unica entidad' es decir un DataTale y su correspondiente Data-dapter para rellernar y actuali;ar camio
en esa entidad' antes de construir estos DataSets "amos a a?adir un nue"o elemento/fic!ero de configuracion/)e
config1 para definir los parametros 3ue "an a afectar a nuestra aplicacin en tiempo de e,ecucin1' por defecto !ay
dos parametros fi,ados 3ue son:
Jcompilation deugLQtrueQK
Gefle,a el modo de depuracin de -S% y'
Jaut!entication modeLQWindo)sQRK
Sue me da el modo de seleccin de autenticacin/generalmente Windo)s1+
(a !erramienta -S% configuration es la 3ue nos "a a permitir configurar los parmetros de nuestra aplicacin+
-!ora "amos a crear el primer DataSet' agregamos un nue"o elemento y a?adimos un DataSet con nomre
(irosDS/este contendr la entidad de pel0culas 3ue ser un DataTale y un Data-dapter1' aceptar y decimos 3ue s0
crear la carpeta de los cdigos de los DataSets' pasamos al cuadro de !erramientas 3ue estar ya con la informacin
de los DataSets' agregamos un Tale -dapter/en la nue"a "entana' esco,o la ase de datos y tami5n podemos "er
en esta la cadena de cone8in de la ase de datos1' damos siguiente y luego me pregunta si se 3uiere guardar esa
cadena de cone8in dentro del fic!ero de configuracin con el nomre del parmetro/se puede modificar1' para el
e,emplo de,5moslo as0' damos siguiente' luego el asistente nos pide 3ue tipos de comandos "amos a utili;ar en el
Tale-dapter/el cual como ya se di,o enla;a nuestra entidad de negocios con la ase de datos1' seleccionamos /usar
instrucciones SS(1 y siguienteD "amos al generador de consultas y agregamos la tala (iros /3ue ser la entidad de
negocio 3ue "amos a mane,ar internamente en nuestra aplicacin1' seleccionamos todos los campos/menos el de
todas las columnas1D aceptarD a!0 podemos manipular las opciones a"an;adas =recordemos 3ue estamos en un
modelo de acceso a datos desconectado =DataSet> /es decir en el momento de rellenar nuestra entidad de negocio'
es decir el DataTale' el adaptador are la cone8in' reali;a las sentencia Select' rellena y cierra de nue"o la
cone8in1 es decir' inserta' modifica' elimina y todo esto solo en memoria' pero si 3ueremos sincroni;arnos con la
ase de datos tendr0amos 3ue !acer un Apdate sore la entidad de negocios para 3ue la ase de datos asimile los
camios' dentro de este se are la cone8in y se !acen las sentencias de insercin' actuali;acin o orrado' luego
se cierra de nue"o la cone8in>' acti"amos las 2 primeras opciones:
Siguiente' (uego' el asistente nos pide 3ue nomres 3ueremos dar a los m5todos 3ue nos permitan rellenar nuestras
entidades en nuestro DataSet' el m5todo Pill lo 3ue !ace es a pasar siempre por parmetro el DataSet' ir pasando
todos los datos 3ue se estn recuperando de las talas 3ue se !an ido rellenando /m5todo ineficiente para
recuperar1' por ello es me,or utili;ar el m5todo *etData /de"uel"e los datos para !acer lo 3ue 3ueramos1' la tercera
opcin permite crear m5todos 3ue en"0an actuali;aciones directamente a la ase de datos' crea el m5todo Apdate
mencionado anteriormente con sus sentencias de sincroni;acin con la ase de datos de manera controlada' damos
siguiente con los tres m5todos seleccionados' y finali;amos+
-l seleccionar el campo (irosTale-dapter' en el panel de propiedades se pueden distinguir las modificaciones 3ue
se !a reali;ado/sentencias insert' delete' etc1D este adaptador nos de"ol"er0a todos los liros para mostrarlos en la
ilioteca' pero podemos generar sentencias adicionales como puede ser uscar liros por t0tulo as0:
En el campo en donde se gener el adaptador /en nuestro e,emplo (irosTale-dapter1' clic9 derec!o y a?adir ms
consultas:
-?adimos una sentencia SS( 3ue nos de"uel"a filas' "oy al generador de consultas para !acer el filtrado y despu5s
de los registros de la tala (iros agrego otro registro como filtro as0:
Apper es para no tener prolemas con mayIsculas y minIsculas y
(i9e indica 3ue el registro sea como cual3uier cosa 3ue contenga el parmetro del filtro del t0tulo/es decir' con una
sola palara 3ue !aga parte del t0tulo 5l lo mostrara E,emplo: digitamos la y el usca los t0tulos de liros 3ue tengan
ese parmetro1' aceptar' siguiente' camiamos el PillBy por PillByPiltroTitulo/para ordenamiento nuestro1 y el
*etData por *etDataPiltroTitulo+
-!ora "amos a generar una consulta 3ue mostrara todos los campos de (iro dada su cla"e' as0:
$lic9 derec!o sore el -dapter' agregar consulta' siguiente' siguiente' generador de consultas' a?adimos el filtro de
Id6liro asi:
(uego damos aceptar' siguiente' creamos los m5todos PillById6liro y *etDataById6liro+
:a con esto tenemos el adaptador con las consultas necesarias para la funcionalidad 3ue re3uiero'
.ota E8tra/no aplicar en e,emplo1: si lo 3ue 3ueremos es crear DataSets multientidad/tami5n se puede con una
sola entidad1' clic9 derec!o sore el espacio de dise?o' agregar' DataTale /se crear0a la entidad y su adaptador
correspondiente y !acer las consultas correspondientes1' con el agregue de Gelatin /puedo estalecer relaciones'
ya 3ue al fin y al cao DataSet es una miniase de datos en memoria1+
*uardamos nuestra primera entidad y en el arc!i"o We$onfig "erificamos 3ue se !a generado nuestra cadena de
cone8in:
Jadd nameLQBilioteca$onnectionStringQ connectionStringLQData SourceL+TSS(EO%GESSD-ttac!DPilenameLU
DataDirectoryUTBilioteca+mdfDIntegrated SecurityLTrueDAser InstanceLTrueQ
pro"ider.ameLQSystem+Data+S3l$lientQ RK
-!ora a?adamos los siguientes DataSets restantes: clic9 derec!o en la carpeta -pp6$ode' agregar nue"o elemento'
nomramos al DataSets/%restamosDS' esta ser la entidad y se usa para insertar un nue"o registro de pr5stamo de
liros cuando un usuario lo pida prestada1' "amos al cuadro de !erramientas' agregamos con dole clic9 el
Tale-dapter/oser"emos 3ue la cadena de cone8in ya me la genera desde el Weconfig1' siguiente' escogemos la
tala %restamos' todos los campos' en opciones a"an;adas acti"amos /actuali;ar la tala de datos' deido a 3ue
algunos campos tienen generacin automtica como lo es Id6%restamo por tal ra;n necesitamos refrescar la ase
de datos1' no es necesario usar la concurrencia optimista ya 3ue lo Inico 3ue "oy a !acer son inserciones de liros'
generamos los m5todos as0 como estn' y terminamos de generar los pasos siguientes' o,o "amos guardando todo+
-!ora creemos el DataSets para prestamodelirosDS al igual 3ue lo !ec!o anteriormente/el DataTale o entidad de
negocio es especial ya 3ue lo Inico 3ue 3uiero es mostrar los prestamos pendientes mostrando al usuario la fec!a
de pr5stamo y el t0tulo del liro pendiente por de"ol"er1' por ello la sentencia ser compuesta' solo c!e3uemos la
fec!a del pr5stamo y el t0tulo del liro' a!ora filtramos por socio as0:
Oser"en 3ue solo se c!ulean Pec!a6%restamo y Titulo en las talas' se agregaron 2 columnas Asuario de Tala
%restamos y De"uelto de Tala %restamos/el filtro L4 es para 3ue muestre el "alor oolean false' es decir los 3ue no
!an de"uelto liros1' en opciones a"an;adas desacti"o todo ya 3ue no necesitamos de insert y dems' ya 3ue el
adaptador 3uedar0a de un solo sentido/entidad de negocio de solo lectura1' nomramos los m5todos as0
/PillByAsuario y *etDataByAsuario1' a!ora como estamos tomando los datos de 2 talas necesitamos renomrar
ese DataTale para darle nomre a la entidad y asi usarlo en la aplicacinD ya !emos terminado nuestros Datasets'
entidades de negocios y enla;adas a tra"5s de la configuracin 3ue !emos reali;ado+ %or ultimo compilamos para
"er 3ue no !aya ningIn error+
.os uicamos en la pgina por defecto /Deaful+asp81' orramos $oleccin de (iros del $onten%lace&older'
arrastramos a este un control *ridVie)/re,illa de datos' Widt!L<44C1 y un (ael/Te8t "ac0o e ID (InfoBus3ueda1D al
*ridVie) le damos un formato profesional as0:
Damos clic9 en la flec!ita de tareas del *riidVie)
-3u0 en esta
flec!ita
(uego formato automtico' escogemos el formato profesional' aceptar+
-!ora "amos a asociar este *ridVie) a las entidades de negocio ya creadas por medio del mismo asistente de
tareas del *ridVie) en la opcin elegir origen de datos' en nuestro caso "amos a enla;arlo a un o,eto/O,ect1'
escogemos el de (irosDSTale-dapter' siguiente' para nuestro e,emplo no "amos a utili;ar A%D-TE' I.SEGT :
DE(ETE' por eso "amos a desacti"arlas poniendo ninguno en la opcin elegir un m5todo ya 3ue lo Inico 3ue
3ueremos es mostrar los liros' en SE(E$T de,amos el m5todo *etData/1De"uel"e (irosDataTale y finali;amos+
Voy de nue"o al asistente del *ridVie)' editar columnas' con la O ro,a elimino los campos 3ue no 3uiero usar'
incluso caratula/ya 3ue esta enla;ado directamente con la ase de datos y lo 3ue 3uiero mostrar es realmente son
imgenes1D para ello agrego un campo ImagePield /en la propiedad &eader Te8tL$aratula y en
DataImageArlPieldL$aratula' campo creado en la ase de datos=el cual contiene los fic!eros de las imgenes>' y en
DataImageArlPormatStringL VRImgenesRW4X 1
-!ora reali;aremos modificaciones en mi pgina Default para 3ue podamos clic9ear en la columna de t0tulos sore
un t0tulo lo cual nos mostrara el detalle del liro y un otn para prestarlo de la ilioteca as0:
%rimero pondremos los te8tos de la caecera alineados ala i;3uierda' "amos al editor de columnas del control
*ridVie)' eliminamos el campo t0tulo' agregamos en la parte superior de los campos un campo de
plantilla/TemplatePield1 3ue "oy a poder configurar' le damos en &eader Te8t LMTitulo#' alineamos todos los te8tos
!ori;ontales a la i;3uierda con &eader Style' &ori;ontal-lingL#left# /esto mismo !acemos con los otros campos 3ue
en nuestro e,emplo deen ser caratulas y descripcin1' coloco en negrita el t0tulo para 3ue resalteD+
-!ora editaremos la primer columna del *ridVie) gracias a la plantilla adicionada as0: ingresamos al asistente de
tareas del *ridVie) y damos clic9 en la parte final MEditar %lantillas#' en esta parte podremos ingresar controles'te8to
y dems ala Inica plantilla creada 3ue es la del t0tulo' entonces a?adamos un control &iper(in9' editamos los enlaces
de datos en el asistente de tareas de dic!o control' en la propiedad Te8t le decimos 3ue nos muestre el Titulo y en
.a"igateArl le decimos 3ue el "0nculo ser a la pgina %restamos' para ello pasamos el Id6liro para la
SueryString/consulta de cadena1' es decir en Bound to /con enlace a1L#Id6liro# y en format /formato1L#
VR%restamos+asp8YId6liroLW4X#' listo el enlace ya 3ueda definido y finali;amos la edicin de plantilla usando de
nue"o la flec!ita del asistente de %lantilla y terminar edicin de plantilla' !agamos una pruea de mi pgina para "er
cmo "amos' dee pasarnos del formulario Default al formulario %restamos con cual3uier "0nculo+
.ota: para reducir o ampliar las columna de un *ridVie) es: asistente de tareas' Editar $olumnas' ItemStyle /Pont'
Wit!#agrego en porcenta,e lo 3ue deseo#1+
-!ora "amos a la plantilla Mpgina maestra#' seleccionamos el Button Buscar (iros' "amos a ala propiedad
%ostBac9Arl /permite redireccionar automticamente a otra pgina1' escogemos DefaultD pasamos de nue"o a la
pgina Default y "amos a determinar si al cargar la pgina "a o no con filtro' para ello "amos a la lgica de aplicacin
de la pgina' en la parte superior escogemos %age e"entos y a la derec!a (oad para ingresar al e"ento (oad de la
pgina' y generamos el siguiente cdigo con el propsito de 3ue realice las Is3uedas por parmetro definidas en
los DataSets:
%artial $lass 6Default
In!erits System+We+AI+%age
%rotected Su %age6(oad/ByVal sender -s O,ect' ByVal e -s System+E"ent-rgs1 &andles @e+(oad
Dim t8tBus3ueda -s String L QQ
If @e+%re"ious%age Is.ot .ot!ing T!en ZDetermina si "enimos de una pagina distinta a la 3ue estamos y si es asi
podemos na"egar por los
controles en este caso el tBus3ueda 3ue esta en la plantilla master' ya 3ue se guarda una copia del estado de la
pagina anterior
t8tBus3ueda L Direct$ast/@e+%re"ious%age+@aster+Pind$ontrol/QtBus3uedaQ1' Te8tBo81+Te8t
Z!emos uscado el te8to8QtBus3uedaQ de la plantilla maestra y lo 3ue tenga me lo de"ul"e en la "ariale
t8tBus3ueda
Else
t8tBus3ueda L Direct$ast/@e+@aster+Pind$ontrol/QtBus3uedaQ1' Te8tBo81+Te8t
End If
Zsino entonces usca la pagina actual
O,ectDataSource<+Select%arameters+$lear/1
ZEs para no cargar el DataSet con multiples filtros ya 3ue podria generar un error al e,ecutar el metodo Select
lo 3ue !acemos es orrar la lista de parametros
If String+Is.ullOrEmpty/t8tBus3ueda1 T!en
O,ectDataSource<+Select@et!od L Q*etDataQ
ZDetermino 3ue si ese te8to es "acio entonces !ago la us3ueda y le indico 3ue el metodo 3ue "a a utili;ar para
otener los datos es el *etData/3ue tiene todos los registros de liros capturados en el formulario Default1+
(InfoBus3ueda+Te8t L QGesultado de la lista de liros sin filtroQ
Z(InfoBus3ueda es el (ael 3ue muestra la cadena de te8to anterior
Else
O,ectDataSource<+Select@et!od L Q*etDataPiltroTituloQ
ZSi "iene con te8to ese Te8tBo8 entonces la 3uery utili;a el filtro/*etDataPiltroTitulo/us3ueda por cual3uier
parametroQpalara 3ue pertene;ca al titulo del liroQ11
O,ectDataSource<+Select%arameters+-dd/QPiltroTituloQ' t8tBus3ueda1
(InfoBus3ueda+Te8t L QGesultado de la lista de liros con filtroQQQ [ t8tBus3ueda [ QQQQ
End If
End Su
End $lass
-!ora desplac5monos al formulario %restamos+asp8 ' agregamos un control DetailsVie)/Wit!L<44C1' un
Button/IdLB%restamo' Te8tL%restar1' y un (ael/IdL(@ensage' ' Te8tL"ac0o' VisileLPalse1D al control DetailsVie) le
podemos dar mediante el asistente de tareas un formato profesional' como origen de datos agregamos un o,eto/el
mismo O,ectDataSource<1 en el o,eto comercial escogemos (irosDS' el m5todo ser *etDataById6liro/Apdate'
Insert y Delete=ninguno>1' siguiente' en origen de parmetro esco,o SueryString' en SueryStringPield colocamos
Id6liro' finali;amos y ya tendremos nuestro detalle' luego con el asistente de tareas "oy a la opcin editar
campos/Edit Pields1' al igual 3ue antes elimino el campo $aratula y agrego uno nue"o llamado ImagePield/en
propiedades no titulo la caecera en &eader Te8t' en DataImageArlPieldL$aratula' en
DataImageArlPormatStringLVRImgenesRW4X 1' aceptar' colocamos en negrilla tanto el campo t0tulo como el de
descripcin/ItemStyle' Pont' BoldLTrue1' si al compilar arro,a error' deemos estalecer al formulario Default como
pgina de inicio de nue"o+
%or el momento "amos a de,ar pendiente la lgica de aplicacin del utton %restar ya 3ue para ello deemos
incorporar primero la autenticacin de usuarios ya 3ue el pr5stamo e8ige 3ue el usuario este auntenticado+
Entonces "amos al formulario %restamos%endientes' orramos el contenido del $ontent%lace&older' y agregamos
un control *ridVie)/regilla de datos=Wit!L<44C' formato profesional' origen de datos O,ectDataSource<' O,eto
$omercialL%restamos(irosDSD escogemos el Inico m5todo generadoD Apdate' Insert y Delete se de,an como estnD
siguienteD en Valor por defecto escriamos -riel Mun usuario registrado en la ase de datos' tala %restamos#>1D a!ora
editamos las columnas del *ridVie)#)it!L\EC' &ori;ontal-lignL(eft#D carguemos la pgina con el formulario
%restamos%endientes por defecto y me mostrara el pr5stamo pendiente del usuario -riel+
-S%+.ET 2+4 agrego un mecanismo de autenticacin llamado @emers!ip 3ue permite mane,ar controles
adicionales para esta autenticacin+
%ara empe;ar arrancamos una !erramienta de configuracin )e 3ue permitir configurar parmetros de seguridad
del fic!ero We $onfig' tami5n podremos especificar el pro"eedor de ser"icios de aplicacin de -S%+.ET+
-!ora acti"aremos o configuraremos la seguridad de la aplicacin as0:
Vamos al menI SitioWe' $onfiguracin -sp+.et' /are inmediatamente la pgina )e de administracin1' clic9 en
pesta?a de seguridad' arrancamos el asistente para configuracin de seguridad paso a paso' siguiente'
seleccionamos el m5todo de acceso desde internet/ya 3ue lo 3ue 3ueremos es generar la aplicacin desde internet'
esto lo 3ue !ar es camiar en el fic!ero de configuracin el modo de autenticacin Windo)s por modo de
autenticacin Porms1' siguiente' en configuracin de pro"eedores a"an;ado /.ota: e8isten "arios como @emers!ip
Mse encarga de toda la autenticacin de usuarios#' otros como el gestor de errores' personali;acin' $ac!in de ase
de datosD todos "ienen por defecto en -S%+.ET 2+4' en si son modelos de datos soportados por motores de ase de
datos como SS( SEGVEG' SS( SEGVEG ESS%GES1' cmo no "amos a utili;ar un modelo de datos distinto al 3ue
"iene por defecto en el ser"icio de @emers!ip' ni ninguna ase de datos distinta a SS( SEGVEG ESSGES'
entonces damos clic9 en siguiente' no definimos funciones' siguiente' /a!ora podemos crear los usuarios 3ue podrn
acceder a la aplicacin1' agreguemos 2 usuarios/.ota: la contrase?a de los usuarios dee tener ms de \ caracteres
y dee contener por lo menos un carcter no alfanum5rico E,+ An punto' coma' etcD para m0 e,emplo los usuarios son:
-ndrea y la contrase?a para los dos es almonacid+41 a!ora estos usuarios 3uedarn en la nue"a ase de datos 3ue
nos crea el ser"icio @emres0a alo,ada en la carpeta aplication data/-pp6Data1 de nuestro proyecto' siguiente' en
reglas de acceso no !aremos nada' ms adelante generaremos reglas de acceso en pr5stamos para los usuarios
annimos' siguiente' finali;ar' oser"en 3ue aparece el nImero 2 en usuarios e8istentes y desde a3u0 podemos crear
ms usuarios y dems posiilidades' cerramos la "entana y "ol"emos al dise?o' oser"emos en el We $onfig 3ue
se !a modificado el fic!ero/ya no es modo de autenticacin Windo)s sino Porms1' oser"emos adems 3ue en la
carpeta -pp6Data aparecer otra ase de datos llamada -S%.ETDB+@DP/si no aparece de una actualicemos la
aplicacin1' con clic9 derec!o la arimos y oser"emso todas las talas 3ue nos !a creado el asistente de los
ser"icios @emers!ip y dems 3ue sern utili;ados por el ni"el de aplicacin de -S%.ET 2+4' /.ota: no ol"idar 3ue
estamos utili;ando como pro"eedor de almacenamiento de informacin de usuario -S%.ET SS( %GOVIDEG 3ue !a
generado esta ase de datos y 3ue puede utili;ar adems -ccess y otros modelos de datos' !asta OracleD si se usa
otro modelo de datos se necesitara escriirle el cdigo del pro"eedor 3ue enla;ara la funcionalidad de @emers!ip
con el modelo ase de datos del almac5n personali;ado1D a!ora "amos a modificar la plantilla master para a?adir
controles "isuales relacionados con la seguridad' entonces agreguemos un control (oginStatus/grupo inicio de
sesin1 para no complicarnos y uicar este control donde lo 3ueremos 3ue es sore la tala generada en dise?o
anteriormente' simplemente "amos a la interfa; de usuario' cortamos el cdigo generado por el control y lo pegamos
sore la primer referencia 3ue genero la tala#Jtale#' 3uedar0a ms o menos as0:
Jasp:(oginStatus IDLQ(oginStatus<Q runatLQser"erQ RK
Jtale cellspacingLQEQ classLQstyle<QK
- este control (oginStatus se le pueden dar propiedades como: (oginImageArl# una imagen ya dise?ada y guardada
en el fic!ero Imgenes para iniciar sesin#' en (ogoutImageArl# seleccionamos una imagen para finali;ar sesin# ' en
(ogout-ction#Gedirect#' en (ogout%ageArl MDefault#' a!ora aa,o del control (oginStatus agregamos un control
(ogin"ie)' en su asistente de tareas selecionamos Vistas M(oggedInTemplate#' dentro de este control agregamos un
control (ogin.ame' dea,o de este agregamos un control &yper(in9/.a"igateArl #%restamos%endientes+asp8#' Te8tL
M@is prestamos pendientes#1' /.ota: esto lo "er0a el usuario autenticado' es decir' "er0a el &yper(in9 @is prestamos
pendientes' mientras 3ue el usuario annimo no lo "er0a1D entonces lo 3ue tenemos es 3ue cuando el usuario pulse el
otn de iniciar la sesin automticamente la infraestructura de @emers!ip lo 3ue !ace es direccionar la
na"egacin a una pgina (ogin 3ue se a?ade as0: agregamos un nue"o formulario We asado tami5n en la
plantilla master llamado (ogin' "amos a dise?o' a?adimos un control (ogin# tami5n de los nue"os presentados por
-S%.ET 2+4#' le damos a este control un formato profesional' adems podemos con"ertirlo en plantilla para "er
todos sus controles' as0 3ue con"irtmoslo en plantilla por medio del asistente y para modificar los te8tos de los
controles as0: ingreso a las propiedades de (ogin System+We+AI+We$ontrols+(ogin y en Pont7Si;e M<4pt#'
selecciono el t0tulo 3ue trae el control (ogin para 3ue en el cuadro de propiedades me apare;ca como encae;ado
JTDK' en Style le pongo en tama?o <2 pt' y tradu;co los dems te8tos de los controles a mi gusto' oser"en en el
dise?o del control (ogin 3ue a la derec!a de cada aparecen asteriscos de color ro,o' seleccionemos cada asterisco y
en propiedades Error@essage#Introdu;ca Asuario#' y en ToolTip escriir lo mismo' !acer lo mismo con la cla"e+
-!ora "amos al formulario %restamos%endientes' en el e"ento (oad de la %agina y adicionamos el siguiente cdigo
por lgica de aplicacin:
%rotected Su %age6(oad/ByVal sender -s O,ect' ByVal e -s System+E"ent-rgs1 &andles @e+(oad
O,ectDataSource<+Select%arameters+$lear/1
O,ectDataSource<+Select%arameters+-dd/QAsuarioQ' Aser+Identity+.ame1
End Su
-!ora corramos la aplicacin para "er 3ue est5 funcionando ien+
-!ora 3ueda pendiente generar seguridad para 3ue solo los usuarios "alidados sean los Inicos 3ue puedan efectuar
pr5stamos de liros as0:
-?adamos una nue"a carpeta llamada Seguridad ' mue"o con clic9 sostenido el formulario %restamos a esta carpeta'
tami5n deer0a mo"er el formulario %restamos%endientes pero en este e,emplo no lo "amos a !acer' a!ora "amos a
la pgina Default para modificar el salto ya 3ue no !emos tenido en cuenta la nue"a carpeta Seguridad para saltar a
la pgina %restamos' "amos al asistente de tareas' editar plantilla' seleccionamos el control &yper(in9' en su
asistente Editar Enlace de Datos' en .a"igateArl modificamos el enlace agregando la carpeta Seguridad as0:
E"al/QId6liroQ' QVRSeguridadR%restamos+asp8YId6liroLW4XQ1D programamos para 3ue la pagina por defecto de
arran3ue sea Default+asp8+
-!ora ya 3uedo preparado el sitio para aplicar seguridad en ase a una red' entonces "ol"emos a ingresar al menI
Sitio We' configuracin -S%+.ET/para a?adir una regla 3ue e"ite 3ue los usuarios annimos ingresen al contenido
de la carpeta Seguridad1' "amos a seguridad' crear reglas de acceso' seleccionamos la carpeta seguridad'
c!e3ueamos usuarios annimos y en permiso denegar' aceptar y cerramos la "entana' a!ora proemos la
aplicacin+
-!ora lo 3ue nos !ace falta es el cdigo para poder al3uilar una pel0cula' "amos a la pgina %restamos 3ue est
dentro de la carpeta Seguridad y "amos al e"ento clic9 del control Button %restar en lgica de aplicacin y
codificamos sus acciones' tami5n se dee crear un procedimiento as0:
%artial $lass %restamos
In!erits System+We+AI+%age
%ulic Su %restar(iro/ByVal (iro -s String' ByVal Asuario -s String1
Z<+ $O@%GOB-G (-S $O%I-S
Dim -dapter(iros -s .e) (irosDSTale-dapters+(irosTale-dapter
ZVariales 3ue contendran la configuracion !ec!a en las entidades de negocio del DataSet (irosDS'es decir
declaramos el adaptador de liros+
Dim (irito -s .e) (irosDS
Z"ariale 3ue cargara el liro pasado mediante el Id6titulo de la entidad de negocio'es decir declaramos el DataSet de
liros+
-dapter(iros+PillById6liro/(irito+(iros' (iro1
Z-!ora rellenamos el DataSet utili;ando el -daptador' es decir le pasamos PillById6liro 3ue es el Id6titulo 3ue lo
tengo definido por parametros y el DataTale 3ue es (iros mas el
Id6titulo 3ue es (iro+
If (irito+(iros+$ount L 4 T!en
Zsi el Id6titulo no e8iste entonces
T!ro) .e) -rgumentE8ception/Q.o e8ite el liro especificadoQ1
Z-rro,o un a8cepcion
End If
If (irito+(iros/41+$opias L 4 T!en
Z$omprueo si aun 3uedan copias de liros para al3uilar
T!ro) .e) -rgumentE8ception/Q.o !ay unidades disponilesQ1
End If
Z2+ DE$(-G-@OS (-S $O%I-S
ZSi el liro e8tiste y 3uedan copias entonces
(irito+(iros/41+$opias 7L < Zdecremento las copias
-dapter(iros+Apdate/(irito1 Z-ctuali;o los camios utili;ando el adaptador

ZB+ -*GE*-G E( %GEST-@O
Dim -dapter%restamo -s .e) %restamosDSTale-dapters+%restamosTale-dapter
Dim %restamo -s .e) %restamosDS
%restamo+%restamos+-dd%restamosGo)/Asuario' (iro' DateTime+.o)' Palse1
Z-?ado una nue"a fila dentro del DataSet 3ue a!ora mismo esta "acia 3ue tenga el Asuario' el Id6(iro'la fec!a
actual' y si esta de"uelta o no+
-dapter%restamo+Apdate/%restamo1
Z%aso al adapter de %restamos le paso el DataSet para 3ue incluya la nue"a fila a?adida en la BD+
End Su
%rotected Su B%restamo6$lic9/ByVal sender -s O,ect' ByVal e -s System+E"ent-rgs1 &andles B%restamo+$lic9
Dim (iro -s String L Ge3uest+SueryString/QId6liroQ1
ZVoy a coger el Id6liro del SueryString y lo "oy a meter en una "ariale de tipo string esta "ariale llamada (iro
deri"a del parametro puesto en el procedimieto anterior /%restar(iro1+
Dim Asuario -s String L Aser+Identity+.ame
Z$o,o el nomre del usuario de la entidad del usuario 3ue se !a autenticado+
esta "ariale llamada Asuario deri"a del parametro puesto en el procedimieto anterior /%restar(iro1+
Try
%restar(iro/(iro' Asuario1
Z-!ora intento prestar el (iro llamando el metodo 3ue tiene todo el proceso de liro
(@ensa,e+Te8t L Q(iro %restadoQ
$atc! e8 -s E8ception
(@ensa,e+Te8t L e8+@essage
(@ensa,e+Pore$olor L Dra)ing+$olor+Ged
ZEl mensa,e de la e8cepcion saldra en ro,o
End Try
(@ensa,e+Visile L True
B%restamo+Visile L Palse
DetailsVie)<+DataBind/1
End Su
End $lass
.ota Importante: El proceso generado anteriormente llamado %restar(iro es peligroso ya 3ue si se decrementaran
las copias y una "e; decrementado no se pudiera agregar el pr5stamo estar0amos perdiendo liros prestados donde
no tenemos el registro de ese pr5stamo pues no sar0amos 3ue persona presto el liro' no le podr0amos reclamar' en
conclusin se perder0an liros+
Hacer que la operacin de prstamo sea una operacin transaccional y modificar el aspecto de toda la
aplicacin utilizando una nueva capacidad de ASP.NET .!.
El proceso pr5stamo es delicado ya 3ue in"olucra 2 talas y en concreto en el cdigo anterior:
-dapter(iros+PillById6liro/(irito+(iros' (iro1
Z-!ora rellenamos el DataSet utili;ando el -daptador' es decir le pasamos PillById6liro 3ue es el Id6liro 3ue lo
tengo definido por parametros y el DataTale 3ue es (iros mas el
Id6liro 3ue es (iro+
If (irito+(iros+$ount L 4 T!en
Zsi el Id6titulo no e8iste entonces
T!ro) .e) -rgumentE8ception/Q.o e8ite el liro especificadoQ1
Z-rro,o un a8cepcion
End If
If (irito+(iros/41+$opias L 4 T!en
Z$omprueo si aun 3uedan copias de liros para al3uilar
T!ro) .e) -rgumentE8ception/Q.o !ay unidades disponilesQ1
End If
Z2+ DE$(-G-@OS (-S $O%I-S
ZSi el liro e8tiste y 3uedan copias entonces
(irito+(iros/41+$opias 7L < Zdecremento las copias
-dapter(iros+Apdate/(irito1 Z-ctuali;o los camios utili;ando el adaptador
Se reduce en una unidad las copias e8istentes de liros y si fallara la e,ecucin lo 3ue estar0a claro es 3ue no podr0a
agregar el pr5stamo:
Dim -dapter%restamo -s .e) %restamosDSTale-dapters+%restamosTale-dapter
Dim %restamo -s .e) %restamosDS
%restamo+%restamos+-dd%restamosGo)/Asuario' (iro' DateTime+.o)' Palse1
Z-?ado una nue"a fila dentro del DataSet 3ue a!ora mismo esta "acia 3ue tenga el Asuario' el Id6(iro'la fec!a
actual' y si esta de"uelta o no+
-dapter%restamo+Apdate/%restamo1
Z%aso al adapter de %restamos le paso el DataSet para 3ue incluya la nue"a fila a?adida en la BD+
%or lo tanto !ar0amos decrementado las copias pero no sar0amos 3ue usuario fue el 3ue presto el liro/como
indi3ue anteriormente se perder0a un liro1' para solucionar esto deemos !acer 3ue el proceso sea transaccional' es
decir 3ue se e,ecuten todos los pasos y 3ue si en la e,ecucin algo "a mal no se decrementan las copias y se !ace
as0:
%rimera opcin: Asamos la transaccin -DO+.ET+
Segunda opcin: Son los ser"icios empresariales de +.ET para transacciones distriuidas
Tercera opcin /nue"a1: Es utili;ar una nue"a ilioteca de clases del +net Prame)or9 2+4 llamado
System+Transactions/permite definir conte8tos o mitos transaccionales1' este mecanismo usa el ser"icio de
coordinacin de transacciones distriuidasD para utili;ar ese mecanismo a?adamos una nue"a referencia a nuestro
proyecto para usar esa ilioteca as0:
$lic9 derec!o sore el proyecto' agregar referencia' escogemos en la lista de +.et MSystem+Transactions#' aceptar'
nos uicamos de nue"o en el cdigo lgica de aplicacin del formulario %restamos y agregamos el siguiente cdigo
al procedimiento %restar(iro /para mayor entendimiento lo nue"o agregado "a en color ro,o a continuacin1:
Imports System.Transactions
%artial $lass %restamos
In!erits System+We+AI+%age
%ulic Su %restar(iro/ByVal (iro -s String' ByVal Asuario -s String1
Using tx As New TransactionScope
Z<+ $O@%GOB-G (-S $O%I-S
Dim -dapter(iros -s .e) (irosDSTale-dapters+(irosTale-dapter
ZVariales 3ue contendran la configuracion !ec!a en las entidades de negocio del DataSet (irosDS'es decir
declaramos el adaptador de liros+
Dim (irito -s .e) (irosDS
Z"ariale 3ue cargara el liro pasado mediante el Id6titulo de la entidad de negocio'es decir declaramos el DataSet de
liros+
-dapter(iros+PillById6titulo/(irito+(iros' (iro1
Z-!ora rellenamos el DataSet utili;ando el -daptador' es decir le pasamos PillById6titulo 3ue es el Id6titulo 3ue lo
tengo definido por parametros y el DataTale 3ue es (iros mas el
Id6titulo 3ue es (iro+
If (irito+(iros+$ount L 4 T!en
Zsi el Id6titulo no e8iste entonces
T!ro) .e) -rgumentE8ception/Q.o e8ite el liro especificadoQ1
Z-rro,o un a8cepcion
End If
If (irito+(iros/41+$opias L 4 T!en
Z$omprueo si aun 3uedan copias de liros para al3uilar
T!ro) .e) -rgumentE8ception/Q.o !ay unidades disponilesQ1
End If
Z2+ DE$(-G-@OS (-S $O%I-S
ZSi el liro e8tiste y 3uedan copias entonces
(irito+(iros/41+$opias 7L < Zdecremento las copias
-dapter(iros+Apdate/(irito1 Z-ctuali;o los camios utili;ando el adaptador

ZB+ -*GE*-G E( %GEST-@O
Dim -dapter%restamo -s .e) %restamosDSTale-dapters+%restamosTale-dapter
Dim %restamo -s .e) %restamosDS
%restamo+%restamos+-dd%restamosGo)/Asuario' (iro' DateTime+.o)' Palse1
Z-?ado una nue"a fila dentro del DataSet 3ue a!ora mismo esta "acia 3ue tenga el Asuario' el Id6(iro'la fec!a
actual' y si esta de"uelta o no+
-dapter%restamo+Apdate/%restamo1
Z%aso al adapter de %restamos le paso el DataSet para 3ue incluya la nue"a fila a?adida en la BD+
tx.Complete()
ZDefine una transaccin y 3ue todas las operaciones se realicen dentro del conte8to transaccional sin reali;arse en
firme' si se produce algun fallo se lieran los recurso de ese conte8to transaccional y no pasa nada' se arro,a la
e8cepcion oportuna' y si no sucede nada todo lo 3ue !ay en ese conte8to transaccional se seali;a en firme cuando
se llama al metodo complete de la transaccion+
End Using
End Su
-!ora podemos proar la aplicacin pero !ay un detalle y es 3ue deemos arrancar desde nuestro %$ el ser"icio del
DT$ M$oordinador de transacciones distruiuidas# as0:
$lic9 derec!o en E3uipo' -dministrar' Ser"icios y -plicaciones' Ser"icios' seleccionamos $oordinador de
Transacciones /"erificamos si su estado esta iniciado o no' de no estarlo con dole clic9 ingresamos y le decimos en
estado del ser"icio iniciar1+
-!ora si podemos proar la pgina' al prestar un liro 3ue en copias ya est5 en 4' me dee en"iar el mensa,e en
color ro,o 3ue diga Mno !ay unidades disponiles#' gracias al mito transaccional no se generan complicaciones+
-!ora si "amos a camiar el aspecto del sitio )e' para ello "oy a utili;ar lo 3ue se llama temas y pieles para camiar
el aspecto sin camiar las paginas' y lo !ago as0:
$lic9 derec!o sore el proyecto' -gregar $arpeta -S%+.ET' Tema/camio el nomre tema< por tema1' clic9 derec!o
sore este tema' adicionar nue"o elemento' escogemos &o,a de Estilos /le doy el nomre de Estilos1' agregar' en el
cuerpo digito:
ody W
ac9ground: Blac9
X
Voy de nue"o a Tema y a?ado un arc!i"o de mascara dndole el nomre 3ue trae por defecto y a?ado el siguiente
cdigo para camiar las filas de los controles *ridVie) del tipo de letra 3ue ten0a por Pran9lin *ot!ic m5dium:
Jasp:*ridVie) runatLQSer"erQK
JGo)Style Pont7.amesLQPran9lin *ot!ic @ediumQ Pont7Si;eLQ<4ptQ RK
JRasp:*ridVie)K
Si corremos la aplicacin no nos arro,ara ningIn camio ya 3ue no !emos aplicado el tema' para ello deemos tener
claro si 3ueremos !acerlo a todo el sitio MWe$onfig# /en el We$onfig despu5s de las l0neas Jsystem+)eK J]77' en
interfa; de usuario agrego lo siguiente: Jpages t!emeLQTemaQRK1' o a ni"el de pgina /E,emplo: "amos al dise?o de
Default' en propiedades#DO$A@E.T#' uscamos T!emeLTema 1
"#A $NTE#$%EN&$A &'NS$STE N' S'#' EN E# &'N'&$($ENT' S$N' TA()$EN EN #A *EST+E,A *E
AP#$&A+ #'S &'N'&$($ENT'S EN #A P+A&T$&A-. Aristteles
N'TA. Este material es solo un introductorio, el estudiante de/e fortalecer estos conceptos a medida que se
van viendo las clase y ane0arlos al portafolio.
I!"A DE# ESTUDIANTE I!"A $ CEDU#A DE# ACUDIENTE
I!"A DE# INST!UCTO!

You might also like