Clínica para el Examen de Certificació n 70-536 {REANUDACIÓN}

 H@la a todos.


Bueno revisando la lista de los link que visito, Retome la idea de la clinica de de certificacion 70-536 que la gente de devworx tiene; Y bueno ya hacia tiempo que no actualizaban los contenidos, pero hoy a vuelta de correo confirmaron los nuevos temas y bueno, aqui dejo la lista de temas que actualizarón.



S@ludos.


Romny

[RTRIM] Una función que ayuda bastante.

H@la.

Bueno esta haciendo un proceso de migración de datos y me encontre con un ligero problema o inconveniente.

Resulta que cundo hay campos char y importas datos desde una fuente externa, en este caso Excelito. Cuando se hacia la importacion este rellenaba con espacion en blanco hasta completar el tamaño del campo. Este a demas que trae problemas con la interfas ya que el formulario se desborda por lo espcacios en blanco y bueno ciestos de registros que tiene la tabla, viene la pregunta que hacer.

Una opción seria cambiar el tipo de datos y volver a importar.

Otra es buscar en los libros de ayuda de Sql Server, y bueno me decidi por esta opcion y encontre la funcion RTRIM y LTRIM. Y lo que hice fue basicamente acutualizar ese campo.

   1: -- ================================================
   2: -- TSQL para actualizar campo con RTRIM
   3: -- ================================================
   4:  
   5: update Tb_CIE10 set CIE_Descripcion = RTRIM(CIE_Descripcion)

 

Bueno, Problema resuelto. Pero igual me quedo la duda y probe con ingresar los registros con SQL y persistio el problema. Con tipo varchar no hay problema, pero con char si hay el inconveniente. Gracioso no!.

S@ludos.

Romny

ASP.NET Portal Starter Kit v2.0

Hola otra vez por estos lados.

Bueno revisando los nuevos proyectos de Codeplex, me encotre con un proyecto que alegrara a muchos, ya que cuando estabamos comenzando con asp.net 1.0 y 1.1 esta este tamplate de ASP.NET Portal y bueno parece que le hicieron el proceso mas preciedo por algunos desarrolladores que es, el proceso de reingenieria y sacaron la version ASP.NET Portal Starter Kit v2.0 de este template.

Portal_Big

Coloco algunos feautures que trae esta version.

  • Dynamic Portal Infrastructure
  • 10 basic portal modules for common types of content
  • 2 extra portal modules: RSS Feed and Wiki new.jpg
  • A «pluggable» framework that is simple to extend with custom portal modules
  • Online administration of portal layout, content and security
  • XML based definition of portal layout
  • Database based definition of portal layout new.jpg
  • Roles-based security for viewing content, editing content, and administering the portal
  • Full mobile support using the ASP.NET Mobile Controls
  • Multiple database support easily extensible to support more databases new.jpg
  • Web service layer ASMX and WCF new.jpg
  • Smart Client to support Admins and power users new.jpg

Tecnologias que usa.

  • .NET 2.0 .NET 3.5 new.jpg
  • Web Client Software Factory new.jpg
  • Object Builder new.jpg
  • Smart Client Software Factory new.jpg
  • ASP.NET Mobile Controls
  • Three-tier architecture with ASP.NET
  • Role Based Security
  • Layered architecture new.jpg
    • Vertical: DataBusinessPresentation
    • Horizontal: Services, Framework
  • Design Patterns new.jpg
  • NUnit Tests new.jpg
  • Master Pages, SiteMaps & Themes new.jpg

Por encima se ve que usa lo nuevo, pero se me hace raro que no use AJAX.

Hablamos.

Romny

Manejando Usuarios Parte II

Hola que tal, bueno siguiendo con el tema de los proveedores de asp.net quisiera mostrar como hacer para actualizar roles al determinado usuario.

Vamos a crear en una nuevo pagina, el siguiente aspecto.

rol3

Basicamente lo que vamos a hacer es que dependiendo del usuario que seleccione en este formulario me carge algunos datos basicos de dicho usuario y ademas poder asignarle un rol si este no tiene un rol.

Este es el codigo que utilize para manejar esta parte.

   1: string userName = "";
   2:  
   3:     protected void Page_Load(object sender, EventArgs e)
   4:     {
   5:         // retener el username con un querystring
   6:         userName = this.Request.QueryString["UserName"];
   7:               
   8:  
   9:         if (!this.IsPostBack)
  10:         {
  11:             // mostrar los detalles del usuario
  12:             MembershipUser user = Membership.GetUser(userName);
  13:             lblUserName.Text = user.UserName;
  14:             lnkEmail.Text = user.Email;
  15:             lnkEmail.NavigateUrl = "mailto:" + user.Email;
  16:             lblRegistered.Text = user.CreationDate.ToString("f");
  17:             lblLastLogin.Text = user.LastLoginDate.ToString("f");
  18:             lblLastActivity.Text = user.LastActivityDate.ToString("f");
  19:             chkOnlineNow.Checked = user.IsOnline;
  20:             chkApproved.Checked = user.IsApproved;
  21:             chkLockedOut.Checked = user.IsLockedOut;
  22:             chkLockedOut.Enabled = user.IsLockedOut;
  23:  
  24:             BindRoles();
  25:         }
  26:     }
  27:  
  28:     private void BindRoles()
  29:     {
  30:         // Llenar el CheckBoxList con todas las funciones disponibles y, a continuación, seleccione 
  31:          // A los que pertenece el usuario
  32:         chklRoles.DataSource = Roles.GetAllRoles();
  33:         chklRoles.DataBind();
  34:         foreach (string role in Roles.GetRolesForUser(userName))
  35:             chklRoles.Items.FindByText(role).Selected = true;
  36:     }
  37:  
  38:     protected void btnCreateRole_Click(object sender, EventArgs e)
  39:     {
  40:         if (!Roles.RoleExists(txtNewRole.Text.Trim()))
  41:         {
  42:             Roles.CreateRole(txtNewRole.Text.Trim());
  43:             BindRoles();
  44:         }
  45:     }
  46:  
  47:     protected void btnUpdateRoles_Click(object sender, EventArgs e)
  48:     {
  49:         // actualizar las funciones con el usuario
  50:         string[] currRoles = Roles.GetRolesForUser(userName);
  51:         if (currRoles.Length > 0)
  52:             Roles.RemoveUserFromRoles(userName, currRoles);
  53:         
  54:         List<string> newRoles = new List<string>();
  55:         foreach (ListItem item in chklRoles.Items)
  56:         {
  57:             if (item.Selected)
  58:                 newRoles.Add(item.Text);
  59:         }
  60:         Roles.AddUserToRoles(userName, newRoles.ToArray());
  61:  
  62:         lblRolesFeedbackOK.Visible = true;
  63:     }
  64:  
  65:     protected void chkApproved_CheckedChanged(object sender, EventArgs e)
  66:     {
  67:         MembershipUser user = Membership.GetUser(userName);
  68:         user.IsApproved = chkApproved.Checked;
  69:         Membership.UpdateUser(user);
  70:     }
  71:  
  72:     protected void chkLockedOut_CheckedChanged(object sender, EventArgs e)
  73:     {
  74:         if (!chkLockedOut.Checked)
  75:         {
  76:             MembershipUser user = Membership.GetUser(userName);
  77:             user.UnlockUser();
  78:             chkLockedOut.Enabled = false;
  79:         }
  80:     }

Y una pequena imagen para mostrar el funcionamiento.

rol4

Codigo

Saludos

Romny

Manejando Usuarios con los proveedores de asp.net en mi app

Hola gente de Geeks.


Si te gusta trabajar con los proveedores de datos de asp.net como a mi, sabras que la administracion de usuarios se maneja a travez de un sitio independiente. Pero que pasaria si pudieras integrar esto en tu aplicacion, pues te ahorraria tiempo y muchos dolores de cabeza.


En este post voy a indicar como identificar los usuarios de mi app. en los proximos post en como hacer un poco de adminstracion de estos mismos.


Primero lo primero, en estos post hacen referencia a los proveedores que maneja asp.net. Link 1, Link 2, Link 3.


Bueno, despues de crear usuarios y roles con la herramienta que trae VS y de comprobar la bd que se crea.


rol1


Primero vamos a mostrar cuantos usuarios hay y cuantos estan en linea, Ademas voy a cargar en un repetear las letras del alfabeto para buscar los usuarios.


 



   1: private MembershipUserCollection allUsers = Membership.GetAllUsers();
   2: protected void Page_Load(object sender, EventArgs e)
   3: {
   4:     if (!this.IsPostBack)
   5:     {
   6:         lblTotUsers.Text = allUsers.Count.ToString();
   7:         lblOnlineUsers.Text = Membership.GetNumberOfUsersOnline().ToString();
   8:  
   9:         string[] alphabet = «A;B;C;D;E;F;G;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;All».Split(‘;’);
  10:         rptAlphabet.DataSource = alphabet;
  11:         rptAlphabet.DataBind();
  12:     }
  13:  
  14: }

Luego voy a hacer una busqueda tanto por username como por mail.



   1: protected void btnSearch_Click(object sender, EventArgs e)
   2:     {
   3:         bool searchByEmail = (ddlSearchTypes.SelectedValue == «E-mail»);
   4:         gvwUsers.Attributes.Add(«SearchText», «%» + txtSearchText.Text + «%»);
   5:         gvwUsers.Attributes.Add(«SearchByEmail», searchByEmail.ToString());
   6:         BindUsers(false);
   7:     }

Ademas manejo unos eventos tanto del repeater como del gridview donde se cargan los datos.



   1: private void BindUsers(bool reloadAllUsers)
   2:     {
   3:         if (reloadAllUsers)
   4:             allUsers = Membership.GetAllUsers();
   5:  
   6:         MembershipUserCollection users = null;
   7:  
   8:         string searchText = «»;
   9:         if (!string.IsNullOrEmpty(gvwUsers.Attributes[«SearchText»]))
  10:             searchText = gvwUsers.Attributes[«SearchText»];
  11:  
  12:         bool searchByEmail = false;
  13:         if (!string.IsNullOrEmpty(gvwUsers.Attributes[«SearchByEmail»]))
  14:             searchByEmail = bool.Parse(gvwUsers.Attributes[«SearchByEmail»]);
  15:  
  16:         if (searchText.Length > 0)
  17:         {
  18:             if (searchByEmail)
  19:                 users = Membership.FindUsersByEmail(searchText);
  20:             else
  21:                 users = Membership.FindUsersByName(searchText);
  22:         }
  23:         else
  24:         {
  25:             users = allUsers;
  26:         }
  27:  
  28:         gvwUsers.DataSource = users;
  29:         gvwUsers.DataBind();
  30:     }
  31:  
  32:     protected void rptAlphabet_ItemCommand(object source, RepeaterCommandEventArgs e)
  33:     {
  34:         gvwUsers.Attributes.Add(«SearchByEmail», false.ToString());
  35:         if (e.CommandArgument.ToString().Length == 1)
  36:         {
  37:             gvwUsers.Attributes.Add(«SearchText», e.CommandArgument.ToString() + «%»);
  38:             BindUsers(false);
  39:         }
  40:         else
  41:         {
  42:             gvwUsers.Attributes.Add(«SearchText», «»);
  43:             BindUsers(false);
  44:         }
  45:  
  46:     }
  47:  
  48:     protected void gvwUsers_RowCreated(object sender, GridViewRowEventArgs e)
  49:     {
  50:         
  51:         if (e.Row.RowType == DataControlRowType.DataRow)
  52:         {
  53:             ImageButton btn = e.Row.Cells[6].Controls[0] as ImageButton;
  54:             btn.OnClientClick = «if (confirm(‘Esta seguro de eliminar esta cuenta?’) == false) return false;»;
  55:         }
  56:     }
  57:  
  58:     protected void gvwUsers_RowDeleting(object sender, GridViewDeleteEventArgs e)
  59:     {
  60:         
  61:         string userName = gvwUsers.DataKeys[e.RowIndex].Value.ToString();
  62:         ProfileManager.DeleteProfile(userName);
  63:         Membership.DeleteUser(userName);
  64:         BindUsers(true);
  65:         lblTotUsers.Text = allUsers.Count.ToString();
  66:     }

rol2


En los proximos articulos mostrare como actualizar informacion de los usuarios y roles. De esta forma no podremos depender de la administracion web que viene en VS. Por cierto el css que use fue el de Whidbey Rocks.


Codigo


Espero les guste mi pequeño aporte.


Saludos.


Romny

Usando el menu de ASP.NET 2.0 CSS Friendly con autenticacion

Hola, estaba mirando estas entradas de Eugenio y Sergio Tarillo referente a Asp.net 2.0 css Friendly. Y bueno quise probar el control del menu con la funcionalidad de autenticacion.

Realmente es mas sencillo de lo que pense, Normamente con el control menu lo ligamos al sitemap y en el sitemap le indicamos que roles pueden acceder a determinada pagina.

Despues de configurar los roles de mi aplicacion. Lo unico que eh agregado al web.cong ah sido el <localtion> y el metodo de autenticacion.

 

   1: <authentication mode="Forms">
   2:       <forms defaultUrl="~/Default.aspx" />
   3:  </authentication>
   1: <location path="Menu.aspx">
   2:     <system.web>
   3:       <authorization>
   4:         <allow roles="Admin"/>
   5:         <deny users="*"/>
   6:       </authorization>
   7:     </system.web>
   8:   </location>

y bueno les dejos la imagenes

css1

css2

css3

css4

Mas facil no puede ser. Lo bueno de esto es que reducimos lineas de codigo o paremetros extra.

Saludos.

Romny

ListManager de Scrum V1.2 no funciona con Scrum V2.1

TFSCrum1

Bueno estoy migrando mis proyectos de Scrum V1.2 en TFS2005 a TFS2008 con Scrum V2.1.

ListManager es una herramienta que permite crear los Team y los Environments para el proyecto. Bueno como en la nueva template no existen la herramientas administrativas que traen la version anterior, pense que si hacia la conexion del ListManager del TFS2005 hacia el TFS2008 todo saldria bien.

Pero sorpresa!! el ListManager no reconoce los proyectos hechos con la version nueva del template. Pense que era problema de conectividad pero no fue asi. les dejo las imagenes.

TFSCrum

Esto es lo que pasa cuando se conecta a TFS2008 con Scrum V2.1

TFSCrum3

Conectividad en ambos servidores. Cabe destacar que son VM de Microsoft. TFSRTM = 2005. TFSRTM08 = 2008

 TFSCrum2

TFSCrum1

Saludos.

Romny

TFS – Resolviendo Error TF30170 – TF218002

Bueno, esta configurando TFS 2008 con el template de Scrum v2.1. Todo parecia bien, hasta que empeze a crear proyectos con el template hasta que salio el primero error. Dice mas o menos asi.

Error TF30170: The plugin Microsoft.ProjectCreationWizard.Portal failed during task SharePointPortal from group Portal. 

Explanation
Plugin error text: “TF218002: Project creation failed. The New Team Project Wizard could not access the Site Service Web Service Web service (Sites.asmx) in Windows SharePoint Services. Be sure that your Windows SharePoint Services server is operating correctly. Review the log for more information appropriate to your version of Windows SharePoint Services.” 

User Action
Contact your Team Foundation Server administrator. 

Bueno, comenze a ver investigar el erro y ver soluciones, pero nada concreto. Asi que probe algo sencillo y es ver si mi usuario tenia los privelegios para wss 3.0 y eh hay el error, falta agregar el grupo de seguridad de sharepoint.

tfs

Saludos.

Romny

Roles que se aplican en Scrum

En el modelo de desarrollo Scrum, existe el concepto técnico de Rol.  En este articulo quiero tratar sobre los diferentes tipos de roles con los cuales la metodología nos ofrece para trabajar.

En cierta forma el funcionamiento de la metodología en la organización depende de unos factores muy  simples.

  • Caracteristicas  del entorno del desarrollo:  Se refiere a la completa colaboración tanto de las personas encargadas del proyecto como de las personas de la empresa.
  • Conociemiento de la metodología tanto de las personas del proyecto, como de la empresa.
  • Manejo de Roles:
    • Rol de producto
    • Rol  de desarrollo
    • Rol de Scrum

Rol de producto – Product Owner

Product Owner

Es la persona designada por el cliente para que se encarge del proyecto. Es la única persona que conoce lo que el cliente quiere y todo el entorno de negocio; como tal en la persona que esta mas interesada en tener un producto final, también es la persona encargada del Product Backlog.

Es la persona encargada de la financiación del proyecto, de que el producto final este de acorde con lo que el cliente quiere.

Rol de Desarrollo –  Team Members

Team

En el equipo todos incluyendo al Scrum Master deben conocer la metodología y son los responsables de que se cumpla.

Estos chicos son los encargados de cubrir todas las necesidades que se presentar para generar el producto final, es un equipo multiciplinar,normalmente consta de un analista, de un diseñador , de un codificador , de una persona que documenta, de una persona de QA(Aseguramiento de la Calidad). 

Son los encargados de coger todos los ítems del Product Backlog y darles forma (Producto Final). Si el equipo tiene dudas en cualquier cosa, pueden llamar a un experto (Mentoring) para que los oriente.

Rol de Scrum – Scrum Master

Scrum Master
Como tal Scrum es una metodología y alguien  tiene que garantizar el funcionamiento de esta, esa es la labor del Scrum Master, velar por que todos los pasos de la metodología se cumplan; además si hay algún tipo de impedimento por el cual el funcionamiento de la metodología se ve afectado, debe darle solución. Igual si el Team  tiene dificultades debe velar por que se resuelvan. En si es el papa de los pollitos.

Saludos.

Romny