sábado, 31 de diciembre de 2011

Instalar SQl server 2008 Express con Management en Windows 7 Studio

Bueno amigos no les voy a dar la lata con el tema de como instalarlo por que el programa viene APH (A prueba de Hue..), pero si les voy a recomendar el software que deben descargarse:

Microsoft® SQL Server® 2008 Express with Advanced Servicesdesde la siguiente URL:

Lo primero que deben hacer es instalar lo que desean, por cierto esta version viene con Management Studio incorporada por lo cual deben seleccionar esa opcion para poder pilotar Managemen Studio

En el caso de que al final les aparezca el siguiente mensaje y no se intale el Management Studio, puede ser por que existe un programa instalado en el PC de la familia de Visual Studio 2008, el mensaje es el siguiente:

Another Version of Microsoft Visual Studio 2008 has been Detected on this System that must be Updated to SP1

Lo que NO deben hacer es descargarse el Service Pack 1 de Visual Studio 2008, sino mas bien berificar las siguientes cosas:

Estan instalados los siguientes programas o en su defecto Visual Studio 2008?:

Microsoft Visual C++ 2008 SP1 Redistributable - x64 9.0.30729.17 is installed.
Microsoft Primary Interoperability Assemblies 2005 9.0.21022 is installed.
Microsoft Report Viewer Redistributable 2008 SP1 is installed.

Para solucionar el problema se recomienda lo siguiente: deben tener en cuenta que no todas las rutas del RegEdit son las mismas, por lo cual deben buscar las llaves en la Carpeta DevDiv del regedit

HKEY_LOCAL_MACHINE\SOFTWARE\[...\]Microsoft\DevDiv\VS\Servicing\9.0


Lo que esta dentro de [...\] puede ser opcional, puede haber mas ruta o no.

y escribir el valor 1 para las llaves SP y SP*, son solo dos archivos eeehhh!.

La informacion de como pueden arreglar este problema la encontre en los siguientes link:

Programas que pueden dar problemas
Como corregir problema en el RegEdit

y si necesitan seguir los pasos de la instalacion, pueden usar esta URL que esta bien aunque un poco desordenada con las imagenes, ya he dejado la informacion de los links ahí también. Un Saludo a dotos.

Pasos para instalar SQL Server Express

Ya he puesto mi granito de arena ahi y he dejado las URL para solucionar el problema jejejejeje.


viernes, 30 de diciembre de 2011

Datatable y Sql (Insercion masiva en servidor SQL)

Hola amigos, yo por estos lados de nuevo.

Bueno hoy quiero dejarles un codigo muy simple pero que en el momento de realizar inserciones de registros masiva puede ser muy bueno, los requisitos son los siguientes:

Debemos tener la tabla que contendra la información mapeada en un dataset desde la base de datos.

Luego debemos crear los registros en este datatable y por ultimo debemos enviar la tabla directamente al Servidor de SQL, el cual se encargara de realizar la insercion. Con ello entrego el codigo que deben utilizar:

Using cnx As New SqlConnection("String de conexion a la Base de Datos")
cnx.Open()
Using bCopy As New SqlClient.SqlBulkCopy(cnx)
bCopy.DestinationTableName = dt.TableName
bCopy.WriteToServer(dt)
End Using
End Using


Como ven el codigo es muy simple y no requiere utilizar ni prosedimientos almacenados si el metodo update del TableAdapter. Espero que les ayude.

viernes, 21 de octubre de 2011

Exchange Server WebService

Bueno amigos, mil gracias por seguirme, la verdad es que he estado perdido durante mucho tiempo por temas de trabajo, pero bueno como dicen, hay que darle hasta que duela.

Esta vez subire codigo asociado a Exchange Service WebService probado en las versiones 2007 SP1 y y 2010. La informacion asociada a este tema la pueden encontrar aqui

Normalmente, existen diversas formas y ejemplos de como trabajar con Exchange a travez de Microsoft Outlook, pero que pasa cuando queremos que multiples usuarios trabajen con sus respectivas cuentas de Exchange. Bueno la solucion es muy simple, podemos habilitar y usar los servicios de Exchange Webservices para esto.

En los siguientes ejemplos veremos como poder habilitar y crear una conexion valida con Exchange WebService, como enviar correos asi como tambien crear citas y contactos, adicionalmente puedo decir que con este servicio podriamos usuar casi todos los mecanismos que exchange ofrece para administrar una cuenta de e-mail por codigo.

Lo primero es lo primero, existen dos formas de conectarse usuando usuarios o por suplantacion, el problema de usar usuarios es que deben tener todas las cuentas y claves del servicio por lo cual, y siempre cuando se pueda, usar las claves de red que el sistema entrega.

Aqui entrego las tres posibles formas de conexion, pero para que todo funcione como debe ser, primero debemos sobreescribir un servicio, solo en el caso de que les aparezca un error de conexion.

System.Net.ServicePointManager.ServerCertificateValidationCallback = Function(obj As Object, certificate As X509Certificate, chain As X509Chain, errors As SslPolicyErrors) True

En el caso de que lo desearamos podriamos definir en que version deseamos trabajar, para ello debemos usar las siguientes lineas de codigo.

Dim version As ExchangeVersion = ExchangeVersion.Exchange2007_SP1
Dim service As ExchangeService = New ExchangeService(version)

este codigo evitara cualquier posible problema de conexion, pero deben tener mucho cuidado porque no todos los certificados de seguridad retornan un valor boolean True.

Realizado este paso podremos continuar con la conexion, existen tres claras formas las cuales se pueden realizar de la siguiente forma:

Si estan trabajando en entornos Web:
service.Credentials = New WebCredentials("Usuario", "Clave", "Dominio")

Si estan trabajando en un entorno de red de trabajo:
service.Credentials = New NetworkCredential("Usuario", "Clave", "Dominio")

Ahora en el caso de que se pueda hacer, es decir que existe compatibilidad entre los usuarios de la red de trabajo y los usuarios del servidor de exchange, se puede usar la siguiente linea de codigo:
service.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials

Lo siguiente es definir sobre que servidor deben trabajar, para ello deben definir las siguientes lineas de codigo
service.Url = New Uri("http://Nombre de Servidor/ews/exchange.asmx")

Aunque normalmente se trabaja sobre un servidor con el servicio SSL habilitado por lo cual se debe usar https
service.Url = New Uri("https://Nombre de Servidor/ews/exchange.asmx")

Con esto podremos decir que ya estariamos listos para enviar un email, esta es la primera prueba, si la pasan es que su servidor de Exchange OWA tiene bien configurado Exchange Server WebService. Para hacer esto me di mil vueltas asi que las lineas de codigo que estoy dejando aquí son validas.

Para enviar un correo pueden utilizar las siguientes lineas de código.

Dim message As EmailMessage = New EmailMessage(service)
message.Subject = "Esto es una prueba"
message.Body = "Prueba de EWS Managed API."
message.ToRecipients.Add("usuario@dominio.extension")
message.SendAndSaveCopy()

Hasta aqui, si al ejecutar la prueba les salta un error, pueden existir cosas que han olvidado hacer, la primera es que no han sobrescrito la respuesta al metodo System.Net.ServicePointManager.ServerCertificateValidationCallback descrito al inicio del Post o la segunda es que no esta configurado el servicio. Peor aun puede ser que el mecanismo de conexion para el servicio no sea valido, en tal caso deben ponerse en contacto con el administrador del servico.

Existen mecanismos para buscar y listar, leer, modificar o borrar correos, los cuales pueden encontrar en el MSDN, yo me he tenido que consentrar en otras dos opciones Citas y Contactos, por lo cual continuo con estos temas, pero dejenme decirles que los mecanismos son muy similares solo cambian las instancias de llamadas a los objetos

Administracion de Citas(Appointment).

CREAR CITAS

Para crear una nueva cita debemos utiliar el Objeto Appointment, aqui va el ejemplo:

Dim appt As Appointment = New Appointment(service)
With appt
.Subject = "Subject"
.Body = "Body"
.StartTimeZone = TimeZoneInfo.Local
.Start = fecha del tipo DateTime
.ReminderMinutesBeforeStart = 15
.End = fecha del tipo DateTime
.Body.BodyType = BodyType.Text
.RequiredAttendees.Add("email1")
.RequiredAttendees.Add("email2")
.Save()
End With

Con esto ya hemos creado una Cita con participantes, bueno el siguiente paso sera leer la cita, para ello debemos hacer lo siguiente>

LEER LISTA DE CITAS

Explicare un poco el proceso de lo que hago, creo un Datatabe y en este inserto los registros de las citas que se han definido el un periodo de fechas determinado, para ello he hecho lo siguiente;

Dim oCalendar As New CalendarView(FIcinio en formato DateTime, FFin en DateTime)
Dim findResults As FindItemsResults(Of Appointment) = service.FindAppointments(WellKnownFolderName.Calendar, oCalendar)
Dim items As New List(Of Item)()
For Each appointment As Appointment In findResults
items.Add(appointment)
Next

service.LoadPropertiesForItems(items, PropertySet.FirstClassProperties)

' aqui creamos el data table con sus columnas para el resultado
Dim dt As New DataTable
With dt
.Columns.Add("id", System.Type.GetType("System.String"))
.Columns.Add("Subject", System.Type.GetType("System.String"))
.Columns.Add("Body", System.Type.GetType("System.String"))
.Columns.Add("StartTimeZone", System.Type.GetType("System.String"))
.Columns.Add("Start", System.Type.GetType("System.String"))
.Columns.Add("ReminderMinutesBeforeStart", System.Type.GetType("System.String"))
.Columns.Add("End", System.Type.GetType("System.String"))
End With

' ahora cargamos la informacion de los appointment al datatable
For Each item As Item In items
Dim dr As DataRow = dt.NewRow
dr("id") = item.Id.UniqueId
dr("Subject") = item.Subject.ToString()
dr("Body") = DirectCast(item,Appointment).Body.ToString()
dr("StartTimeZone") = DirectCast(item, Appointment).StartTimeZone
dr("Start") = DirectCast(item, Appointment).Start
dr("ReminderMinutesBeforeStart") = item.ReminderMinutesBeforeStart
dr("End") = DirectCast(item, Appointment).End
dt.Rows.Add(dr)
Next

Bueno amigos, con esto el resultado lo pueden cargar a un objeto de lista de deseen para utilizarlo, ahora ya tenemos los identificadores del item de tipo cita y podremos buscarlos para modificarlos, esto se hace de la siguiente forma:

MODIFICACION DE CITAS

Recuerden que el identificador del item lo hemos encontrado a traves de la lista que hemos seleccionado del datatable creado en la seccion listar Appointment

Dim oAppointment As Appointment = Appointment.Bind(service, New ItemId("Id Item"))
oAppointment.Subject = "Subject"
oAppointment.StartTimeZone = TimeZoneInfo.Local
oAppointment.Start = fecha formato Datetime
oAppointment.ReminderMinutesBeforeStart = 15
oAppointment.End = fecha formato Datetime
oAppointment.Body.BodyType = BodyType.Text
oAppointment.Body.Text = "Body"
oAppointment.Update(ConflictResolutionMode.AlwaysOverwrite)

Como ven es muy simple y no requiere demasiado, por lo cual ahora les doy las lineas de codigo para borrar un item.

Borrar Item Cita (Appointment)

Esto requiere solo dos cosas, la creacion y busqueda del item y la opcion de borrado, para ello debemos utilizar lo siguiente:

Dim oAppointment As Appointment = Appointment.Bind(service, New ItemId(idxItem)) oAppointment.Delete(DeleteMode.HardDelete)

NOTA: Bueno amigos esta misma metodologia de trabajo la pueden usuar para administrar Correor, Contactos, Citas y .... Mas info ver en MSDN

Para buscar contactos deben usar las siguientes lineas de codigo:

Esta linea de codigo trae los ultimos 100 contactos que se han creado, dependiendo del numero esto puede aumentarse o redicirse

Dim findResults As FindItemsResults(Of Item) = service.FindItems(WellKnownFolderName.Contacts, New ItemView(100))

Dim items As New List(Of Item)()
For Each itemContact As Contact In findResults
items.Add(itemContact)
Next

service.LoadPropertiesForItems(items, PropertySet.FirstClassProperties)

y para operar sobre un contacto deben crear un objeto de tipo Contact, como se define a continuacion:

Dim oContact As Contact = Contact.Bind(service, New ItemId(idxItem))

los metodos para borrar o modificar son los mismos que en Appointment, es decir:

oContact.Delete(DeleteMode.HardDelete)

oContact.Update(ConflictResolutionMode.AlwaysOverwrite)

En la seccion de server.FindItems pueden tambien definir criterios de busqueda, esta informacion la pueden encontrar en la documentacion de Exchange Server WebService.

Saludos y espero que esta info sea de ayuda.