Artículo
· 18 sep, 2025 Lectura de 2 min

Adaptador de archivos personalizado - Tabla de búsqueda / Archivos dinámicos

Mi problema era separar mensajes HL7 por tipo de mensaje. Tuve que crear múltiples operaciones de archivo. Así que, con código personalizado, puedo usar 1 adaptador de archivos para 1 interfaz y múltiples tipos de mensaje. Experimenté extrayendo el MSH 4 del contenido en bruto para acceder además a información dinámica, pero eso podría generar la necesidad de comprobaciones de errores más robustas o acciones predeterminadas en la búsqueda.

Uso de la convención de nombres recomendada de "To_FILE_<IntegrationName>"

Decidí usar un nombre de archivo genérico y una ruta genérica en la configuración predeterminada.

Creé una clase personalizada que extendía EnsLib.File.OutboundAdapter, con código personalizado que me permite controlar dinámicamente la ruta del adaptador de archivos específica para cada tipo de mensaje mediante una tabla de búsqueda. Si no tengo un valor, entonces se usará la ruta genérica predeterminada. De lo contrario, mi código sobrescribirá la ruta y el nombre del archivo. El nombre de la tabla de búsqueda puede ser cualquiera; solo necesita coincidir en vuestro código.


 

Código personalizado

//SRC1 Extraer la tercera parte del nombre de la operación de salida "<IntegrationName>"

//SRC2 Extraer la primera parte del nombre del DOCTYPE "ORM" / "ADT" / "ORU" / etc.

// Establecer una nueva variable SRC para concatenar SRC1_SRC2

// Nueva tabla de búsqueda que controlará los nombres de ruta en un solo lugar.

 

Set src1=$PIECE(..%ConfigName,"_",3,3)
Set src2=$PIECE(pDocument.DocTypeName,"_",1,1)
If src=""
{
    Set src=src1_"_"_src2
}

Set pFilename = ..Adapter.CreateFilename(##class(%File).GetFilename(src), $PIECE((##class(Ens.Rule.FunctionSet).Lookup("HL7FileNamePath",src)),"^",2,2)_..Filename) $$$TRACE(pFilename)

//Reset file path to return a file path based on the Lookup and PIECE function(s) 
Set ..Adapter.FilePath =$PIECE((##class(Ens.Rule.FunctionSet).Lookup("HL7FileNamePath",src)),"^",1,1)
$$$TRACE(..Adapter.FilePath)

Set tSC = ..Adapter.open(pFilename) 
Quit:$$$ISERR(tSC) tSC

Set $ZT="Trap"
Use ..Adapter.Device  Set tSC=..OutputFramedToDevice(pDocument,pSeparators,"",0,..IOLogEntry,.pDoFraming) Use ..Adapter.OldIO
Set $ZT=""
Comentarios (0)1
Inicie sesión o regístrese para continuar