lunes, 17 de enero de 2011

Como aumentar los Items mostrados en una lista del portal de FIM

Para que despliegue más elementos, por ejemplo de una búsqueda, lo podemos hacer de la siguiente manera:

1.- Ir a la opción de Administración dentro del portal de FIM.

2.- Luego, Portal Configuration

3.- En la sección de Extended Attributes, buscar la opción ListView Items per Page, y ahi ponemos la cantidad de elementos que deseamos mostrar por página.

4.- Dar un iisreset, para que se refresque el cache.

miércoles, 5 de enero de 2011

Cómo obtener el primer resultado de una consulta en Linq

Para validar que una consulta nos traiga el primer elemento y no cause ninguna excepción si no encuentra resultado, utilizamos la función FirstOrDefault, la cual si no encuentra ingún elemento nos regresa un null, por lo que posterior a la consulta podemos validar el objeto comparandolo con null. A continuación les muestro el ejemplo:

var usuario = (from t in context.Usuario
where t.NumeroEmpleado == “NoEmpleado”
select t).FirstOrDefault();

if (usuario == null)
“No encontro el elemento”;
else
“Encontro el elemento”;

martes, 4 de enero de 2011

Métodos de ecripción y desencripción

Es muy común que queramos encritar información para almacenarla, y cuando la necesitemos desencriptarla para utilizarla. A continuación les comparto métodos para hacer estas dos tareas de una forma muy sencilla.

public class Encryption
    {
        /// <summary>
        /// Método para encriptar una cadena.
        /// </summary>
        /// <param name="inputString">Cadena a encriptar.</param>
        /// <param name="key">Llave de encripción.</param>
        /// <returns></returns>
        public static String Encrypt(String inputString, String key)
        {
            Byte[] inputStringByte = System.Text.ASCIIEncoding.ASCII.GetBytes(inputString);
            Byte[] keyByte = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
            Byte[] iVByte = System.Text.ASCIIEncoding.ASCII.GetBytes(key);

            MemoryStream memoryStream = new MemoryStream(1024);
            DESCryptoServiceProvider desCryptoServiceProvider =  new DESCryptoServiceProvider();

            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, desCryptoServiceProvider.CreateEncryptor(keyByte, iVByte), CryptoStreamMode.Write))
            {
                cryptoStream.Write(inputStringByte, 0, inputStringByte.Length);
                cryptoStream.FlushFinalBlock();
                Byte[] result = new Byte[(Int32)memoryStream.Position];
                memoryStream.Position = 0;
                memoryStream.Read(result, 0, result.Length);
                cryptoStream.Close();
                return System.Convert.ToBase64String(result);
            }
        }

        /// <summary>
        /// Método para desencriptar una cadena.
        /// </summary>
        /// <param name="inputString">Cadena a desencriptar.</param>
        /// <param name="key">Llave de desencriptación.</param>
        /// <returns></returns>
        public static String Decrypt(String inputString, String key)
        {
            byte[] inputStringByte = System.Convert.FromBase64String(inputString);
            byte[] keyByte = System.Text.ASCIIEncoding.ASCII.GetBytes(key);
            byte[] iVByte = System.Text.ASCIIEncoding.ASCII.GetBytes(key);

            MemoryStream memoryStream = new MemoryStream(inputStringByte.Length);

            DESCryptoServiceProvider desCryptoServiceProvider = new DESCryptoServiceProvider();

            using (CryptoStream cryptoStream = new CryptoStream(memoryStream, desCryptoServiceProvider.CreateDecryptor(keyByte, iVByte), CryptoStreamMode.Read))
            {
                memoryStream.Write(inputStringByte, 0, inputStringByte.Length);
                memoryStream.Position = 0;
                string decrypted = new StreamReader(cryptoStream).ReadToEnd();
                cryptoStream.Close();
                return decrypted;
            }
        }
    }

Como convertir un String a un Stream

 

Para convertir un String a un Stream, podemos usar el siguiente código:

new MemoryStream(Encoding.ASCII.GetBytes(inputString))

y listo ahora podemos usarlo como Stream.

Como aumentar el log del FIM y del PCNS

 

Ahora estoy trabajando con FIM (que trabaja sobre sharepoint), y me salió la necesidad de habilitar una mayor cantidad de logs en el event viewer. A coninuación les comparto la solución que encontre:

FIM tiene 4 niveles de logeo, y hay que agregar una llave (“FeaturePwdSyncLogLevel (REG_DWORD) ”) en el registro “HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\FIMSynchronizationServices\Logging”, y los niveles son:

  • 0 = Minimal Logging
  • 1 = Normal logging (default)
  • 2 = High logging
  • 3 = Verbose logging

En el caso de PCNS, hay que agregar o modificar la llave “EventLogLevel (REG_DWORD)” en el registro “HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\PCNSSVC\Parameters” y los niveles son:

  • 0 = Minimal Logging
  • 1 = Normal logging (default)
  • 2 = High logging
  • 3 = Verbose logging

miércoles, 22 de diciembre de 2010

Como descargar un archivo de una forma de un flujo (infopath)

Buenas, a continuación les dejo el código, para descargar un archivo, de una tarea de un flujo de sharepoin (Infopath), esto es para no tener que almacenarlo en alguna lista, o generarlo físicamente.

System.Collections.Hashtable extendedProp = Microsoft.SharePoint.Workflow.SPWorkflowTask.GetExtendedPropertiesAsHashtable(item);
//Response.ContentType = "text/HTML";
//Response.BinaryWrite(Convert.FromBase64String(extendedProp["FileAttached"] as String));

if (!String.IsNullOrEmpty((extendedProp["FileAttached"] as String)))
{
byte[] data = Convert.FromBase64String(extendedProp["FileAttached"] as String);
byte[] buffer = data;
Int32 blockSize = 10;

//get filename
int namebufferlen = data[20] * 2;
byte[] filenameBuffer = new byte[namebufferlen];
for (int i = 0; i < filenameBuffer.Length; i++)
{
filenameBuffer[i] = data[24 + i];
}

char[] asciiChars = UnicodeEncoding.Unicode.GetChars(filenameBuffer);

string filename = new string(asciiChars);

filename = filename.Substring(0, filename.Length - 1);

using (System.IO.Stream st = new System.IO.MemoryStream(data))
{
long dataLengthToRead = st.Length;
Response.ContentType = "text/plain"; //Or other you need
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0}\"", filename));
//Response.AddHeader("Content-Disposition", "attachment; filename=\"" + theFileName + "\"");
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
Int32 lengthRead = st.Read(buffer, 0, blockSize);
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Flush();
Response.Close();
}
Response.End();
}


Saludos,

miércoles, 24 de noviembre de 2010

Como aumentar el tamaño a un disgo de Virtual Box

Para los que nos dedicamos al desarrollo de sharepoint estamos acostumbrados a las maquinas virtuales. Ahora con la salida de Sharepoint 2010, que solo corre en 64, una de las opciones es utilizar virtual box. El problema es que los discos no pueden crecer. A continuación les presento una solución para aumentar el tamaño del disco.

1.- Primero hay que descargar la siguiente utileria SystemRescueCd-x86-1.6.3 (http://www.sysresccd.org/Download).

2.- Hay que generar un nuevo disco duro con el tamaño que requerimos.

3.- Modificamos la maquina virtual para que tenga como 2 disco, el que creamos en el paso 2, y agregamos el iso que descargamos en el paso 1.

4.- Una vezque arranque la maquina virtual, tecleamos startx. Una vez que aparezca la terminal, tecleamos gparted.

5.- Ya dentro de gparted, copiamos todo el disco duro en el nuevo, ajustando para que el tamaño ya sea mayor, y para finalizar seleccionamos la opción “Apply”.

6.- Una vez que termine el proceso. seleccionamos la partición de sistema, y seleccionamos la bandera de “boot”.

7.- Salimos del gparted y apagamos la maquina.

8.- Configuramos la maquina virtual para que ya solo tenga el disco más grande y quitamos la utileria (el iso del paso 1), y ponemos el iso del disco de instalación del sistema operativo.

9.- Arrancamos la maquina e iniciamos el proceso de instalación, pero seleccionamos la opción reparar, y seleccionamos la opción de Command.

10.- Entramos al directorio “X:\sources\recovery\”

11.- Ejecutamos “StartRep.exe”. Y esperamoss que se realice todo el proceso de validación de discos.

12.- Reiniciamos y arrancara como nueva nuestra maquina virtual con un disco más grande.

Saludos,