domingo, 5 de septiembre de 2010

CH CH CHANGEEES!

IMPORTANTES

1. Carpeta TraceLog
- Cuando se arranca la 1ª vez, se crea la carpeta TraceLog
- Al installar la teconologia se hace un backup de la carpeta TraceLog utilizando la version por defecto (TraceLog.TechVersion_0.0.2.1_2010.09.04_17.14.43.484) => Parece que no ha comprobado que estaba vacia  y ha creado el backup (esto no es un problema)
- Durante la instalacion de la tecnologia se hace uso de la carpeta TraceLog antes de crear la nueva (la que habia ya se ha renombrado) => La aplicacion pega un pete porque la carpeta no existe
No se crea la nueva caprteta TraceLog justo despues de renombrar la antigua? ---> DONE in applicacion de prueba

Por otro lado, cuando ya hay una tecnologia y se instala otra, se hace el backup de la carpeta trace log pero tampoco se crea la nueva trace log => Parece que el problema es a la hora de crear la carpeta TraceLog ---> SOLVED aplicacion de prueba

2. Cuando cambia de Proyecto y el nuevo proyecto no tiene logs, se quedan en la pantalla de logs el TestConfig y Result Test case del proyecto antiguo.
Esto tambien pasa cuando se cambia de proyecto y se mira los logs la primera vez despues de ejecutar lso test cases => Creo que esto fue lo que visteis fran y tu, no?
Parece que se queda con la ruta del proyecto anterior y no se actualiza, esto hace que unas veces se muestre el log de otro proyecto o de un pete si se ha cambiado de tecnologia y el proyecto antiguo ya no esta en la carpeta TraceLog
Creo que lo mas sencillo es limpiar estos paneles y no mostrar nada hasta que no se haga click en el test case que se quiera ver el log. Hazlo como mejor veas tu.  ----> USAR CellClick para evento y limpiar al irme a cualquier otro tab con SelectedIndexChange y PerformClick (cada pestaña)

3. Bloquear para que no se pueda ordenar las colunas de la taba del secuenciador porque si se da a ordenar, cambia el orden de los test cases, pero se ejecutan segun el orden inicial => Esto hace que al escribir los veredictos no se hagan bien.
Al dejar las filas en orden fijo sin que se puedan ordenar se evita que pasen estas cosas ---> this.dataGridView1.Columns["Proyecto"].SortMode = DataGridViewColumnSortMode.NotSortable;



4. En el nombre del proyecto hay que comprobar que no se utilizan caracteres reservados por el Sistema Operativo (/ \ ? * < > | : ") ya que al crear la carpeta con el mismo nombre, el S.O. no le deja y el programa pega un pete. ---> DONE in application example





PIJADITAS

1. Texto Mensaje Pop-up que sale al actualizar la tecnologia, cambiarlo por:
 The current version of the technology will be replaced by the new version and a backup copy of current projects will be saved in Test Management Lite installation folder. Do you want to continue? ---> HACER sobre el terreno

Despues sale otro pop-up avisando que se van a cerrar todos los tabs => Quitarlo, ya no tiene mucho sentido al tener el backup de los proyectos

2. Permitir que se pueda ajustar el tamaño de las colunas en la pantalla Test Cases =>>AllowUserToResizeColumns = TRUE (REPASAR DE PASO LOS OTROS ALLOWS)

3. Permitir que se pueda ordernar los Test Cases con la columna Applicable (si es posible y no require mucho trabajo) --->Crear un bucle y llenar un DataTable con el contenido de la tabla TestCases.. añadiendo la columna Applicability, si no, no se puede ordenar

4. Reducir altura ventana Progress a la mitad de lo que tiene ahora ----> HACER SOBRE EL TERRENO

5. Quitar el resize de las ventanas de proyectos y quitar iconos --->  FormBorderStyle ---> FixedSingle en propiedades / Añadir MinimizeBox = false; MaximizeBox = false; en donde InitializeComponent()

6. Texto del pop-up que sale cuando no hay test cases seleccionados para ejectuar (pone: no test cases selected) cambiar por:
Unable to execute an empty test script ---> HACER sobre el terreno

7. Cuando se borra un proyecto no se borra la carpeta del proyecto de los logs?? solo se borra de la tabla??? Se podria borrar facilmente la carpta del proyecto???  ---> COMPROBAR, juraria que lo hacia

8. Hacer que se refresquen las pantallas al pinchar en los tabs de la misma forma que se hace al pulsar los iconos de la izquierda ---> limpiar al irme a cualquier otro tab con SelectedIndexChange dandole a PerformClick

9. Poner Texto Applicability en la condicion => Esto lo vemos el lunes a ver como queda la pantalla  ---> NO problema

10. Cambiar el Logo de AT4 por otro con mejor resolucion => Esto lo vemos el lunes a ver como queda la pantalla --> NO problema






UTILES

1. Columnas rellenan datagridview a lo ancho ---> AutoSizeColumnsMode -->Fill, acuerdate de no poner un ancho minimo

APLICACION PRUEBA FORM 2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace AplicacionDePrueba
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
            DataTable datos = new DataTable();
            datos.Columns.Add("Proyecto");
            datos.Columns.Add("Creado");
            datos.Columns.Add("Bueno");
            for (int i = 0; i < 10; i++)
            {
                DataRow row = datos.NewRow();
                row["Proyecto"] = "proyecto"+i;
                row["Creado"] = DateTime.Now.ToString();
                datos.Rows.Add(row);
            }           
            this.dataGridView1.DataSource = datos;
            this.dataGridView1.Columns["Proyecto"].SortMode = DataGridViewColumnSortMode.NotSortable;
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
           
            richTextBox1.Text = dataGridView1.CurrentRow.Cells["Proyecto"].Value.ToString();
            richTextBox2.Text = dataGridView1.CurrentRow.Cells["Creado"].Value.ToString();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                if (dataGridView1.Rows[i].Cells["Proyecto"].Value.ToString() == "proyecto1")
                {
                    dataGridView1.Rows[i].Cells["Bueno"].Value = "YES";
                }
                else
                { dataGridView1.Rows[i].Cells["Bueno"].Value = "NO"; }
               
            }
        }

        private void tabControl1_TabIndexChanged(object sender, EventArgs e)
        {
            richTextBox1.Text = "";
            richTextBox2.Text = "";
        }


    }
}

APLICACION PRUEBA FORM 1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace AplicacionDePrueba
{
    public partial class Form1 : Form
    {

        public bool validname;
        public Form1()
        {
            InitializeComponent();
            //Chequeo si hay tracelog
            string path = System.IO.Directory.GetCurrentDirectory();
            if (System.IO.Directory.Exists(path+"\\TraceLog"))
            {
                string fecha = DateTime.Now.ToString();
                string fecha1 = fecha.Replace("/", "");
                string fecha2 = fecha1.Replace(":", "");
                string fecha3 = fecha2.Replace(" ","");
                System.IO.Directory.Move(path+"\\TraceLog", path+"\\TraceLog"+fecha3);
            }
           

           
            System.IO.Directory.CreateDirectory(path+"\\TraceLog");
            validname = false;
            MinimizeBox = false;
            MaximizeBox = false;
           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "")
            {
                string nombre = textBox1.Text.ToString();
                if (!ContainsForbidden(nombre))
                {
                    //if name already exists or not, this cant be checked here, so..
                    validname = true;
                }
                else
                {
                    MessageBox.Show("El nombre contiene caracteres invalidos");
                }    
            }
            else
            {
                MessageBox.Show("El nombre no puede ser vacio");
               
            }

            if (validname)
            {
                Form2 form2 = new Form2();
                form2.ShowDialog();
               

            }
            else
            {
                textBox1.Text = "";
            }
        }

        public static bool ContainsForbidden(string text)
        {
            return text.IndexOfAny("/\\?*<>|:\"".ToCharArray()) >= 0;
        }


       
    }
}

miércoles, 4 de agosto de 2010

DATASET Access

private void button1_Click(object sender, EventArgs e)
        {
            OleDbConnection oleDbConnection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Base de datos especial.mdb");
           
            foreach (DataRow row in base_de_datos_especialDataSet.Tabla1.Rows)
            {
                string name = row[1].ToString();

               
               
                OleDbCommand oleDbCommand = new OleDbCommand();
                oleDbCommand.Connection = oleDbConnection;
                oleDbCommand.CommandText = "INSERT INTO Tabla2 ( Nombre, Identificador) VALUES ('name', 2)";

                oleDbConnection.Open();
                oleDbCommand.ExecuteNonQuery();
                oleDbConnection.Close();

            }
            base_de_datos_especialDataSet.AcceptChanges();
            tabla2TableAdapter.Update(base_de_datos_especialDataSet);
            this.tabla2TableAdapter.Fill(this.base_de_datos_especialDataSet.Tabla2);

domingo, 11 de abril de 2010

S/MIME signature validate

private void getsignature(string Email)
{
//Extract signature
MIME.MimeMessage aMimeMessage = new MIME.MimeMessage();
aMimeMessage.LoadBody(Email);
string boundary = aMimeMessage.GetBoundary();
ArrayList bodylist = new ArrayList();
aMimeMessage.GetBodyPartList(bodylist);
MimeBody ab = (MimeBody)bodylist[bodylist.Count-1];
string prueba = ab.GetRawContent();

//Extract signed part
int start = Email.IndexOf("Content-Type:");
start = Email.IndexOf("Content-Type:",start+1);
string signedcontent = Email.Substring(start);
int last = signedcontent.LastIndexOf(boundary);
signedcontent = signedcontent.Remove(last - 2);
last = signedcontent.LastIndexOf(boundary);
signedcontent = signedcontent.Remove(last - 4);


byte[] bytFirma = Convert.FromBase64String(prueba);
ContentInfo objContent = new ContentInfo(Encoding.ASCII.GetBytes(signedcontent));
SignedCms objDatos = new SignedCms(objContent,true);
objDatos.Decode(bytFirma);
try
{
objDatos.CheckSignature(true);
MessageBox.Show("Ok - La firma concuerda con los datos");
MessageBox.Show(Encoding.ASCII.GetString(objDatos.ContentInfo.Content));
}
catch
{
MessageBox.Show("Error - La firma no concuerda con los datos");
}
}

lunes, 5 de abril de 2010

Delete mails from server

private void button1_Click(object sender, EventArgs e)
{
Pop3MailClient client = new Pop3MailClient("localhost", 110, false, "stpaul", "stpaul");
client.Connect();
client.DeleteEmail((int)dataGridView1.CurrentRow.Cells[3].Value);
List EmailIds;
client.GetEmailIdList(out EmailIds);
dataGridView1.Rows.Clear();
foreach (int Id in EmailIds)
{
string Email;
client.GetRawEmail(Id, out Email);
MIME.MimeMessage aMimeMessage = new MIME.MimeMessage();
aMimeMessage.LoadBody(Email);
ArrayList bodylist = new ArrayList();
aMimeMessage.GetBodyPartList(bodylist);
this.dataGridView1.Rows.Add(aMimeMessage.GetSubject(), aMimeMessage.GetFrom(), aMimeMessage.GetDate(), Id);
}
client.Disconnect();

}

List Mails in Inbox

private void button6_Click(object sender, EventArgs e)
{
Pop3MailClient client = new Pop3MailClient("localhost", 110, false, "stpaul", "stpaul");
client.Connect();
//int NumberOfMails, MailboxSize;
//client.GetMailboxStats(out NumberOfMails, out MailboxSize);
List EmailIds;
client.GetEmailIdList(out EmailIds);
dataGridView1.Rows.Clear();
foreach (int Id in EmailIds)
{
string Email;
client.GetRawEmail(Id, out Email);
MIME.MimeMessage aMimeMessage = new MIME.MimeMessage();
aMimeMessage.LoadBody(Email);
ArrayList bodylist = new ArrayList();
aMimeMessage.GetBodyPartList(bodylist);
this.dataGridView1.Rows.Add(aMimeMessage.GetSubject(), aMimeMessage.GetFrom(), aMimeMessage.GetDate(), Id);
}
client.Disconnect();
}