Cl.Core.Common
1.2.3
See the version list below for details.
dotnet add package Cl.Core.Common --version 1.2.3
NuGet\Install-Package Cl.Core.Common -Version 1.2.3
<PackageReference Include="Cl.Core.Common" Version="1.2.3" />
paket add Cl.Core.Common --version 1.2.3
#r "nuget: Cl.Core.Common, 1.2.3"
// Install Cl.Core.Common as a Cake Addin #addin nuget:?package=Cl.Core.Common&version=1.2.3 // Install Cl.Core.Common as a Cake Tool #tool nuget:?package=Cl.Core.Common&version=1.2.3
Acerca de Cl.Core.Common
Ofrece una serie de funciones a modo de utilería las cuales nos permiten realizar flujos que son habituales en todos los proyectos, como mapeo de genéricos, logs entre otros.
¿Qué resuelve?
La creación repetitiva de código de uso común a través de los distintos proyectos de los clientes y que a su vez en cada implementación presentan la posibilidad de no replicar el código con exactitud generando errores.
Rutinas de Core
FileToBase64( System.String ): System.String
Descripcion
Usado para convertir un archivo en base64
Parametros
- _filePath(Requerido): Ruta física del archivo
Ejemplo:
public static void MyFunction() { System.String base64pdf = Cl.Core.Common.Core.FileToBase64("C:\mipdf.pdf"); }
GetExceptionMessage( System.Exception ): System.String
Descripcion
Obiene el detalle de la excepción y la retorna en un System.String.
Parametros
- _exception(Requerido): Objeto con la excepción a mapear
Ejemplo:
public static void MyFunction() { try { //Your code } catch(Exception ex) { System.String message = Cl.Core.Common.Core.GetExceptionMessage(ex) } }
InflateObject( System.Data.DataTable ): T
Descripcion
Los registros de un query cargados en System.Data.DataTable serán cargados en el objeto de tipo T.
Parametros
- _dt(Requerido): Origen de datos que van a ser cargados en T
Ejemplo:
public class MyClass { public string Name { get; set; } } public class Process { public static void MyFunction() { //Your code where you execute the query and get a DataTable MyClass oT = Cl.Core.Common.Core.InflateObject<MyClass>(oDataTable); } }
InflateList( System.Data.DataTable ) :System.Collections.Generic.List<T>
Descripcion
Los registros de un query serán mapeados a una lista de tipo T.
Parametros
- _dt(Requerido): Origen de datos que van a ser cargados en T.
Ejemplo:
public class MyClass { public string Name { get; set; } } public class Process { public static void MyFunction() { //Your code where you execute the query and get a DataTable System.Collections.Generic.List<MyClass> tList = Cl.Core.Common.Core.InflateList<MyClass>(oDataTable); } }
ParametersBuilder( System.String, T, System.String[] ):System.Collections.Generic.List<System.Data.Odbc.OdbcParameter>
Descripcion
Convierte las propieades de un objeto a una lista de string.
Parametros
- _invoker(Requerido): Usado para determinar desde donde se ha realizado la llamada a la funcion.
- _object(Requerido): Objeto del cual se van a mapear las propieadas a una lista.
- _toIgnore(Opcional): Lista de propiedades a incluir/excluir según el tipo de inteface que indiquemos.
Ejemplo
public class MyClass { public string Name { get; set; } public string Name2 { get; set; } } public class Process { public static void MyFunction() { MyClass _object = new MyClass() { Name = 'Clavis', Name2 = 'Consultores' }; string[] _toIgnore = ['Name2']; // This example exclude the property 'Name2', so, the paremeters only will be '@Name' with the value 'Clavis' System.Collections.Generic.List<System.Data.Odbc.OdbcParameter> paramerters = Cl.Core.Common.Core.ParametersBuilder<MyClass, ICLExclude>(System.Reflection.MethodBase.GetCurrentMethod().Name, _object, _toIgnore) // This example include the property 'Name2', so, the paremeter only will be '@Name2' with the value 'Consultores' System.Collections.Generic.List<System.Data.Odbc.OdbcParameter> paramerters2 = Cl.Core.Common.Core.ParametersBuilder<MyClass, ICLInclude>(System.Reflection.MethodBase.GetCurrentMethod().Name, _object, _toIgnore) } }
ContextBroker:Microsoft.AspNetCore.Mvc.IActionResult
Descripcion
Mediador entre el contexto de la aplicación y el contexto de la respuesta para poder retornar el código http correcto. Es recomendado mandar las excepciones con Cl.Core.Structures.Classes.CLException, para que el código de la respuesta se mapee de manera automática.
Sobrecargas
- ContextBroker(System.Exception _target)
- ContextBroker(System.Exception _target, System.Net.HttpStatusCode _code)
- ContextBroker<T>(Cl.Core.Structures.Classes.Rebound.CLContext<T> _target)
Parametros
Primera y segunda sobrecarga
_target(Requerido): Excepción que será mapeadaSegunda sobrecarga
_code: Código de la excepción.Tercera sobrecarga
_target(Requerido): Respuesta que será mapeadaEjemplo:
public Microsoft.AspNetCore.Mvc.IActionResult MyEndpoint() { try { Cl.Core.Structures.Classes.Rebound.CLContext<MyType> response = new Cl.Core.Structures.Classes.Rebound.CLContext<MyType> { Code = HttpStatusCode.OK, Response = new Cl.Core.Structures.Classes.Rebound.Response<MyType>() { Data = [1,2,3], Message = "Successfully obtained numbers" } }; return ContextBroker(response); } catch(Exception ex) { // We can use this return ContextBroker(ex); // Or this return ContextBroker(ex, HttpStatusCode.BadRequest); } }
SendEmail( Cl.Core.Structures.Classes.Email.EmailCredential, Cl.Core.Structures.Classes.Email.EmailDetails ): void
Descripcion
Permite realizar envio de correo de manera genérica, soporta copias y ajuntos.
Parametros
- _emailCredential(Requerido): Credenciales y configuración para envio de correos
- _emailDetails(Requerido): Detalles del correo a enviar, receptor, copias y adjuntos
Ejemplo:
Cl.Core.Common.Core.SendEmail( new Cl.Core.Structures.Classes.Email.EmailCredential() { Subject = "Recuperación de contraseña", // Se usa este asunto si no se especifica en los detalles Account = "exampleinfo@clavisco.com", Host = "outlook.office365.com", Password = "Contraseña para envio de correos", Port = 587, Ssl = true }, new Cl.Core.Structures.Classes.Email.EmailDetails() { EmailsTo = new System.Collections.Generic.List<System.String>(){ "example@clavisco.com" }, EmailsCC = new System.Collections.Generic.List<System.String>(){ "ccexample@clavisco.com" }, Subject = "Asunto de ejemplo", Body = $"<p>Puede incluir html y enlaces como el siguiente <a href='example.clavisco.com/click-here'>[click aquí]</a></p>", EmailFiles = new System.Collections.Generic.List<Cl.Core.Structures.Classes.Email.EmailFile>() { new Cl.Core.Structures.Classes.Email.EmailFile() { Base64 = "Aqui va el string en base64 del archivo adjuntado", Extention = ".pdf", FileName = "Ejemplo", FileType = "application/pdf" } }, }; );
QueryStringExposer:void
Descripcion
Esta anotación debe ponerse en el controlador que recibe una serie de parámetros para ser mapeados a un modelo cuando usemos un Get hacia Service Layer. Lo que
QueryStringExposer
hace es leer los parámetros de la url y mapearlos a un modelo cuando hacemos uso del método de extensión Get<TObject>Ejemplo:
public class MyItemModel { public string ItemCode { get; set; } } [ApiController] public class MyController { public GroupsController(Process.IProcess process) { _process = process; } // En el controlador decoramos nuestro endpoint con el QueryStringExposer [QueryStringExposer] public IActionResult Get(string ItemCode) { try { CLContext<Item> clContext = _process.GetItem(); //your response } catch (Exception ex) { return Core.ContextBroker(ex); } finally { LogManager.Commit(Request); } } } public class Process { public static Cl.Core.Structures.Classes.PresentationEntities.ClUserContext GetContext(string _resource) { //your code } public static CLContext<Item> GetItem() { // Aqui ya se deberia setear automaticamente el campo "ItemCode" de "MyItemModel" Cl.Core.Structures.Classes.PresentationEntities.ClUserContext context = GetContext("MyResource").Get<MyItemModel>(); // ...more code } }
Settings Rutinas
GetSetting<T>( System.Reflection.MethodBase, System.String ): T
Descripcion
Usado para acceder a configuraciones del appsettings.json.
Parametros
- _invoker: Usado para determinar que función ha llamado este método
- _jsonKey: Nombre de la llave en el settings.json
Ejemplo:
// Incluir en el Program.cs la siguiente linea para inyectar la interface de configuraciones builder.Services.AddScoped<ISettings, Settings>(); // Debe inyecta la interface ISettings en el contructor de la clase donde la desee utilizar, en este caso el System.String valor = _settings.GetSetting(System.Reflection.MethodBase.GetCurrentMethod(), "DB:SpGetNameDbObjectApp");
LogManager Rutinas
Esta funcionalidad requiere de ciertas configuraciones iniciales, como por ejemplo agregar una llave en el web.config con el nombre
LogPath
, para poder obtener la ruta donde se van a escribir los logs. De manera opcional se puede escoger el intervalo de generación de archivos, por defecto es diario. Puede ser cambiado agregando la propiedadSeriLogRollingInterval
en en el webconfig. Posibles valores(Infinite
,Year
,Month
,Day
,Hour
,Minute
).Todas las sobrecargas del método Commit intentan sacar el usuario del contexto del pipe, accediendo a un Claim llamado
UserEmail
, el cual puede ser configurado al momento de iniciar sesión en la la aplicación. En caso de no suministrar un usuario el valor por defecto de este será 'no_user_found'.Además permite registrar encabezados de la petición, para esto es requerido que los mismos encabezados tengan el prefijo
Cl-
para que sean reconocidos por log manager. Ejemplo: Para indicar el momento en el que salió una petición desde el ui, agregar un encabezado a la petición en el interceptor con el nombreCl-Ui-Request-Time
.Glosario
Para mantener el orden y simetría en los logs se han definido una serie de abreviaciones para estos.
- USR: Usuario al que se le relaciona con los logs(miusuario@correo.com)
- PTH: Dirección física del endpoint(/api/Item/GetItemInfo)
- QRS: Query string de la dirección física del endpoint(?param1=ejemplo¶m2=1234)
- VRB: Verbo http de la petición(GET, POST, ...)
- MDL: Modelo contenido en la petición que solo es visible en operaciones de escritura ({"prop1": "value"}).
- AYV: Versión del emsamblado de Log Manager.
Enter:void
Descripcion
Agrega un enter los logs almacenados hasta el momento.
Ejemplo:
Cl.Core.Common.LogManager.Enter();
Record:void
Descripcion
Agrega un mensaje al contexto actual del log al final de este.
Sobrecargas
- Record(System.String _message)
- Record(System.String _message, Cl.Core.Structures.Classes.TabLevel _tabLevel)
Parametros
Primera y segunda sobrecarga
_message(Requerido): Mensage que será escrito un medio externo.Segunda sobrecarga
_tabLevel(Requerido): Indica si el mensaje recién registrado va a tener un margen izquierdo(Cantidad de tabs).Ejemplo:
public static void MyFunction() { Cl.Core.Common.LogManger.Record("Este es un log de la sobrecarga 1"); Cl.Core.Common.LogManger.Record("Este es un log de la sobrecarga 2", Cl.Core.Structures.Classes.TabLevel.One); }
Commit:void
Descripcion
Este método es exclusivo para escenarios en donde no tenemos un contexto web claro, por ejemplo en un servicio en donde solo necesitamos registrar nuestros eventos y asignarlos al servicio. Por este motivo es requerido pasar estos parámetros de forma manual.
Sobrecargas
- CommitCommit<TObject>(TObject tObject)
- Commit()
Parametros
Primera sobrecarga
tObject(Requerido): Objeto que será serializadoEjemplo:
public HttpResponseMessage MyEndpoint(MyModel _object) { try { //your code } catch { //your exception handler } finally { Cl.Core.Common.LogManager.Commit(_object); Cl.Core.Common.LogManager.Commit(); } }
FlushSettings:void
Descripcion
Este método elimina toda configuración previa generada por alguna extensión de log manager.
Ejemplo
public static void MyFunction() { new List<ClLogManagerOption>() { new ClLogManagerOption() { Key = "LogPath", Value = Cl.Core.Common.Core.GetConfigKeyValue(System.Reflection.MethodBase.GetCurrentMethod(),"LogPath") }, new ClLogManagerOption() { Key = "FilePrefix", Value = "AUTH"}, new ClLogManagerOption() { Key = "User", Value = context.UserName}, }.Ctor().Build().Dtor(); Cl.Core.Common.LogManager.FlushSettings(); }
Código completo de implementación
Este código debe ponerse en el controlador o en el llamado de un servicio para que se haga el commit al final del proceso. Y ya luego el método Cl.Core.Common.LogManger.Record puede ser llamando en la capa que ocupemos para poder registrar nuestros eventos.
public HttpResponseMessage MyEndpoint(MyModel document) { try { Cl.Core.Common.LogManager.Record("Controlador iniciado"); CLContext<Document> oCLContext = PROCESS.Process.CreateDocument(document); Cl.Core.Common.LogManager.Record("Controlador terminado"); return Cl.Core.Common.Core.ContextBroker(oCLContext); } catch(System.Exception exception) { return Cl.Core.Common.Core.ContextBroker(ex); } finally { Cl.Core.Common.LogManager.Commit(document); } }
LogManager Rutinas de Extensión
Opciones disponibles para configurar log manager.
- User: Usuario por defecto que va a usar log manager para asociar logs.
- FileName: Nombre del archivo por defecto que va a contener los logs. Usualmente esto es para servicios.
- LogPath: Directorio por defecto en donde se van a guardar los logs.
Ctor:Cl.Core.Structures.Classes.LogManager.ClLogManagerOption
Descripcion
Este método permite configurar un parámetro de log manager.
Sobrecargas
- Ctor(this Cl.Core.Structures.Classes.LogManager.ClLogManagerOption _logManagerOption)
- Ctor(this System.Collections.Generic.IEnumerable<Cl.Core.Structures.Classes.LogManager.ClLogManagerOption> _source)
Ejemplo:
public static void MyFunction() { (new ClLogManagerOption() { Key = "FilePrefix", Value = "AUTH"}).Ctor(); new List<ClLogManagerOption>() { new ClLogManagerOption() { Key = "LogPath", Value = Cl.Core.Common.Core.GetConfigKeyValue(System.Reflection.MethodBase.GetCurrentMethod(),"LogPath") }, new ClLogManagerOption() { Key = "FilePrefix", Value = "AUTH"}, new ClLogManagerOption() { Key = "User", Value = context.UserName}, }.Ctor(); }
Build( this Cl.Core.Structures.Classes.LogManager.ClLogManagerOption ):Cl.Core.Structures.Classes.LogManager.ClLogManagerOption
Descripcion
Guarda las configuraciones realizadas con Ctor.
Ejemplo:
public static void MyFunction() { (new ClLogManagerOption() { Key = "FilePrefix", Value = "AUTH"}).Ctor().Build(); }
Dtor( this Cl.Core.Structures.Classes.LogManager.ClLogManagerOption ):Cl.Core.Structures.Classes.LogManager.ClLogManagerOption
Descripcion
Limpia todas las configuraciones guardas en memoria
Ejemplo:
public static void MyFunction() { (new ClLogManagerOption() { Key = "FilePrefix", Value = "AUTH"}).Ctor().Build().Dtor(); }
Resumen de versión
Solución de problemas (Troubleshooting)
Ninguna
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Cl.Core.Structures (>= 1.1.1)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Cl.Core.Common:
Package | Downloads |
---|---|
Cl.Core.Db
Servicios para facilitar la manipulacion de las bases de datos |
|
Cl.Core.Sl
Librería que permite interactuar con service layer |
|
Cl.Core.Auth
Servicios para recuperacion y cambio de contraseñas |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.7.2-alpha | 74 | 10/4/2024 |
1.7.1-alpha | 60 | 9/20/2024 |
1.7.0-alpha | 89 | 9/13/2024 |
1.6.7 | 544 | 8/8/2024 |
1.6.7-alpha | 125 | 7/31/2024 |
1.6.6-alpha | 289 | 6/22/2024 |
1.6.5-alpha | 95 | 6/21/2024 |
1.6.4-alpha | 92 | 6/13/2024 |
1.6.3 | 131 | 6/6/2024 |
1.6.3-alpha | 91 | 6/5/2024 |
1.6.2 | 218 | 5/18/2024 |
1.6.2-alpha | 93 | 4/30/2024 |
1.6.1-alpha | 96 | 4/26/2024 |
1.6.0-alpha | 144 | 4/22/2024 |
1.5.2-alpha | 87 | 4/5/2024 |
1.5.1 | 219 | 4/5/2024 |
1.5.1-alpha | 111 | 3/15/2024 |
1.5.0-alpha | 101 | 3/8/2024 |
1.4.0 | 230 | 3/1/2024 |
1.4.0-alpha | 119 | 2/23/2024 |
1.3.2 | 188 | 2/16/2024 |
1.3.2-alpha | 151 | 2/14/2024 |
1.3.1-alpha | 155 | 2/14/2024 |
1.3.0-alpha | 117 | 1/19/2024 |
1.2.3 | 368 | 11/28/2023 |
1.2.3-alpha | 129 | 11/10/2023 |
1.2.2 | 195 | 10/12/2023 |
1.2.2-alpha | 97 | 10/9/2023 |
1.2.1.2 | 140 | 10/3/2023 |
1.2.1.1 | 142 | 10/2/2023 |
1.2.1 | 162 | 9/29/2023 |
1.2.1-alpha | 103 | 9/22/2023 |
1.2.0-alpha | 102 | 9/21/2023 |
1.1.0-alpha | 134 | 8/17/2023 |
1.0.0.1 | 299 | 7/4/2023 |
1.0.0.1-alpha | 131 | 8/16/2023 |
1.0.0 | 205 | 7/4/2023 |