Mostrando entradas con la etiqueta xml. Mostrar todas las entradas
Mostrando entradas con la etiqueta xml. Mostrar todas las entradas

miércoles, 2 de febrero de 2011

XML tripartita de 2010 a 2011.

Ya hace algunos días que en Excelium hemos adaptado a uno de nuestros clientes los XML para comunicar a la tripartita los cursos que gestiona. Como en los comentarios previos a los enlaces con los esquemas no eran muy explícitos con los cambios, dejo aquí mis notas al respecto. Sí que es verdad que dentro de los XSD hay comentarios que se agradecen.

Inicio Grupos tanto Bonificadas como Organizadoras.

Modalidad1 (Presencial).

  1. Centro, ahora es de un nuevo tipo t_centro_presencial que sólo tiene cif y nombre del centro.

Modalidad2 (Tutoría Presencial).

  1. Centro, ahora es de un nuevo tipo t_centro_presencial que sólo tiene cif y nombre del centro.
  2. Tutor, se ha redefinido el tipo y ahora es obligatorio el nombre y el apellido.

Modalidad3 (Distancia Teleformación).

  1. Centro, se elimina para ponerlo dentro de los tipos asistencia y teleformación. Los datos se sigue necesitando pero en otro sitio.
  2. AsistenciaTeleformación, se añade el Centro y sólo se deja el teléfono.
  3. AsistenciaDistancia, se añade el Centro y sólo se deja el teléfono.
  4. Tutor, se ha redefinido el tipo y ahora es obligatorio el nombre y el apellido.

Finalización Grupos tanto Bonificadas como Organizadoras.

Tipo Participante (t_participante).

Tiene nuevo campo aunque, tipo de documento, que será opcional en el ejercicio 2010. En sucesivos ejercicios será obligatorio. Los posibles valores son 10 - NIF y 60 - NIE

miércoles, 14 de abril de 2010

Desde el XML a nuestra clase con C#

El otro día me anoté en este blog para acordarme como generar la definición de clase (en C#) desde un esquema xsd con xsd.exe y poder generar luego el XML. ¿Pero qué hacer si nos dan el XML? La respuesta aquí. Así cerramos el círculo.

jueves, 1 de abril de 2010

Como crear una clase a partir de un fichero XML o XSD y luego el XML con C#.

Aquí está muy bien explicado como conseguir pasar desde un esquema (xsd) a tener la clase que corresponde al esquema. Una vez llenemos nuestra clase pondremos pasar a tener el xml serializando con un método como este:

private
static
void Serializar(object pObjeto, string pPathXml)

{
try
{


// Generamos el xml.

FileStream fs = null;

try

{

System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(pObjeto.GetType());

fs = new
FileStream(pPathXml, FileMode.Create, FileAccess.Write);

serializer.Serialize(fs, pObjeto);

} catch

{
throw;

}
finally

{
if (fs != null)

{

fs.Close();

}

}

}


catch (Exception wExc) { throw wExc; }

}

Donde pObjeto es del tipo de Clase generada previamente, y pPathXml la ruta completa donde guardaremos el XML.

miércoles, 10 de febrero de 2010

Gestión y serialización de errores

En nuestras páginas necesitamos gestionar los errores no contralados. Una buena práctica es guardar un log de errores en XML. Si intentamos serializar la excepción (Exception) nos dar un error. Hay varias alternativas en internet pero yo estoy probando con algo sencillo y entendible.

Me he creado una clase Errores y dentro de ella un método que tendremos que poner en cada try catch.

El método:

public
class
Errores

{


const string cSaltoASP = "\r\n";

public Errores()

{

//


// TODO: Agregar aquí la lógica del constructor


//

}

public
static
void Gestionar(Exception pErr)

{

string wCarpetaLog = ConfigurationManager.AppSettings["CarpetaLog"].ToString() + @"\Excepciones\";

string wDocPath = wCarpetaLog + "fileErrores.xml";

string PathXml = wDocPath;


DataTable dt = new
DataTable("Excepcion");

dt.Columns.Add("NowTime");

dt.Columns.Add("Data");

dt.Columns.Add("HelpLink");

dt.Columns.Add("InnerException");

dt.Columns.Add("Message");

dt.Columns.Add("Source");

dt.Columns.Add("StackTrace");

dt.Columns.Add("TargetSite");



DataRow dr = dt.NewRow();

dr["NowTime"] = Excelium.Generales.AAAAMMDD(DateTime.Today) + " " + DateTime.Now.ToShortTimeString();



if (pErr.Data != null)

{

dr["Data"] = pErr.Data.ToString();

}


if (pErr.HelpLink != null)

{

dr["HelpLink"] = pErr.HelpLink.ToString();

}


if (pErr.InnerException != null)

{

dr["InnerException"] = pErr.InnerException.ToString();

}


if (pErr.Message != null)

{

dr["Message"] = pErr.Message.ToString();

}


if (pErr.Source != null)

{

dr["Source"] = pErr.Source.ToString();

}


if (pErr.StackTrace != null)

{

dr["StackTrace"] = pErr.StackTrace.ToString();

}


if (pErr.TargetSite != null)

{

dr["TargetSite"] = pErr.TargetSite.ToString();

}


dt.Rows.Add(dr);



DataSet ds = new
DataSet("Excepciones");

ds.Tables.Add(dt);



FileStream fs = null;

fs = new
FileStream(PathXml, FileMode.Append, FileAccess.Write);

ds.WriteXml(fs);

fs.Close();



string sAll = string.Empty;



using (System.IO.StreamReader sr = new System.IO.StreamReader(PathXml, System.Text.Encoding.Default))

{

sAll = sr.ReadToEnd();

}


//



sAll = sAll.Replace(cSaltoASP,"");

sAll = sAll.Replace("</Excepciones><Excepciones>", "");


//


using (System.IO.StreamWriter sw = new System.IO.StreamWriter(PathXml, false, System.Text.Encoding.Default))

{

sw.WriteLine(sAll);

sw.Flush();

}

}

}

Su Uso.


try

{


//Nuestro código;

catch (Exception e)

{


Errores.Gestionar(e);

}

Aviso.

Estoy probando todavía y queda mejorarlo.