先将电文配置中字段截取导出,选取字段到数据库使用select语句查询比对字段是否一致,不一致的字段记录,在数据项中添加,比对完成保证两边数据项一致后,开始编写接收电文函数代码如下,基本格式都一致
/************************************************* Copyright:Baosight Software LTD.co Copyright (c) 2010 Author:136675 Date:2018-07-09 Version:1.0 Description: 转炉炉次报告 **************************************************/ /***** C++ 的标准头文件部分 *****/ #include "stdafx.h" #include "epex.h" #include "tmmsm23.h" BM2F_ENTERACE_TELE(mmsm_sb3ua4_rcv); /*校验电文发送字段长度函数*/ int f_tableObjectCheck9999(ITableObject2& obj); int f_mmsm_sb3ua4_rcv(EIClass * bcls_rec, EIClass * bcls_ret, CDbConnection * conn) { CTracer log(__FUNCTION__); /* ***** 自定义变量 ***** */ CString sqlstr; int doFlag = 0; CString tc_no; CString tele_str; CString TC_NO = "SB3UA4"; CString proc_div = "";//处理区分 CString uid = s.userid;//获取用户id CString datetimeNow = CDateTime::Now().ToString("yyyyMMddHHmmss");//获取系统时间 EPEX epex; //定义表的实体对象 CTMMSM23 tmmsm23(conn); CDbCommand cmd_inq(conn); try { //接收电文内容 tele_str = (CString)epex.GetTele(); Log::Trace("", __FUNCTION__, "tele_str = [{0}]", (const char *)epex.GetTele()); int count = bcls_rec->Tables[0].Rows.get_Count(); Log::Trace("", __FUNCTION__, "count = [{0}]", count); if (count < 0) { //系统错误信息 sprintf(s.msg, "获取电文内容出错。"); throw CApplicationException(-1, s.msg, log.Location); } tc_no = CString(s.username); if (tc_no != "SB3UA4") { sprintf(s.msg, "应用电文号应为SB3UA4"); s.flag = -1; throw CApplicationException(-1, s.msg, s.svc_name); } for (int i = 0; i < count; i++) { tmmsm23.Reset(); tmmsm23.MergeFrom(bcls_rec->Tables[0].Rows[i]); tmmsm23.TrimOrBlank(); proc_div = bcls_rec->Tables[0].Rows[i]["PROC_DIV"].ToString(); Log::Trace("", __FUNCTION__, "proc_div = [{0}]", proc_div); if (proc_div == "1") { if (tmmsm23.QueryCount("SM_PLAN_NO,HEAT_NO,MAT_CODE") > 0) { Log::Trace("", __FUNCTION__, "操作类型 = [{0}]", "修改"); tmmsm23.REC_CREATE_TIME = datetimeNow; tmmsm23.REC_CREATOR = uid; tmmsm23.REC_REVISE_TIME = datetimeNow; tmmsm23.REC_REVISOR = uid; f_tableObjectCheck9999(tmmsm23); tmmsm23.Update("SM_PLAN_NO,HEAT_NO,MAT_CODE"); } else { Log::Trace("", __FUNCTION__, "操作类型 = [{0}]", "新增"); tmmsm23.REC_CREATE_TIME = datetimeNow; tmmsm23.REC_CREATOR = uid; tmmsm23.REC_REVISE_TIME = datetimeNow; tmmsm23.REC_REVISOR = uid; f_tableObjectCheck9999(tmmsm23); tmmsm23.Insert(); } } if (proc_div == "2") { Log::Trace("", __FUNCTION__, "操作类型 = [{0}]", "删除"); tmmsm23.Delete(); } } strcpy(s.msg, _RES("PSSMS0000176")/*电文接受成功!*/);//处理成功。 } catch (CDbException& ex) //捕获数据库操作异常 { CFormattable arguments[] = { ex.GetCode() }; CMessageFormat::Format(s.msg, "数据库处理出错,sqlcode=[{0}]。请联系系统维护人员。", arguments, 1); CString str = sqlstr + "\r\n" + ex.GetMsg(); strncpy(s.sysmsg, (const char*)str, sizeof(s.sysmsg) - 1); s.flag = -1; doFlag = -1; //数据库异常时返回-1,事务将被回滚 } catch (CApplicationException& ex) //捕获应用错误 { s.flag = ex.GetCode(); doFlag = -1; } catch (CException& ex) { strncpy(s.msg, (const char*)ex.GetMsg(), sizeof(s.msg) - 1); s.flag = ex.GetCode(); doFlag = -1; } return doFlag; }
原文:https://www.cnblogs.com/yjy1412/p/14479044.html