SAS.BduApiClient
Introducción
En el presente documento se presenta la librería SAS.BduApiClient, componente .NET Standar 2.0, para el acceso a datos de BDU.
Esta librería permite el acceso a los datos de BDU utilizando dos implementaciones diferentes: una que utiliza internamente el servicio web de BDU y otra que utiliza réplica de BBDD.
La versión actual de la librería , en su versión acceso a réplica de BBDD, solo dispone de métodos para acceso a la información de mutuas, decretos y los datos principales de usuarios de BDU.
Se recomienda la instalación de la versión de la librería .NET Standard 2.0, en su versión Servicio Web, compatible con .NET Framework desde la versión 4.6.1 de .NET Framework.
Dependencias
Nombre del componente | Versión | Descripción |
---|
System.ServiceModel.Duplex | 4.5.3 | Proporciona clases para consumir y comunicarse con servicios Dúplex |
System.ServiceModel.Http | 4.5.3 | Gestiona solicitudes realizadas a través del protocolo HTTP |
System.ServiceModel.NetTcp | 4.5.3 | Genera de forma predeterminada una pila de comunicación en tiempo de ejecución, que utiliza la seguridad de transporte, TCP para la entrega de mensajes |
System.ServiceModel.Security | 4.5.3 | Se encarga de temas generales relacionados con la seguridad |
SAS.Common.Core | 1.1.0 | Componente .NET común con clases e interfaces core de aplicaciones |
SAS.Common.Kernel | 1.1.0 | Componente .NET kernel de aplicaciones, como interfaz mapper o diversas utilidades linq |
SAS.MacoApiClient | 2.5.0 | Componente core de MacoApiClient |
SAS.MacoApiClient.WebServices | 2.5.0 | Componente MacoApiClient para el acceso a datos de Maco utilizando los servicios web de Maco |
SAS.MacoApiClient.Exceptions | 2.5.0 | Componente MacoApiClient para el control de excepciones |
SASUtils.Parse | 1.0.0 | Componente utilidad para la conversión entre tipos |
SASUtils.Xml | 1.0.1 | Componente .NET común para el tratamiento de XMLs |
SAS.Common.OracleProvider | 1.3.3 | Componente .NET común para la configuración del proveedor de BBDD Oracle |
EntityFramework | 6.2.0 | ORM de Microsoft para .NET |
Oracle.ManagedDataAccess | 19.6.0 | Proveedor de acceso a datos de Oracle para .NET |
Oracle.ManagedDataAccess.EntityFramework | 19.6.0 | ORM de Oracle para .NET |
Errores conocidos
- Bug al obtener texto de un nodo XML: Corregido desde de la version 1.0.1

Integración de la librería
Configurar en Visual Studio un nuevo origen de paquetes Nuget ( clic en “Administrar Paquetes Nuget …” del proyecto al que se desea añadir la referencia el componente BduApiClient) indicando en el campo Origen la dirección de repositorios de componentes .NET del SAS: http://net.lib.repository.alm.sas.junta-andalucia.es/.
Versión API < 1.4.0
- Instalar el componente SAS.BduApiClient.
Versión API >= 1.4.0
- Instalar el componente SAS.BduApiClient.WebService para el acceso a datos de Bdu utilizando los servicios web de BDU.
- Solo en el caso de que se necesite consultar datos de mutuas y decretos, instalar el componente SAS.BduApiClient.ManagedDataAccess.Oracle.
Configuración
Prerequisitos
Previo a la configuración de la librería se debe de disponer de los siguientes datos proporcionados por la Oficina Técnica de Interoperabilidad:
- Código del módulo del sistema en Maco. Se corresponde con el código en el que está identificado el sistema en Maco.
- Endpoints del servicio web de Maco, tanto de PRE como de PRO. En el caso de PRE, es el siguiente:
Procedimiento de configuración
La configuración de la API depende del tipo de implementación de servicios que se vaya a utilizar, según se acceda a los datos mediante el Servicio Web de BDU o mediante réplicas de BBDD. Veamos cada una de ellas:
En ambos ejemplos se utiliza como base un proyecto .NET MVC.
Primero, en el fichero Startup.cs, método ConfigureServices, se inicializa el contenedor de inyección de dependencia:
Bloque de código |
---|
language | c# |
---|
title | 1 Inicializar contenedor de inyección de dependencia ContainerDI |
---|
|
public void ConfigureServices(IServiceCollection services)
{
...
ContainerDI.SetAsyncScopedLifestyle(); // establecer estilo de vida por defecto del contenedor de inyección. Permite procesar tanto operaciones asíncronas como síncronas
ContainerDI.RegisterServices(ref services);
...
}
|
ContainerDI, clase del componente común SAS.Util.Injection, el cual permite el registro por inyección de dependencia de los diferentes servicios y tipos utilizados en el sistema.
En el fichero Startup.cs, método Configure(IApplicationBuilder app, IHostingEnvironment env), añadir la siguiente configuración de los controladores , viewcomponents de MVC y la llamada al nuevo método InitializeContainer:
Bloque de código |
---|
language | c# |
---|
title | 3 Registrar controladores y ViewComponents |
---|
|
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
ContainerDI.RegisterMvcControllers(ref app);
ContainerDI.RegisterMvcViewComponents(ref app);
this.InitializeContainer();
...
}
|
A continuación, en el fichero Startup.cs, crear el método void InitializeContainer() y añadir la siguiente configuración para registrar por inyección de dependencia los diferentes servicios utilizados de la API:
Image Removed Image Added
| Inyeccción de dependencias En el caso de que no se desee utilizar el inyector de dependencia ContainerDI, la versión 1.4.0 del componente SAS.BduApiClient.WebService permite la configuración de la inyección de dependencia utilizando el inyector por defecto de .NET, del siguiente modo .
Bloque de código |
---|
| services.AddBduWSServices(bduApiConfig ); |
Se le pasan como argumentos el objeto configuración de la API. Este método se encuentra en el espacio de nombre SAS.BduApiClient.WebService.IoC. |
---|
Configuración del servicio de búsqueda de BDU que utiliza internamente el servicio web de BDU
Bloque de código |
---|
language | c# |
---|
title | 4 Registrar el servicio de búsqueda de BDU |
---|
|
private void InitializeContainer()
{
#region Registrar BDU
ContainerDI.Register<IBduSearch<MacoUser>, BduSearch>(ContainerDI.LifeStyleContainer.Transient);
|
Configuración de la API de BDU, indicando url principal de BDU y código de la aplicación en MACO
Bloque de código |
---|
language | c# |
---|
title | 5 Configuración de la API de BDU |
---|
|
var bduApiConfig = new BduApiConfig(Configuration.GetSection("WebServiceLocator:ServiceAddressBdu").Value, Configuration.GetSection("MacoApiClient:MacoModule").Value){}; |
Configuración el endpoint del Servicio web de BDU
Bloque de código |
---|
language | c# |
---|
title | 6 Configuración del endpoint del servicio de BDU |
---|
|
bduApiConfig.EndPoints = new Dictionary<BduApiClient.WebService.Api.Entity.EndPointType, string>
{
{ SAS.BduApiClient.WebService.Api.Entity.EndPointType.Solicitud, Configuration.GetSection("WebServiceLocator:EndPointAddressBduSolicitud").Value }
}; |
Image Removed Image Added
| Breaking changes En las versiones anteriores a 1.4.0, el enumerado EndPointType tenía el espacio de nombre SAS.BduApiClient.Api.Entity .
|
---|
Registro del tipo BDUApiConfig que implementa la interfaz de configuración de BDU, IBduApiConfig
Bloque de código |
---|
language | c# |
---|
title | 7 Registro del tipo BduApiConfig que implementa la interfaz IBduApiConfig |
---|
|
ContainerDI.Register<IBduApiConfig>(() => bduApiConfig, ContainerDI.LifeStyleContainer.Transient); |
Registro del tipo WSBduUserTransformer, que implementa la interfaz IBduUserTransformer. Realiza la transformación de los mensajes XML recibidos del servicio web de BDU a objetos.
Bloque de código |
---|
language | c# |
---|
title | 8 Registrar el servicio de transformación de datos de BDU |
---|
|
ContainerDI.Register<IBduUserTransformer , WSBduUserTransformer >(ContainerDI.LifeStyleContainer.Transient); |
Image Removed Image Added
| Breaking changes
En la versión 1.4.0, se ha cambiado el nombre a la interfaz IBduUserManager y a la clase BduUserManager por IBduUserTransformer y WSBduUserTransformer respectivamente.
|
---|
Registro del tipo BduExceptionManager, que implementa la interfaz IBduExceptionManager. Se encarga de gestionar las excepciones y errores informados del servicio web de BDU.
Bloque de código |
---|
language | c# |
---|
title | 9 Registrar el tipo BduExceptionManager |
---|
|
ContainerDI.Register<IBduExceptionManager, BduExceptionManager>(ContainerDI.LifeStyleContainer.Transient); |
Registro del tipo WsBduManager, que implementa la interfaz IWsBduManager. Es la clase wrapper encargada de llamar a los servicios web de BDU.
Bloque de código |
---|
language | c# |
---|
title | 10 Registrar el servicio WsBduManager |
---|
|
ContainerDI.Register<IWsBduManager, WsBduManager>(ContainerDI.LifeStyleContainer.Transient);
} |
- Configuración de la API versión Réplica de BBDD
Registro del servicio IConfigContextApiConnection, configuración del contexto de BBDD con el tipo concreto ConfigContextApiBduConnection. Recibe como parámetros la cadena de conexión de la réplica, en este caso del fichero de configuración app.config, tipo de esquema BDU y nombre del esquema de la BBDD.
Bloque de código |
---|
language | c# |
---|
title | 11 Registrar el contexto de BBDD de Bdu |
---|
|
private void InitializeContainer()
{
...
#region Registrar BDU
// Conexion a la réplica de BDU
var configContextApiBduConnection = new ConfigContextApiBduConnection(new ManagedConfigConnectionBase<SchemaType>[]
{
new ManagedConfigConnectionBase<SchemaType>(ConfigurationManager.ConnectionStrings["BDUConnection"].ConnectionString, SchemaType.Bdu, "NOMBRE DEL ESQUEMA")
});
ContainerDI.Register<IConfigContextApiConnection<SchemaType>>(() => configContextApiBduConnection , ContainerDI.LifeStyleContainer.Transient);
|
Registro del servicio BduUserService, que implemeneta la interfaz IBduSearch. Permite el acceso a datos de usuario vía réplica de BBDD.
Bloque de código |
---|
language | c# |
---|
title | 12 Registrar el servicio BduUserService |
---|
|
ContainerDI.Register<IBduSearch<object>, BduUserService>(ContainerDI.LifeStyleContainer.Transient); |
Registro del servicio MutualInsuranceService, que implementa la interfaz IMutualInsuranceService, para el acceso a datos de mutuas vía réplica de BBDD.
Bloque de código |
---|
language | c# |
---|
title | 13 Registrar el servicio MutualInsuranceService |
---|
|
ContainerDI.Register<IMutualInsuranceService<object>, MutualInsuranceService>(ContainerDI.LifeStyleContainer.Transient); |
Registro del servicio BduDecreeRequestService, que implemeneta la interfaz IBduDecreeRequestService, para el acceso a datos de decretos vía réplica de BBDD.
Bloque de código |
---|
language | c# |
---|
title | 14 Registrar el servicio BduDecreeRequestService |
---|
|
ContainerDI.Register<IBduDecreeRequestService<object>, BduDecreeRequestService>(ContainerDI.LifeStyleContainer.Transient); |
Registro del tipo UserRepository que implementa la interfaz IUserRepository. Repositorio encargado de acceder a datos de usuario vía réplica de BBDD.
Bloque de código |
---|
language | c# |
---|
title | 15 Registrar el repositorio UserRepository |
---|
|
ContainerDI.Register<IUserRepository, UserRepository>(ContainerDI.LifeStyleContainer.Transient); |
Registro del tipo MutualidadRepository que implementa la interfaz IMutualidadRepository. Repositorio encargado de acceder a datos de mutualidad vía réplica de BBDD.
Bloque de código |
---|
language | c# |
---|
title | 16 Registrar el repositorio MutualidadRepository |
---|
|
ContainerDI.Register<IMutualidadRepository, MutualidadRepository>(ContainerDI.LifeStyleContainer.Transient);
#endregion
...
} |
Image Removed Image Added
| Inyeccción de dependencias En el caso de que no se desee utilizar el inyector de dependencia ContainerDI, la versión 1.4.0 del componente SAS.BduApiClient.ManagedDataAccess.Oracle permite la configuración de la inyección de dependencia utilizando el inyector por defecto de .NET, del siguiente modo.
Bloque de código |
---|
services.AddBduOracleServices(configContextApiBduConnection ); |
Se le pasa como argumento la configuración del contexto de BDU. Este método se encuentra en el espacio de nombre SAS.BduApiClient.ManagedDataAccess.Oracle.IoC. |
---|
A continuación se presenta el código completo del ejemplo de configuración :
Bloque de código |
---|
language | c# |
---|
title | 17 Ejemplo de configuración de la librería utilizando el inyector de dependencia ContainerDI |
---|
collapse | true |
---|
|
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
...
ContainerDI.SetAsyncScopedLifestyle();
ContainerDI.RegisterServices(ref services);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
ContainerDI.RegisterMvcControllers(ref app);
ContainerDI.RegisterMvcViewComponents(ref app);
app.UseDeveloperExceptionPage();
this.InitializeContainer();
...
}
/// <summary>
/// Inicializador de contenedor utilizando el inyector de dependencia ContainerDI.
/// </summary>
private void InitializeContainer()
{
...
#region registrar BDU
ContainerDI.Register<IUserService, UserService>(ContainerDI.LifeStyleContainer.Transient);
ContainerDI.Register<IBduUseCase, BduUseCase>(ContainerDI.LifeStyleContainer.Transient);
ContainerDI.Register<IBduSearch<MacoUser>, BduSearch>(ContainerDI.LifeStyleContainer.Transient);
var bduApiConfig = new BduApiConfig(Configuration.GetSection("WebServiceLocator:ServiceAddressBdu").Value, Configuration.GetSection("MacoApiClient:MacoModule").Value)
{
};
bduApiConfig.EndPoints = new Dictionary<BduApiClient.WebService.Api.Entity.EndPointType, string>
{
{ SAS.BduApiClient.WebService.Api.Entity.EndPointType.Solicitud, Configuration.GetSection("WebServiceLocator:EndPointAddressBduSolicitud").Value }
};
ContainerDI.Register<IBduApiConfig>(() => bduApiConfig, ContainerDI.LifeStyleContainer.Transient);
ContainerDI.Register<IBduUserTransformer, WSBduUserTransformer>(ContainerDI.LifeStyleContainer.Transient);
ContainerDI.Register<IBduExceptionManager, BduExceptionManager>(ContainerDI.LifeStyleContainer.Transient);
ContainerDI.Register<IBduService, BduService>(ContainerDI.LifeStyleContainer.Transient);
ContainerDI.Register<IWsBduManager, WsBduManager>(ContainerDI.LifeStyleContainer.Transient);
ContainerDI.Register<IBduFactory>(() => new BduFactory(bduApiConfig), ContainerDI.LifeStyleContainer.Transient);
//descomentar en caso de consultar datos de mutuas vía réplica de BBDD
//var configContextApiBduConnection = new ConfigContextApiBduConnection(new ManagedConfigConnectionBase<SchemaType>[]
//{
//new ManagedConfigConnectionBase<SchemaType>(ConfigurationManager.ConnectionStrings["BDUConnection"].ConnectionString, SchemaType.Bdu, "NOMBRE DEL ESQUEMA")
//});
//ContainerDI.Register<IConfigContextApiConnection<SchemaType>>(() => configContextApiBduConnection , ContainerDI.LifeStyleContainer.Transient);
//ContainerDI.Register<IBduSearch<object>, BduUserService>(ContainerDI.LifeStyleContainer.Transient);
//ContainerDI.Register<IMutualInsuranceService<object>, MutualInsuranceService>(ContainerDI.LifeStyleContainer.Transient);
//ContainerDI.Register<IBduDecreeRequestService<object>, BduDecreeRequestService>(ContainerDI.LifeStyleContainer.Transient);
//ContainerDI.Register<IUserRepository, UserRepository>(ContainerDI.LifeStyleContainer.Transient);
//ContainerDI.Register<IMutualidadRepository, MutualidadRepository>(ContainerDI.LifeStyleContainer.Transient);
#endregion registrar BDU
}
} |
Bloque de código |
---|
language | c# |
---|
title | 18 Ejemplo de configuración de la librería utilizando el inyector de dependencia por defecto de .NET |
---|
collapse | true |
---|
|
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
...
#region configuración BDU
var bduApiConfig = new BduApiConfig(Configuration.GetSection("WebServiceLocator:ServiceAddressBdu").Value, Configuration.GetSection("MacoApiClient:MacoModule").Value)
{
};
bduApiConfig.EndPoints = new Dictionary<BduApiClient.WebService.Api.Entity.EndPointType, string>
{
{ SAS.BduApiClient.WebService.Api.Entity.EndPointType.Solicitud, Configuration.GetSection("WebServiceLocator:EndPointAddressBduSolicitud").Value }
};
services.AddBduWSServices(bduApiConfig);
//descomentar en caso de consultar datos de mutuas vía réplica de BBDD
//var configContextApiBduConnection = new ConfigContextApiBduConnection(new ManagedConfigConnectionBase<SchemaType>[]
//{
//new ManagedConfigConnectionBase<SchemaType>(ConfigurationManager.ConnectionStrings["BDUConnection"].ConnectionString, SchemaType.Bdu, "NOMBRE DEL ESQUEMA")
//});
//services.AddBduOracleServices( configContextApiBduConnection );
#endregion
}
}
|
Criterios
El objeto QuerysBduUserSearchDto, es la representación de los criterios de búsqueda que son soportados por la API client. Dicho objeto permite los siguientes valores:
- Flags, estos son los modificadores soportados:
- DetailedInfo: Booleano indicando si se desea la información detallada (true) o resumida (false). Valor por defecto: False
- FarmaciaInfo: Booleano indicando si se desea la información detallada sobre farmacia. Valor por defecto: False
- FullAddress: Booleano indicando si se desea la información detallada del domicilio del paciente. Valor por defecto: False.
- Identificadores de usuario único
- NUHSA: Alfanumérico.
- CodSns: Alfanumérico.
- SocialSecurityNumber: Alfanumérico.
- AffiliationNumber: Alfanumérico
- Nuhsas: Lista de códigos NUHSA
- DocumentIdType + DocumentType + DocumentId: permite identificar un paciente por el identificador definido.
- Filtros de búsqueda
- BirthDateYear: Alfanumérico.
- Name: Nombre del paciente
- Surname: Primer apellido del paciente
- SecondSurname: Segundo apellido del paciente
Antes de realizar la búsqueda de usuarios vía réplica de BBDD, se valida que el objeto criterio de búsqueda QuerysBduUserSearchDto cumpla las siguientes condiciones:
- El objeto QuerysBduUserSearchDto no puede ser nulo
- No pueden ser nulo los siguientes atributos: SocialSecurityNumber, AffiliationNumber, NUHSA, CodSns, DocumentId
- Al menos se deben de especificar dos campos de entre: Name, Surname, SecondSurname
Métodos de servicio
Los métodos de servicio que la API proporciona son los siguientes:
- Búsqueda de usuarios (consula detallada/corta)
La búsqueda de usuarios se realizará mediante los métodos "findUsers" que soportan el criteria descrito anteriormente
Image Removed Image Added
| Breaking changes La versión actual del componente SAS.BduApiClient.ManagedDataAccess.OracleActualmente, versión réplica de la API, sólo se permite la consulta detallada.
|
---|
- Búsqueda información de mutuas (sólo modo réplica de BBDD)
- Listado de mutualidades
- Listado de mutualidades que cumplen con un criterio - Búsqueda información de decretos (sólo modo réplica de BBDD)
- Búsqueda de información de solicitud de decreto que cumple un criterio
Uso
A continuación se describe el uso de la librería.
Funcionalidades utilizando Servicio Web de BDU
Una vez realizada la configuración de la API, se siguen los siguientes pasos para realizar una búsqueda de usuarios utilizando el servicio Web de BDU.
En la clase donde se va a añadir esta funcional, BduService en el ejemplo, añadir al constructor un objeto de tipo IBduSearch: IBduSearch<MacoUser> bduSearch.
Bloque de código |
---|
language | c# |
---|
title | 19 Constructor de la clase que llamará a los métodos de la API BDU |
---|
|
...
public class BduService: IBduService
{
private IBduSearch<MacoUser> _bduSearch;
public BduService(IBduSearch<MacoUser> bduSearch)
{
_bduSearch = bduSearch;
}
...
} |
Añadir un método, FindUsers en el ejemplo, con los siguientes parámetros: IGenericAuthContext<MacoUser> petitionerUser y QuerysBduUserSearchDto querysBduUserSearchDto. El primero hace referencia al usuario Maco peticionario de la llamada y el segundo los criterial de la query que se va a realizar.
Llamar al método FindUsers del servicio de BDU, _bduSearch en el ejemplo, pasando como parámetro el usuario peticionario y la query, petitionerUser y queryBduUserSearchDto en el ejemplo.
Por último, se hace el mapping entre el tipo usuario BDU devuelto por la API y el propio del sistema que realiza la llamada.
Bloque de código |
---|
language | c# |
---|
title | 20 Método que busca usuarios en BBDD |
---|
|
public List<BduUser> FindUsers(IGenericAuthContext<MacoUser> petitionerUser, QuerysBduUserSearchDto querysBduUserSearchDto)
{
List<BduUser> resultFindUsers = new List<BduUser>();
var result = _bduSearch.FindUsers(petitionerUser, querysBduUserSearchDto);
foreach (SAS.BduApiClient.Api.Entity.BduUser bduUser in result)
{
var bduUserLocal = new BduUser();
bduUserLocal.Name = bduUser.Name;
bduUserLocal.FirstSurname = bduUser.FirstSurname;
bduUserLocal.SecondSurname = bduUser.SecondSurname;
//en un mapping hacer resto de campos
resultFindUsers.Add(bduUserLocal);
}
return resultFindUsers;
} |
El código completo del ejemplo que consulta datos de usuarios vía Réplica de BBDD se muestra a continuación:
Bloque de código |
---|
language | c# |
---|
title | 21 Ejemplo completo de búsqueda de usuarios en BBDD |
---|
collapse | true |
---|
|
using SAS.MacoApiClient.User.Entity;
using SAS.Common.Core.Boundary.Contracts;
using SAS.BduApiClient.Api.Boundary;
using SAS.BduApiClient.Api.Entity.dto;
public class BduService: IBduService
{
private IBduSearch<MacoUser> _bduSearch;
public BduService(IBduSearch<MacoUser> bduSearch)
{
_bduSearch = bduSearch;
}
public List<BduUser> FindUsers(IGenericAuthContext<MacoUser> petitionerUser, QuerysBduUserSearchDto querysBduUserSearchDto)
{
List<BduUser> resultFindUsers = new List<BduUser>();
var result = _bduSearch.FindUsers(petitionerUser, querysBduUserSearchDto);
foreach (SAS.BduApiClient.Api.Entity.BduUser bduUser in result)
{
var bduUserLocal = new BduUser();
bduUserLocal.Name = bduUser.Name;
bduUserLocal.FirstSurname = bduUser.FirstSurname;
bduUserLocal.SecondSurname = bduUser.SecondSurname;
//en un mapping hacer resto de campos
resultFindUsers.Add(bduUserLocal);
}
return resultFindUsers;
}
} |
Crear la interfaz IBduService que implementa la clase BduService:
Bloque de código |
---|
language | c# |
---|
title | 22 Definición de la interfaz IBduService |
---|
|
public interface IBduService
{
List<BduUser> FindUsers(IGenericAuthContext<MacoUser> petitionerUser, QuerysBduUserSearchDto querysBduUserSearchDto);
} |
La clase que se haya creado para añadir la funcionalidad de búsqueda de usuarios se debe registrar en la clase Startup.cs, método InitializeContainer(), al igual que el resto de servicio y tipos. Continuando con el ejemplo:
Bloque de código |
---|
language | c# |
---|
title | 23 Registrar la clase servicio que implementa la interfaz IBduService con el inyector de dependencia ContainerDI |
---|
|
ContainerDI.Register<IBduService, BduService>(ContainerDI.LifeStyleContainer.Transient); |
o si se declara con el inyector de dependencia por defecto de .NET:
Bloque de código |
---|
language | c# |
---|
title | 24 Registrar la clase servicio que implementa la interfaz IBduService con el inyector de dependencia por defecto de .NET |
---|
|
services.AddTransient<IBduService, BduService>(); |
Funcionalidades utilizando la réplica de BDU
- Búsqueda de usuarios
La búsquea de usuarios se realiza del mismo modo que se explica en el punto anterior. Únicamente hay que tener encuenta que el servicio que implementa la interfaz IBduSearch es, en este caso, SAS.BduApiClient.ManagedDataAccess.Oracle.Boundary.BduUserService (ver Configuración de la API versión Réplica de BBDD) y que en modo réplica, y en la versión actual de la librería, sólo se puede especificar la consulta detallada. - Información de Mutuas
Para consultar información de mutuas, se realiza los siguientes pasos:
En la clase donde vamos a llamar a los diferentes métodos de la API de BDU, BduService en el ejemplo, definimos un objeto interfaz de tipo servicio de mutuas IMutualInsuranceService. Será el objeto utilizado para acceder a los datos de mutuas.
En el método constructor de la clase donde vamos a utilizar la funcionalidad de mutuas, se añade un objeto de tipo IMutualInsuranceService: IMutualInsuranceService<object> servicioMutua;
Bloque de código |
---|
language | c# |
---|
title | 25 Constructor de la clase que llamará a los métodos de la API BDU |
---|
|
public class BduService : IBduService
{
/// <summary>
/// Interfaz de servicio al componente de bdu para la mutuas
/// </summary>
private readonly IMutualInsuranceService<object> servicioMutua;
public BduService( IMutualInsuranceService<object> servMutua)
{
this.servicioMutua = servMutua;
} |
A continuación se llama al método GetMutualInsurance del servicio, pasando como parámetro peticionario un null: servicioMutua.GetMutualInsurance(null);, tal y como se observa en el método GetMutuas() del ejemplo:
Bloque de código |
---|
language | c# |
---|
title | 26 Método que obtiene listado mutuas de BBDD |
---|
|
/// <summary>
/// Método que obtiene todas las mutuas.
/// </summary>
/// <returns>Listado de mutuas aseguradoras.</returns>
public List<MutuaAseguradora> GetMutuas()
{
var mut = this.servicioMutua.GetMutualInsurance(null);
List<MutuaAseguradora> domMut = new List<MutuaAseguradora>();
if (mut != null)
{
foreach (var item in mut)
{
domMut.Add(new MutuaAseguradora(item.Id,item.Description));
}
}
return domMut;
} |
Image Removed Image Added
| Breaking changes El parámetro peticionario es null debido a que en la réplica no se registra peticionario de la consulta. En un futuro servicio web de mutuas sí podría ser necesario el parámetro peticionario definido en la interfaz para su registro.
|
---|
- Búsqueda de mutuas que cumplen una determinada condición
En este caso se llamaría al método FindMutualInsurances, que recibe como parámetros el peticionario y el criterio de búsqueda de mutuas, tal y como se observa en el método GetMutuaById del ejemplo::
Bloque de código |
---|
language | c# |
---|
title | 27 Método que obtiene mutua por id |
---|
|
/// <summary>
/// Método que obtiene una mutua por su codigo de identificacion.
/// </summary>
/// <returns>Codigo y descripcion de la mutua aseguradora.</returns>
public MutuaAseguradora GetMutuaById(decimal? codigo)
{
if (codigo != null)
{
var item= this.servicioMutua.FindMutualInsurances(null, new QuerysMutualInsuranceDto { Id = codigo ?? 0 });
if (item!= null) return new MutuaAseguradora(item.Id,item.Description);
else
return null;
}
else
return null;
} |
Para consultar información de decretos, realizamos los siguientes pasos:
En el constructor de la clase donde vamos a utilizar la funcionalidad de decretos, se añade un objeto de tipo IBduDecreeRequestService: IBduDecreeRequestService<object> servicioDecretos;
Bloque de código |
---|
language | c# |
---|
title | 28 Constructor de la clase que llamará a los métodos de la API BDU |
---|
|
public class BduService : IBduService {
/// <summary>
/// Interfaz de servicio al componente de bdu para las mutuas.
/// </summary>
private readonly IBduDecreeRequestService<object> servicioDecretos;
public BduService( IBduDecreeRequestService<object> servicioDecretos)
{
this.servicioMutua = servMutua;
}
...
} |
A continuación se llama al método public BduDecreeRequest FindBduElementsDecreeRequest(IGenericAuthContext<object> petitionerBdu, QuerysBduUserSearchDto criteria), que recibe como parámetros el peticionario y el criterio de búsqueda.
En el atributo peticionario se le pasaría un null y en criteria el criterio de búsqueda QuerysBduUserSearchDto, con el NUHSA relleno. Devuelve un objeto petición de decreto con los siguientes valores de la tabla BDU por NUHSA:
- SITUACION_ACTUAL: Situacion del paciente en BDU en el momento de la inscripcion en el Registro (0=Vigente, 1=Pasivo)
- CLAVE_MEDICA: Clave medica del paciente en BDU en el momento de la inscripcion en el Registro
- VALIDADO: Indica si los datos del paciente en BDU estaban validados en el momento de la inscripcion en el Registro (0=Si, 1=No)
- ESPECIALIDAD_CM: Especialidad de la clave medica del paciente en BDU en el momento de la inscripcion (G=General, P=Pediatrica)
Bloque de código |
---|
language | c# |
---|
title | 29 Método búsqueda de petición de decretos |
---|
|
List<BduDecreeRequest> FindDecreeRequest( QuerysBduUserSearchDto querysBduUserSearchDto)
{
var listaBduDecreeRequest = this.servicioDecretos.FindBduElementsDecreeRequest(null, querysBduUserSearchDto);
List<PeticionDecreto> listaPeticionDecreto = new List<PeticionDecreto>();
if (listaBduDecreeRequest != null)
{
foreach (var item in listaBduDecreeRequest)
{
var peticionDecreto = new PeticionDecreto()
{
Nuhsa = item.Nusa,
ClaveMedica= item.Clave_Medica,
EspecialidadCm = item.Especialidad_Cm,
SituacionActual = item.Situacion_Actual,
Validado = item.Validado
};
listaPeticionDecreto.Add( peticionDecreto );
}
}
return listaPeticionDecreto;
} |
El código completo del ejemplo de consulta de datos de mutuas y decretos se muestra a continuación:
Bloque de código |
---|
language | c# |
---|
title | 30 Ejemplo de búsqueda de mutuas y decretos |
---|
collapse | true |
---|
|
public class BduService : IBduService {
/// <summary>
/// Interfaz de servicio al componente de bdu para la mutuas
/// </summary>
private readonly IMutualInsuranceService<object> servicioMutua;
/// <summary>
/// Interfaz de servicio al componente de bdu para las decretos.
/// </summary>
private readonly IBduDecreeRequestService<object> servicioDecretos;
public BduService( IMutualInsuranceService<object> servMutua, IBduDecreeRequestService<object> servicioDecretos)
{
this.servicioMutua = servMutua;
this.servicioDecretos = servicioDecretos;
}
/// <summary> /// Método que obtiene todas las mutuas.
/// </summary> /// <returns>Listado de mutuas aseguradoras.</returns>
public List<MutuaAseguradora> GetMutuas() {
var mut = this.servicioMutua.GetMutualInsurance(null);
List<MutuaAseguradora> domMut = new List<MutuaAseguradora>();
if (mut != null) {
foreach (var item in mut) {
domMut.Add(new MutuaAseguradora(item.Id,item.Description));
}
}
return domMut;
}
/// <summary>
/// Método que obtiene una mutua por su codigo de identificacion.
/// </summary>
/// <returns>Codigo y descripcion de la mutua aseguradora.</returns>
public MutuaAseguradora GetMutuaById(decimal? codigo)
{
if (codigo != null)
{
var item= this.servicioMutua.FindMutualInsurances(null, new QuerysMutualInsuranceDto { Id = codigo ?? 0 });
if (item!= null) return new MutuaAseguradora(item.Id,item.Description);
else
return null;
}
else
return null;
}
List<BduDecreeRequest> FindDecreeRequest( QuerysBduUserSearchDto querysBduUserSearchDto)
{
var listaBduDecreeRequest = this.servicioDecretos.FindBduElementsDecreeRequest(null, querysBduUserSearchDto);
List<PeticionDecreto> listaPeticionDecreto = new List<PeticionDecreto>();
if (listaBduDecreeRequest != null)
{
foreach (var item in listaBduDecreeRequest)
{
var peticionDecreto = new PeticionDecreto()
{
Nuhsa = item.Nusa,
ClaveMedica= item.Clave_Medica,
EspecialidadCm = item.Especialidad_Cm,
SituacionActual = item.Situacion_Actual,
Validado = item.Validado
};
listaPeticionDecreto.Add( peticionDecreto );
}
}
return listaPeticionDecreto;
} |