MiddleWares_YiHe 郑州颐和医院随访系统中间件

CellMapRecord2Var.cpp 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. #include "StdAfx.h"
  2. #include "CellMapRecord2Var.h"
  3. #include "IvrFlow.h"
  4. #include "FlowDataProvider.h"
  5. IMPLEMENT_CELL_AUTOCREATE(CCellMapRecord2Var, CELL_NAME_RECORDSET)
  6. CCellMapRecord2Var::CCellMapRecord2Var(void) : m_LPos(0), m_EPos(0), m_GPos(0)
  7. {
  8. }
  9. CCellMapRecord2Var::CCellMapRecord2Var( CCellMapRecord2Var & CellMapRecord2Var ) : CCellBase(CellMapRecord2Var)
  10. {
  11. m_LPos = CellMapRecord2Var.m_LPos;
  12. m_EPos = CellMapRecord2Var.m_EPos;
  13. m_GPos = CellMapRecord2Var.m_GPos;
  14. int Count = CellMapRecord2Var.m_VarArray.GetCount();
  15. for( int i = 0; i < Count; ++i )
  16. m_VarArray.Add( CellMapRecord2Var.m_VarArray[i] );
  17. }
  18. CCellMapRecord2Var::~CCellMapRecord2Var(void)
  19. {
  20. }
  21. /*****************************************************************
  22. **【函数名称】 Operate
  23. **【函数功能】 节点执行函数
  24. **【参数】
  25. **【返回值】 下一个节点编号
  26. ****************************************************************/
  27. int CCellMapRecord2Var::operate( void )
  28. {
  29. if(m_pIvrFlow == NULL)
  30. return CELL_OP_ERROR;
  31. CString Info;
  32. _getCellInfo(Info);
  33. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 开始执行[%s]"), Info);
  34. // 要保存变量的个数
  35. const int nCount = m_VarArray.GetCount();
  36. DataSet& RS = m_pIvrFlow->recordSet();
  37. POSITION pos = RS.GetHeadPosition();
  38. int nIndex = 0;
  39. CString strResult = _T("");
  40. while(pos != NULL)
  41. {
  42. CString strName = m_VarArray[nIndex];
  43. CString strValue = RS.GetNext(pos);
  44. // 保存变量
  45. m_pIvrFlow->addVar( strName, strValue );
  46. if (strValue.GetLength() >= BUFF_LEN)
  47. strResult += "{" + strName + "};";
  48. else
  49. strResult += "{" + strName + "=" + strValue + "};";
  50. // 字段数多于要保存的变量数
  51. if(++nIndex >= nCount)
  52. break;
  53. } // end while
  54. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 执行[%s]结束, Result = %s"), Info, strResult);
  55. if(nCount == RS.GetCount())
  56. return m_EPos;
  57. else if(nCount < RS.GetCount())
  58. return m_LPos;
  59. else
  60. return m_GPos;
  61. }
  62. /*****************************************************************
  63. **【函数名称】 copy
  64. **【函数功能】 拷贝自身
  65. **【参数】
  66. **【返回值】 拷贝副本
  67. ****************************************************************/
  68. CCellBase * CCellMapRecord2Var::copy( void )
  69. {
  70. CCellBase *pCellBase = new CCellMapRecord2Var(*this);
  71. return pCellBase;
  72. }
  73. /*****************************************************************
  74. **【函数名称】 fillData
  75. **【函数功能】 节点解析,填充数据
  76. **【参数】 Provider:数据提供器
  77. **【返回值】 成功true,失败false
  78. ****************************************************************/
  79. bool CCellMapRecord2Var::fillData( IFlowDataProvider& Provider )
  80. {
  81. CString Data;
  82. do
  83. {
  84. if(!Provider.getData(CELL_ATTRIBUTE_POS, Data))
  85. {
  86. Data = _T("节点号");
  87. break;
  88. }
  89. else
  90. {
  91. sscanf_s(Data, _T("%d"), &m_Pos);
  92. if(m_Pos < 1)
  93. {
  94. Data = _T("节点号");
  95. break;
  96. }
  97. }
  98. Data.Format(_T("%s[@%s='%d']/%s"), XPATH_CELL, CELL_ATTRIBUTE_POS, m_Pos, FLOW_SUB_NODE_MAP);
  99. if(!Provider.getDataSet(Data, CELL_ATTRIBUTE_VAR, m_VarArray))
  100. {
  101. Data = _T("映射变量");
  102. break;
  103. }
  104. if(!Provider.getData(CELL_ATTRIBUTE_LPOS, Data))
  105. {
  106. Data = _T("映射数小于记录集时跳转节点");
  107. break;
  108. }
  109. else
  110. {
  111. sscanf_s(Data, _T("%d"), &m_LPos);
  112. if(m_LPos < 0)
  113. {
  114. Data = _T("映射数小于记录集时跳转节点");
  115. break;
  116. }
  117. }
  118. if(!Provider.getData(CELL_ATTRIBUTE_EPOS, Data))
  119. {
  120. Data = _T("映射数等于记录集时跳转节点");
  121. break;
  122. }
  123. else
  124. {
  125. sscanf_s(Data, _T("%d"), &m_EPos);
  126. if(m_EPos < 0)
  127. {
  128. Data = _T("映射数等于记录集时跳转节点");
  129. break;
  130. }
  131. }
  132. if(!Provider.getData(CELL_ATTRIBUTE_GPOS, Data))
  133. {
  134. Data = _T("映射数大于记录集时跳转节点");
  135. break;
  136. }
  137. else
  138. {
  139. sscanf_s(Data, _T("%d"), &m_GPos);
  140. if(m_GPos < 0)
  141. {
  142. Data = _T("映射数大于记录集时跳转节点");
  143. break;
  144. }
  145. }
  146. Provider.getData(CELL_ATTRIBUTE_NOTE, m_Note);
  147. return true;
  148. } while (false);
  149. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{Cell}: 节点[%s]解析失败, '%s'错误"), CELL_NAME_RECORDSET, Data);
  150. return false;
  151. }