martes, 11 de agosto de 2009

Crear Usuario en site en Sharepoint con aspnet

1 comentario:
Cuando intente Crear un site en sharepoint rapido pense en los sharepoint web service
http://msdn.microsoft.com/en-us/library/dd878586.aspx
y puede usar el web service
http://site/_vti_bin/meetings.asmx con el siguiente codigo:

Dim cc As New System.Net.NetworkCredential
cc.UserName = "administrator"
cc.Domain = "test"
cc.Password = "test"

Dim WMService As New MeetingWebService.Meetings()
WMService.Credentials = cc
Dim tz As New MeetingWebService.TimeZoneInf()

Dim xnode As Xml.XmlNode = WMService.CreateWorkspace("pruebasts1", "STS#0", System.UInt32.Parse("1033"), tz)

sin embargo este codigo tiene muchas desventajas por que los web service no tiene todas las caracteristicas para automatizar el sharepoint.

lo que tiene que hacer es lo siguiente:
paso 1
buscar el un dll de sharepoint y referenciarlo a su proyecto la cual se encuentra en:

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\ISAPI\Microsoft.SharePoint.dll

paso 2
codigo para crear el sitio

//crea sitio en sharepoint
using (SPSite oSiteCollection = new SPSite("http://test"))
{
SPWebCollection collWebsites = oSiteCollection.AllWebs;
System.UInt32 lcid = new System.UInt32();
lcid = Convert.ToUInt32("1033");
SPWeb oWebsite = collWebsites.Add("site1", usuario, "Description xx", lcid, "STS#0", true, false);
}
//fin crea sitio en sharepoint

//crea el grupo de permisos
using (SPSite oSiteCollection = new SPSite("http://test"))
{
using (SPWeb oWebsite = oSiteCollection.OpenWeb("site-" + usuario))
{
string usuario="prueba";
string groupName1 = usuario + "-Contribuidor";
oWebsite.SiteUsers.Add("test\\" + usuario, "", usuario, "user:" + usuario);
SPUser ownerUser = oWebsite.SiteUsers["test\\" + usuario];
oWebsite.SiteGroups.Add(groupName1, ownerUser, ownerUser, "contrubuidor");
oWebsite.AssociatedGroups.Add(oWebsite.SiteGroups[groupName1]);
SPRoleDefinitionCollection roleDefinitions = oWebsite.RoleDefinitions;
SPRoleAssignmentCollection roleAssignments = oWebsite.RoleAssignments;
SPPrincipal author = oWebsite.SiteGroups[groupName1] as SPPrincipal;
SPRoleAssignment assignment = new SPRoleAssignment(author);
SPRoleDefinitionBindingCollection definitions = assignment.RoleDefinitionBindings;
//Contribute - Full Control
definitions.Add(roleDefinitions["Contribute"]);
roleAssignments.Add(assignment);
}
}
//fin del grupo de permisos

//crea las librerias
using (SPSite oSiteCollection = new SPSite("http://test"))
{
using (SPWeb oWebsite = oSiteCollection.OpenWeb("site-" + usuario))
{
oWebsite.Lists.Add("documentos", "documentos de " + usuario, SPListTemplateType.DocumentLibrary);
SPList newList = oWebsite.Lists["documentos"];
newList.OnQuickLaunch = true;
newList.Update();

oWebsite.Lists.Add("Fotos", "fotos de" + usuario, SPListTemplateType.PictureLibrary);
SPList newfotos = oWebsite.Lists["Fotos"];
newfotos.OnQuickLaunch = true;
newfotos.Update();
}
}
//fin de las librerias


si quiere hacerlo aun mas poderoso miren este articulo:
SharePoint Security and .NET Impersonation
http://www.15seconds.com/issue/040511.htm


Algunas otros templates para crear site.
STS#0 Team site
STS#1 Blank Site
STS#2 Document Workspace
MPS#0 Basic Meeting Workspace
MPS#1 Blank Meeting Workspace
MPS#2 Decision Meeting Workspace
MPS#3 Social Meeting Workspace
MPS#4 Multipage Meeting Workspace
WIKI#0 Wiki
BLOG#0 Blog
BDR#0 Document Center
OFFILE#0 Record Center 0
OFFILE#1 Record Center 1
OSRV#0 Shared Services Administration
SPSPERS#0 SP Portal Personal Space
SPSMSITE#0 Personalization Site
SPSTOC# COntents Area Template
SPSTOPIC#0 Topic Area Template
SPSNEWS#0 News Site
CMSPUBLISHING#0 Publishing Site 0
BLANKINTERNET#0 Publishing Site 1
BLANKINTERNET#2 Publishing Site with Workflow
SPSNHOME#0 News Site 2
SPSSITES#0 Site Directory
SPSCOMMU#0 Community Area Template
SPSREPORTCENTER#0 Report Center
SPSPORTAL#0 Collaboration Portal
SRCHCEN#0 Search Center with Tabs
PROFILES#0 Profiles
BLANKINTERNETCONTAINER#0 Publishing Portal
SPSMSITEHOST#0 My Site Host
SRCHCENTERLITE#0 Search Center 0
SRCHCENTERLITE#1 Search Center 1
Ver

lunes, 10 de agosto de 2009

¿Eres un ejecutivo?

No hay comentarios.:
Super viejo pero es bueno.
Las respuestas no son difíciles. Simplemente Ud. debe pensar como un/averdadero/a
ejecutivo.
PREGUNTA NUMERO 1
¿Cómo pone Ud. una jirafa en una nevera(refri)?
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Respuesta correcta: Abra la nevera(refri), ponga la jirafa y cierre la puerta. Esta pregunta verifica si Ud. está haciendo las cosas simples de una manera complicada.

PREGUNTA NUMERO 2
¿Cómo pone Ud. un elefante en la nevera?

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Respuesta incorrecta: Abra la nevera, ponga el elefante y cierre la nevera. Respuesta correcta:Abra la nevera, saque la jirafa, ponga el elefante, y cierre la nevera. Esta pregunta comprueba su capacidad de evaluar dificultades futuras.

PREGUNTA NUMERO 3
El Rey León ha convocado una Asamblea General de Animales. Todos fueron, menos uno. ¿Cual?
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Respuesta correcta:El elefante. !Está en la nevera! Esta pregunta evalúa su capacidad de razonamiento comprensivo.
PREGUNTA NUMERO 4
En la selva, hay un río lleno de cocodrilos, y Ud. no cuenta con embarcación alguna. ¿Cómo lo cruza?
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

Respuesta correcta: Nadando. ¡Todos los cocodrilos están en la reunión del Rey León! Esta pregunta evalúa su agilidad mental.

Calificación para puestos...
4 respuestas correctas = Dirección ejecutiva, Presidencia
3 respuestas correctas = Gerencias medias
2 respuestas correctas = Asistentes, Jefaturas
1 respuesta correcta = Obrero, OficinistaNinguna respuesta correcta = Dedicate a la pesca con red, por que conanzuelo no sacas nada...
Ver

lunes, 27 de julio de 2009

¿Cómo hacer un Servicio Windows en C#? (Con timer)

3 comentarios:
Tenimos el servicio. Escribiendo al log. Unicamente:
public partial class MyNewService: ServiceBase
{
  public MyNewService()
   {
     InitializeComponent();
      if (!System.Diagnostics.EventLog.SourceExists("MySource"))
      {
      System.Diagnostics.EventLog.CreateEventSource(
      "MySource","MyNewLog");
     }
     eventLog1.Source = "MySource";
     eventLog1.Log = "MyNewLog";
    }


   protected override void OnStart(string[] args)
   {
      eventLog1.WriteEntry("In OnStart");
   }

   protected override void OnStop()
   {
      eventLog1.WriteEntry("In onStop.");
   }
 }

Bueno ahora hay que agregar un timer:
Pueden agregar un timer grafico o por codigo.
como agregarlo por código
Abran el archivo
MyNewService.Designer.cs
agreguen el código en la parte de abajo de su documento para definir el timer:

private System.Timers.Timer mytimer;

ahora busquen el evento
private void InitializeComponent()

agreguen esta definicion alli:
this.mytimer = new System.Timers.Timer();
((System.ComponentModel.ISupportInitialize)(this.mytimer)).BeginInit();

this.mytimer.Enabled = true;
this.mytimer.Interval = 2000D;
this.mytimer.Elapsed += new System.Timers.ElapsedEventHandler(this.mytimer_Elapsed);
((System.ComponentModel.ISupportInitialize)(this.mytimer)).EndInit();

ahora cambiemonos al servicio MyNewService
y busquemos el evento OnStart y agreguen la configuracion tal y como aparece abajo:

protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("In OnStart");
this.mytimer.Elapsed += new System.Timers.ElapsedEventHandler(mytimer_Elapsed);
mytimer.Interval = 2000;
mytimer.Enabled = true;
}

agregue el siguiente evento:
en medio de este evento puede conectarse a la db o hacer lo que ustedes quieran.

private void mytimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
}
Ver

miércoles, 15 de julio de 2009

¿Cómo hacer un Servicio Windows en C#?

6 comentarios:
Los servicios Windows son programas que corren en background independiente del usuario que tenga sesiones activas en un server. Son usamos para múltiples tareas administrativas, no es una aplicación normal de Windows, ya que no tiene interfaz gráfica.



Crear el proyecto.
1. En el menu File, click en New Project
---- La venta de New Project se abrira

2. Seleccione el projecto Windows Service de la lista de C#, coloque el nombre de MyNewService. y luego OK.

--- ser creara Service1.cs

3. Sobre el diseñador de service1 precione clic derecho y propiedades sobre Service1, el la ventana de propiedades busque la propiedad Service Name y cambielo por MyService
y asegurese que la opcion autolog este en true.

3.1 Que alla cambiado el nombre del servicio en la ventan de propiedades no sigmifica que el nombre de la clase tambien cambiara, tendra que renombrar la clase desde el Solucion explorer precionando click derecho sobre el servicio y luego rename y colocando el nombre MyNewService.

4. Sobre el diseñador de MyNewService precione clic derecho view Code.

Tendra 3 void
MyNewService() ---------------es el constructor
OnStart(string[] args)--------es el evento que se disparar cuando inicie el componente
OnStop()-----------------------es el evento que se disparar cuando pare el componente




Agregando Caracteristicas al Componente
En los siguientes pasos vamos agregar codigo para escribir en el log de windows nuestras actidades


Pero primero necesitamos agregar un evenLog del toolbox

5. En el costructor crearemos en el una entrada en el log de windows para poder ingresar entradas en log.

public MyNewService()
{
InitializeComponent();
if (!System.Diagnostics.EventLog.SourceExists("MySource"))
{
System.Diagnostics.EventLog.CreateEventSource(
"MySource","MyNewLog");
}

eventLog1.Source = "MySource";
eventLog1.Log = "MyNewLog";
}

6. Ahora vamos a definir que ocurre cuando el servicio inicia, en el editor de codigo buscar el evento OnStart y pondremos la entrada al log.

protected override void OnStart(string[] args)
{
eventLog1.WriteEntry("In OnStart");
}

7. Ahora vamos a definir que ocurre cuando el servicio es detenido, en el editor de codigo buscar el evento OnStop y pondremos la entrada al log.

protected override void OnStop()
{
eventLog1.WriteEntry("In onStop.");
}

hay otro evento pero ese no lo capturaremos se llama Oncontinue y se dispara cuando el servicio es detenido y luego puesto en marcha de nuevo.
Ver mas info aquí

Ahora es momento de Instalarlo.
8. Sobre el modo diseño del servicio precione click en add Instaler
esto llevara unos minutos.

Compile y ctl + shif + b o en el menu build
este generara MyNewService.exe

Intalarlo en el server.
se puede hacer de 2 maneras la facil y la dificil
1.) hacer un instalador.
2.) la facil que es la que voy a mostrarles

a.)Copie su proyecto compilado al servidor.
b.)En el servidor donde van a poner su servicio ingrese a una consola de Microsoft Windows SDK - CMD Shell
c.)por medio de commando de dos(cd .. , c:\algo) dijijase a la carpeta bin y debug o release hasta que encuente su exe

d.)installutil MyNewService.exe
Esto instalara en windows service, ahora ya esta instalado su servicio.
para quitarlo

installutil /u MyNewService.exe

En la face 2 pondremos un timer para que se ejecute cada cierto tiempo un evento.
Ver

viernes, 10 de julio de 2009

Crear un Inbox en Microsfot Exchange desde Aspnet

1 comentario:
Para crear un inbox en Exchange primero necesitamos tener un usuario de AD, luego van a necesitar una libreria llamada
Windows SDK for Windows Server 2008 and .NET Framework 3.5

Y luego aqui esta el codigo para habilidar su cuenta de exchange, tiene que tener creado su usuario de windows(ver articulo anterior)


using System.Management.Automation;
using System.Management.Automation.Host;
using System.Management.Automation.Runspaces;


public void HabilitarCuenta(string usuario)
{
ICollection results;
RunspaceConfiguration runspaceConf = RunspaceConfiguration.Create();
PSSnapInException PSException = null;
PSSnapInInfo info = runspaceConf.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.Admin", out PSException);
Runspace runspace = RunspaceFactory.CreateRunspace(runspaceConf);
runspace.Open();
Pipeline pipeline = runspace.CreatePipeline();

Command createMailbox = new Command("Enable-Mailbox");
createMailbox.Parameters.Add("identity", @"test.corp/usuarios/" + txtusuario.Text);
createMailbox.Parameters.Add("alias",usuario);
createMailbox.Parameters.Add("database", @"TEST2\First Storage Group\Mailbox Database");
pipeline.Commands.Add(createMailbox);
results = pipeline.Invoke();
}
Ver

martes, 7 de julio de 2009

Crear un usuario en el Active Directory desde aspnet

No hay comentarios.:
Antes de Crear la cuenta necesito hacer una enum que nos servira mas adelante, esto si lo ponen en la pagina hay que ponerlo despues del

public partial class Nuevo : System.Web.UI.Page
{
(la linea de arriba solo es ejemplo donde debe poner el enum)

aquí esta el codigo del enum:
[Flags]
public enum AdsUserFlags
{
Script = 1, // 0x1
AccountDisabled = 2, // 0x2
HomeDirectoryRequired = 8, // 0x8
AccountLockedOut = 16, // 0x10
PasswordNotRequired = 32, // 0x20
PasswordCannotChange = 64, // 0x40
EncryptedTextPasswordAllowed = 128, // 0x80
TempDuplicateAccount = 256, // 0x100
NormalAccount = 512, // 0x200
InterDomainTrustAccount = 2048, // 0x800
WorkstationTrustAccount = 4096, // 0x1000
ServerTrustAccount = 8192, // 0x2000
PasswordDoesNotExpire = 65536, // 0x10000
MnsLogonAccount = 131072, // 0x20000
SmartCardRequired = 262144, // 0x40000
TrustedForDelegation = 524288, // 0x80000
AccountNotDelegated = 1048576, // 0x100000
UseDesKeyOnly = 2097152, // 0x200000
DontRequirePreauth = 4194304, // 0x400000
PasswordExpired = 8388608, // 0x800000
TrustedToAuthenticateForDelegation = 16777216, // 0x1000000
NoAuthDataRequired = 33554432, // 0x2000000
Habilitarcuenta = 512 // 0x2000000
}

Otra cosa hay que crear una OU(unidad organizacional) llamada usuarios, ya que aquí estaran nuestros usuarios.

Aquí esta el código de ingreso de usuario:

DirectoryEntry parent = new DirectoryEntry(
"LDAP://OU=usuarios,DC=test,DC=corp",
null,
null,
AuthenticationTypes.Secure
);

DirectoryEntry user =
parent.Children.Add("CN=test.user", "user");

using (user)
{
user.Properties["sAMAccountName"].Value = "test.user";
user.Properties["userPrincipalName"].Value = "test.user";
user.Properties["displayName"].Value = "nombre completo";
user.Properties["givenName"].Value = "Nombre";
user.Properties["sn"].Value = "apellidos";
user.Properties["description"].Value = "usuario creado automaticamente";
user.CommitChanges();
}

Esta cuenta no esta lista para usarla ya que hay que colocarle un password:

DirectoryEntry ent = new DirectoryEntry("LDAP://CN=test.user,OU=usuarios,DC=test,DC=corp");

ent.Properties["pwdLastSet"].Value = 0;
ent.Invoke("SetPassword", new object[] { "3l!teP@$$w0RDz" });

y aun no esta lista para usarla ya que falta habilitar la cuenta.

DirectoryEntry entry = new DirectoryEntry("LDAP://CN=test.user,OU=usuarios,DC=test,DC=corp");

AdsUserFlags newValue = AdsUserFlags.NormalAccount
| AdsUserFlags.PasswordDoesNotExpire
| AdsUserFlags.Habilitarcuenta;


entry.Properties["userAccountControl"].Value = newValue;
entry.CommitChanges();

Con esto ya tendran listo su Usuario de Active directory.

Recomendaciones & Tips.

Corran esto en el servidor no es su pc ya que si no estan pegados al dominio pueden tener problemas.

Colocar el identity si van usar anonimos:


Por ultimo si da un error que el objeto no es existe es por que estan buscando el usuario en la OU equivocada.

Espero les sirva.
Ver

jueves, 18 de junio de 2009

No es justo =(

No hay comentarios.:
Tiene 17 años y es una de las tenistas rumanas más prometedoras del circuito junior. Se llama Simona Halep, una joven que lleva jugando desde los 4 años y que ha tenido que enfrentarse a una dura decisión en su carrera: o mantener la espectacular talla de sujetador que gasta, o pasar por el quirófano.


Para mi esto es un crimen, y habria impedir ese teticidio de cualquier forma. jiji





En el vídeo de siguiente debe de dejar bastante claro que su juego, despertaría más espectación en el circuito profesional que los gemidos de la Sharapova.

Ver