كيفية تحميل البيانات الثابتة في Mirth، تجنب العديد من المدونات

StackOverflow https://stackoverflow.com/questions/795462

  •  18-09-2019
  •  | 
  •  

سؤال

طرب هو وسيط للمساعدة في تطبيق الرعاية الصحية HL7 تكامل الرسائل.

سؤالي يدور حول إنقاذ نفسك مشكلة في ضرب DATASTORE الخاص بك في كل مرة ترغب في إجراء بحث في بعض البيانات الموجودة داخل HL7.

السيناريو: لكل رسالة تلقتها القناة، أريد العثور على Manemonic / التعليمات البرمجية للمنشأة والحصول على الاسم الكامل للمنشأة. لسوء الحظ، لا يمكنني أن أسأل مرسل رسالة HL7 لإرسالها إلى جانب لي. لذلك يجب أن أكتب رمز الوصول DB الخاص بي لاستدعاء إجراء مخزن، وتمرير في المعرف، واستلم الاسم الكامل.

أي فكرة عن كيفية إنشاء ذاكرة تخزين مؤقت للبيانات في Mirth بحيث يمكنك الوصول إلى البحث من أي قناة أو مصدر أو وجهة أو محول أو مرشح؟

هل كانت مفيدة؟

المحلول

يمكنك محاولة كتابة برنامج نصي عالمي مع وظيفتين:

1) ملء جافا لا تتمرقل أو بناء مشابه مع البيانات التي تبحث عنها

2) استخدم المعلمة التي تنتقل فيها كجزء إلى Hashtable وإرجاع البيانات الموجودة في المقابلة Hashtable هذا المفتاح.

رابط لاستخدام جافا في ميرث (حلقة الوصل)

نصائح أخرى

في حالتنا، حيث اضطررنا إلى تحميل قيم البحث من قاعدة بيانات، نحل هذا كما يلي:

  1. قم بإنشاء نص البرنامج النصي الذي يقوم بتحميل قيم البحث عند نشر القناة في الخريطة العالمية.
  2. احصل على وظيفة قالب عالمية تتيح لك البحث عن القيم من هذه الخريطة العالمية.
  3. استخدم وظيفة القالب العمومي في المرشحات وترجمتها.

ملاحظة: في حالتنا، يمكن أن يكون لكل مفتاح قيمتين مرتبطان به. إذا لم نستخدم كلاهما، فقد قمت للتو بتعيين الثاني إلى NULL في الاستعلام من قاعدة البيانات.

لتحميل وضع الخريطة العالمية هذا في برنامج النشر الخاص بك من قناتك (تخصيص حسب الحاجة):

// This script executes once when the mule engine is started
// You only have access to the globalMap here to persist data 

var sqlDBDriver   = 'net.sourceforge.jtds.jdbc.Driver';
var sqlDBName     = 'jdbc:jtds:sqlserver://databaseserver/databasename';
var sqlDBDUser    = 'username';
var sqlDBPassword = 'password';

function PopulateLookup ( sqlQuery, globalMapName )
{
    logger.info('Loading lookup table values in the deploy script: ' + globalMapName);

    var dbConn = DatabaseConnectionFactory.createDatabaseConnection( sqlDBDriver, sqlDBName, sqlDBDUser, sqlDBPassword );
    var rs = dbConn.executeCachedQuery( sqlQuery );
    dbConn.close();

    var arr = new Array();
    while(rs.next())
    {
        var obj = new Object();
        obj.LeftValue   = rs.getString('LeftValue');
        obj.RightValue1 = rs.getString('RightValue1');
        obj.RightValue2   = rs.getString('RightValue2');
        arr.push(obj);
    } 
    globalMap.put( globalMapName, arr );
}

PopulateLookup( 'SELECT keyColumn as LeftValue, Value1 as RightValue1, Value2 as RightValue2 FROM tableName', 'GlobalMapName' );

// Repeat above line as needed for each lookup you need

return;

من أجل الوصول إلى هذه القيم، تستخدم الوظيفة التالية كقالب عمومي.

function FindLookupValueWithDefault ( LookupGlobalMapName, LeftValue, DefaultValue1, DefaultValue2 ){
    /***********************************************************************************************
    DESCRIPTION: Retrieves lookup table values from the global map and uses the input values to return output values

     PARAMETERS:
       LookupGlobalMapName - name of the lookup table in the Global Map
       LeftValue - The value to look up
       DefaultValue1 - the first default value if a match was not found
       DefaultValue2 - the second default value if a match was not found

    RETURNS:
       An object containing the replacement value and associated OID if applicable

    REMARKS: 
    ************************************************************************************************/
        // Retrieve the previously matched item from the globalmap
        //    We do this to save time and not look through a huge lookup table tons of times
        //    unless we absolutely have to
        var prevItem = globalMap.get(LookupGlobalMapName + '-Previous');

        // This is the same item requested for this globalmap name - just return the previous value
        if ( prevItem != null && prevItem.LeftValue == LeftValue) {
            return prevItem;
        }

        //
        // If we reach this point the previous item either did not exist or did not match 
        //

        // Retrieve the array with lookup objects from the globalmap and search for the matching value
        var arr = globalMap.get(LookupGlobalMapName);
        var obj = new Object();
        obj.LeftValue = LeftValue;
        obj.RightValue1 = DefaultValue1;
        obj.RightValue2   = DefaultValue2; 
        for each ( item in arr )
        {
            var pattern=new RegExp("^" + item.LeftValue + "$");
            var result = pattern.test(LeftValue );

            if ( pattern.test(LeftValue ) )
            {
                obj = item;
                break;
            } 
        }

        // Store the previous value in the globalmap
        globalMap.put( LookupGlobalMapName + '-Previous', obj );

        // Return the object we found or created
        return obj;
    }

عينة من التعليمات البرمجية للوصول إلى القيم:

var myObject = FindLookupValueWithDefault('GlobalMapName', 'LookupValue', 'DefaultValue1', 'DefaultValue2');

if ( myObject != null )
{

      var value1 = myObject.RightValue1;
      var value2 = myObject.RightValue2;
}

قد تختلف الأميال الخاص بك ... ولكن هذا عملت لنا حتى الآن.

شكرا، فرانز دي رطب

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top