private bool _entity_OnRequest(string receiveData, ref string sendData) { //receiveData = SocketHelper.DeleteEOF(receiveData, _entity.Config.ReceiveEndSign); //sendData = receiveData.Replace('#', '$'); //return; //using (StreamWriter sw = File.CreateText("d:\\msg.txt")) //{ // sw.Write(receiveData); //} string msgContent = XIMServerHelper.GetMessageContent(receiveData); if (msgContent == null || msgContent.Length < 1) { string strErrMsg = "Request message does not exist in request data"; Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName); sendData = XIMServerHelper.GetResponseFailed(XIMTransformHelper.GetTransactionID(), strErrMsg, Program.ConfigMgt.Config.SocketConfig); return(false); } string strName = ""; string strQualifier = ""; string strTransactionID = ""; XIMInboundMessage msgConfig = XIMServerHelper.GetMessageConfiguration(msgContent, ref strName, ref strQualifier, ref strTransactionID); if (msgConfig == null) { string strErrMsg = "Cannot find mapping rule configuration for current message (Name:" + strName + ", Qualifier:" + strQualifier + ")."; Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName); sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig); return(false); } XMLTransformer transformer = XMLTransformer.CreateFromMessage(msgConfig); if (msgConfig == null) { string strErrMsg = "Cannot find mapping XSL file for current message (XSL File:" + msgConfig.XSLFileName + ")."; Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName); sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig); return(false); } List <XmlNode> nodeList = new List <XmlNode>(); XIMServerHelper.SplitItem(nodeList, msgContent); Program.Log.Write(nodeList.Count.ToString() + " XIM Item(s) are found in request message", XIMServerHelper.ModuleName); XIMServerHelper.SplitProcedureStep(nodeList); Program.Log.Write(nodeList.Count.ToString() + " XIM Item(s) splited by SPS are found in request message", XIMServerHelper.ModuleName); if (nodeList.Count > 0) { string[] dataSetXmlList = XIMServerHelper.Transform(transformer, nodeList); DataSet dataSet = XIMServerHelper.CreateDataSet(dataSetXmlList); if (dataSet == null) { string strErrMsg = "Failed to transform to Data Set for current message."; Program.Log.Write(LogType.Warning, strErrMsg, XIMServerHelper.ModuleName); sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig); return(false); } if (_service.SaveData(msgConfig.Rule, dataSet)) { Program.Log.Write("Save to GC Gateway database succeeded."); sendData = XIMServerHelper.GetResponseSuccess(strTransactionID, Program.ConfigMgt.Config.SocketConfig); return(true); } else { string strErrMsg = "Save to GC Gateway database failed."; Program.Log.Write(LogType.Error, strErrMsg, XIMServerHelper.ModuleName); sendData = XIMServerHelper.GetResponseFailed(strTransactionID, strErrMsg, Program.ConfigMgt.Config.SocketConfig); return(false); } } return(false); }
private void _timer_Elapsed(object sender, ElapsedEventArgs e) { _timer.Stop(); Program.Log.Write("# Timer tick begin.", XIMClientHelper.ModuleName); int index = 0; foreach (XIMOutboundMessage msg in Program.ConfigMgt.Config.Messages) { try { index++; List <XIMWrapper> resultList = null; string strPrefix = "(" + index.ToString() + ") "; Program.Log.Write(strPrefix + "Begin processing message (" + msg.GWEventType.ToString() + ") to (" + msg.HL7EventType.ToString() + ").", XIMClientHelper.ModuleName); #region Data Processing DataSet dataSet = _service.RequestData(msg.Rule, null); if (dataSet == null) { Program.Log.Write(LogType.Warning, "Query data from GC Gateway database failed."); } else { List <DataSet> splitedDataSet = XIMClientHelper.SplitDataSet(dataSet); if (splitedDataSet == null || splitedDataSet.Count < 1) { Program.Log.Write(LogType.Warning, "No record found in GC Gateway database query result."); } else { Program.Log.Write(strPrefix + "Query data from GC Gateway database succeeded (Record count:" + splitedDataSet.Count.ToString() + ")."); XMLTransformer transformer = XMLTransformer.CreateFromMessage(msg); if (transformer == null) { Program.Log.Write(LogType.Warning, "Cannot find mapping XSL file for current message (XSL File:" + msg.XSLFileName + ")."); } else { resultList = XIMClientHelper.Transform(transformer, splitedDataSet); if (resultList == null || resultList.Count < 1) { Program.Log.Write(LogType.Warning, "Transform from DataSet xml to XIM xml failed (XSL File:" + msg.XSLFileName + ")."); } else { Program.Log.Write(strPrefix + "Transform from DataSet xml to XIM xml succeeded (Document count:" + resultList.Count.ToString() + ")."); if (resultList.Count > 1 && Program.ConfigMgt.Config.EnableDataMerging) { int pkIndex = Program.ConfigMgt.Config.DataMergingPKIndex; resultList = XIMClientHelper.MergeProcedureStep(resultList, pkIndex); if (resultList == null || resultList.Count < 1) { Program.Log.Write(LogType.Warning, "SPS merging failed (PK Index:" + pkIndex.ToString() + ")."); } else { Program.Log.Write(strPrefix + "SPS merging succeeded (PK Index:" + pkIndex.ToString() + ") (Document count:" + resultList.Count.ToString() + ")."); } } else { Program.Log.Write(strPrefix + "Skip SPS merging."); } } } } } #endregion #region Data Sending if (resultList == null || resultList.Count < 1) { Program.Log.Write(LogType.Warning, "No availiable XIM document, skip data sending."); } else { int ximIndex = 1; Program.Log.Write(strPrefix + "Sending XIM document..."); foreach (XIMWrapper xim in resultList) { string ximLogIndex = "(" + (ximIndex++).ToString() + "/" + resultList.Count.ToString() + ")"; bool result = false; if (Program.ConfigMgt.Config.OutboundToFile) { result = !XIMClientHelper.SaveToFile(Program.ConfigMgt.Config, xim.XIMDocument); } else { SocketResult res = SocketHelper.SendData(Program.ConfigMgt.Config.SocketConfig, xim.XIMDocument); result = (res == null || res.Type != SocketResultType.Success); } if (result) { Program.Log.Write(LogType.Warning, "Send XIM document failed. " + ximLogIndex); } else { Program.Log.Write(strPrefix, "Send XIM document succeeded. " + ximLogIndex); if (_service.DischargeData(xim.GUIDList.ToArray())) { Program.Log.Write(strPrefix, "Discharge data succeeded. " + ximLogIndex); } else { Program.Log.Write(LogType.Warning, "Discharge data failed. " + ximLogIndex); } } } Program.Log.Write(strPrefix + "Send XIM document completed."); } #endregion Program.Log.Write(strPrefix + "End processing message.", XIMClientHelper.ModuleName); } catch (Exception err) { Program.Log.Write(err); } } Program.Log.Write("# Timer tick end.", XIMClientHelper.ModuleName); _timer.Start(); }