Cl.Core.Common 1.2.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Cl.Core.Common --version 1.2.2                
NuGet\Install-Package Cl.Core.Common -Version 1.2.2                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Cl.Core.Common" Version="1.2.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Cl.Core.Common --version 1.2.2                
#r "nuget: Cl.Core.Common, 1.2.2"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Cl.Core.Common as a Cake Addin
#addin nuget:?package=Cl.Core.Common&version=1.2.2

// Install Cl.Core.Common as a Cake Tool
#tool nuget:?package=Cl.Core.Common&version=1.2.2                

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 _filePath: Ruta física del archivo

Usado para convertir un archivo en base64

Ejemplo:

// Convirtiendo un archivo a base64 System.String base64pdf = Cl.Core.Common.Core.FileToBase64("C:\mipdf.pdf");

GetExceptionMessage:System.String

  • System.Exception _exception: Objeto con la excepción a mapear

Obiene el detalle de la excepción y la retorna en un System.String.

Ejemplo:

// Mapeando la excepcion a un System.String
System.String message = Cl.Core.Common.Core.GetExceptionMessage(exception)

InflateObject:T

T:new(): Objeto que va a ser llenado con el System.Data.DataTable

  • System.Data.DataTable _dt: Origen de datos que van a ser cargados en T

Los registros de un query cargados en System.Data.DataTable serán cargados en el objeto de tipo T.

Ejemplo:

// Obtiene el modelo retornado por el datable
T oT = Cl.Core.Common.Core.InflateObject<T>(oDataTable);

InflateList:System.Collections.Generic.List<T>

T:new(): Objeto que va a ser llenado con el System.Data.DataTable

  • System.Data.DataTable _dt: Origen de datos que van a ser cargados en T

Los registros de un query serán mapeados a una lista de tipo T.

Ejemplo:

// Convirtiendo los registros de un datable a una lista de tipo T.
System.Collections.Generic.List<T> tList = Cl.Core.Common.Core.InflateList<T>(oDataTable);

ParametersBuilder:System.Collections.Generic.List<System.String>

T:new(): Objeto que va a ser mapeado a un query.

U:Cl.Core.Structures.Interfaces.ICLMaster

  • System.String _invoker: Usado para determinar que métod ha invocado es función y podar dar el error respectivo en caso de...
  • T _object: Objeto del cual se van a mapear las propieadas a una lista.
  • System.String[] _toIgnore: Lista de propiedades a incluir/excluir según el tipo de inteface que indiquemos.

Convierte las propieades de un objeto a una lista de string.

// Convirtiendo las propiedades de un objeto a una lista.
System.String[] properties = Cl.Core.Common.Core.ParametersBuilder<T, V>(System.Reflection.MethodBase.GetCurrentMethod().Name, _object, _toIgnore)

ContextBroker:System.Net.Http.HttpResponseMessage

  • System.Exception _target: Excepción que será mapeada.
  • System.Net.HttpStatusCode _code: Código de la excepción.

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.

ContextBroker:System.Net.Http.HttpResponseMessage

  • System.Exception _target: Excepción que será mapeada.

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.

QueryStringExposer:void

  • Cl.Core.Structures.Classes.CLContext<T> _target: Formato de respuesta enfocada al contexto.

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 párametros de la url y mapearlos a un modelo cuando hacemos uso del método de extensión Get<TObject>

// En el controlador decoramos nuestro endpoint con el QueryStringExposer
[QueryStringExposer]
public async Task<HttpResponseMessage> Get(string ItemCode)
{
try
{
LogManager.Record("CONTROLLER STARTED");
CLContext<Item> cLContext = await Process.GetItem();
LogManager.Record("CONTROLLER ENDED");
return Core.ContextBroker(cLContext);
}
catch (Exception ex)
{
return Core.ContextBroker(ex);
}
finally
{
LogManager.Commit(Request);
}
}

ContextBroker:System.Net.Http.HttpResponseMessage

T:new(): El objeto que es producto de alguna transacción.

  • Cl.Core.Structures.Classes.CLContext<T> _target: Formato de respuesta enfocada al contexto.

Mediador entre el contexto de la aplicación y el contexto de la respuesta para poder retornar el código http correcto.

SendEmail: void

  • Cl.Core.Structures.Classes.Email.EmailCredential _emailCredential: credenciales y configuración para envio de correos
  • Cl.Core.Structures.Classes.Email.EmailDetails: detalles del correo a enviar, emisor, receptor, copias y adjuntos

Permite realizar envio de correo de manera genérica, soporta copias y ajuntos.

Ejemplo:
CL.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"
            }
        },
    };
); 

Settings Rutinas

GetSetting<T>:T

  • System.Reflection.MethodBase _invoker: Usado para determinar que función ha llamado este método
  • System.String _jsonKey: Nombre de la llave en el settings.json

Usado para acceder a configuraciones del appsettings.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 propiedad SeriLogRollingInterval 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 nombre 'Cl-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&param2=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

Agrega un enter los logs almacenados hasta el momento.

Ejemplo:

// Dando un enter
Cl.Core.Common.LogManager.Enter();

Record:void

  • System.String _message: Mensage que será escrito un medio externo.

Agrega un mensaje al contexto actual del log al final de este.

Ejemplo:

// Agregando un mensaje de prueba
Cl.Core.Common.LogManger.Record("Hola Sap B1");

Record:void

  • System.String _message: Mensage que será escrito un medio externo.
  • Cl.Core.Structures.TabLevel: Indica si el mensaje recién registrado va a tener un margen izquierdo(Cantidad de tabs).

Agrega un mensaje al contexto actual del log al final de este con N tabs de desplazamiento.

Ejemplo:

// Agregando un mensaje de prueba con un nivel de tab
Cl.Core.Common.LogManger.Record("Hola Sap B1", CL.STRUCTURES.TabLevel.One);

Commit:void

  • System.Net.Http.HttpRequestMessage _httpRequestMessage: Contexto actual de la petición.
  • System.String _user: Usuario al que se le asignaran los logs.

En caso de no suministrar un usuario al método este intentará buscarlo en un Claim llamado 'UserEmail' y en caso final de no encontrarlo, este asignará el valor de 'no_user_found' al usuario que registrará el log.

Ejemplo

// Registrando un evento suministrando un usuario.
Cl.Core.Common.LogManager.Commit(Request, "eaguilar@clavisco.com");
// Registrando un evento en el que log manager intentará obtener el usuario del claim.
Cl.Core.Common.LogManager.Commit(Request);

Commit:void

  • System.String _fileName: Tipo de operación que nos encontramos realizando.
  • System.String _user: Usuario al que se le asignaran los logs.

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.

Ejemplo

// Registrando un evento suministrando un usuario.
Cl.Core.Common.LogManager.Commit("ORDR", "usuario\servicio");

FlushSettings:void

Este método elimina toda configuración previa generada por alguna extensión de log manager.

Ejemplo

// Este método debe ser llamado porterior a un CommitEste método debe ser llamado porterior a un Commit.
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.

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(Request, 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

  • this Cl.Core.Structures.Classes.LogManager.ClLogManagerOption _logManagerOption

Este método permite configurar un parámetro de log manager.

Ejemplo

(new ClLogManagerOption() { Key = "FileName", Value = "AUTH"}).Ctor();

Ctor:Cl.Core.Structures.Classes.LogManager.ClLogManagerOption

  • this System.Collections.Generic.IEnumerable<Cl.Core.Structures.Classes.LogManager.ClLogManagerOption> _logManagerOption

Este método permite configurar una lista de parámetros de log manager

Ejemplo

new List<ClLogManagerOption>() {
new ClLogManagerOption() { Key = "LogPath", Value = "C:\" },
new ClLogManagerOption() { Key = "FileName", Value = "AUTH"},
new ClLogManagerOption() { Key = "User", Value = context.UserName},
}.Ctor();

Build:Cl.Core.Structures.Classes.LogManager.ClLogManagerOption

  • this Cl.Core.Structures.Classes.LogManager.ClLogManagerOption _logManagerOption _logManagerOption

Guarda las configuraciones realizadas con Ctor.

Ejemplo

logManagerOptions.Ctor().Build();

Dtor:Cl.Core.Structures.Classes.LogManager.ClLogManagerOption

  • this Cl.Core.Structures.Classes.LogManager.ClLogManagerOption _logManagerOption

Limpia todas las configuraciones guardas en memoria

Ejemplo

logManagerOptions.Ctor().Build().Dtor();

Resumen de versión

Características (Features)
  • Método "GetSetting<T>(invoker, jsonKey)" para obtener configuraciones del archivo appsettings.json
Correcciones (Fixes)

Ninguna

Solución de problemas (Troubleshooting)

Ninguna

Clavis Consultores ©

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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