There are two formats for LUT:
Old one:
<?xml version="1.0" encoding="UTF-8"?>
<Export generator="IRIS" version="26" zv="IRIS for UNIX (Red Hat Enterprise Linux 7 for x86-64) 2022.1 (Build 209U)" ts="2024-03-03 06:05:36">
<Document name="LUT_NAME.LUT">
<lookupTable>
<entry table="LUT_NAME" key="KEY">VALUE</entry>
<entry table="LUT_NAME" key="KEY2">VALUE2</entry>
</lookupTable>
</Document>
</Export>
New one:
<?xml version="1.0"?>
<lookupTable>
<entry table="LUT_NAME" key="KEY">VALUE</entry>
<entry table="LUT_NAME" key="KEY2">NALUE2</entry>
</lookupTable>
Looks like you're importing old format using new importer. Here's the code to import both versions:
ClassMethod ImportLUT(dir)
{
#include %occErrors
write "Lookup Tables import from: " _ dir
set rs = ##class(%File).FileSetFunc(dir, "*.xml;*.XML;*.lut;*.LUT")
while rs.%Next() {
set tablePath = rs.Get("Name")
write "Importing: " _ tablePath,!
// table is the full path, the last part (denoted by *) is the actual file name
set tablePathNoExtension = $PIECE(tablePath, "/", *)
// asking for $PIECE with just delimiter asks for the first part, thus ignore anything after the .
set tablePathNoExtension = $PIECE(tablePathNoExtension, ".")
write "Importing Lookup Table in " _ tablePathNoExtension,!
// lookup table should be named the file name (without extension)
//do ##class(Ens.Util.LookupTable).%ClearTable(tablePathNoExtension)
// Try the new import first.
set sc = ..ImportLUTFile(tablePath)
// If we got an error, try legacy import
if $$$ISERR(sc) {
write "New import failed. Trying legacy import",!
set sc=##class(Ens.Util.LookupTable).%Import(tablePath)
if $$$ISOK(sc) {
write "Import successful",!
}
}
// Error remains unfixed. Fail.
if $$$ISERR(sc) {
write "Lookup Table import failure: ", $System.Status.GetErrorText(sc),!
do $system.Process.Terminate(, 1)
}
}
}
/// Adapted from EnsPortal.LookupSettings:Import
/// Import lookup tables from file <var>Filename</var>
ClassMethod ImportLUTFile(Filename As %String) As %String
{
Set tRS = ##class(%ResultSet).%New("%RoutineMgr:ImportItemList")
Set tSC = tRS.Execute(Filename)
Quit:$$$ISERR(tSC) tSC
Set tSC = $$$OK
Kill Select
For {
Quit:'tRS.Next(.tSC)
Set Name = tRS.Get("Name")
If $E(Name,*-3,*)=".LUT" {
Lock +^Ens.LookupTable(Name):2
If '$T Set tSC = $$$ERROR($$$LockFailedToAcquireRead,$Name(^Ens.LookupTable(Name))) Quit
Set Select($E(Name,1,*-4)) = ""
}
}
Quit:$$$ISERR(tSC) tSC
Quit:'$D(Select) $$$ERROR($$$GeneralError,"This file does not contain any lookup tables")
Set tSC = $system.OBJ.Load(Filename,"-d", .Err, .Loaded, 0)
Set Name = ""
For {
Set Name = $O(Select(Name))
Quit:Name=""
Lock -^Ens.LookupTable(Name)
}
Quit tSC
}- Log in to post comments
.png)