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

FlowDataProvider.cpp 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. #include "StdAfx.h"
  2. #include "FlowDataProvider.h"
  3. #include "CellDefineVar.h"
  4. #include "CellBranch.h"
  5. #include "CellSocket.h"
  6. #include "FlowTemplate.h"
  7. CFlowDataProvider::CFlowDataProvider( FLOW_DOC_PTR& Doc, FLOW_ELEMENT_PTR& Element ) : m_FlowDoc(Doc), m_FlowElement(Element), m_pTemplate(NULL)
  8. {
  9. }
  10. CFlowDataProvider::CFlowDataProvider(FLOW_DOC_PTR& Doc, FLOW_ELEMENT_PTR& Element, CFlowTemplate* pTemplate) : m_FlowDoc(Doc), m_FlowElement(Element), m_pTemplate(pTemplate)
  11. {
  12. ASSERT(m_pTemplate != NULL);
  13. }
  14. CFlowDataProvider::~CFlowDataProvider(void)
  15. {
  16. }
  17. /*****************************************************************
  18. **【函数名称】 getData
  19. **【函数功能】 获取流程数据
  20. **【参数】 DataName:数据名称
  21. **【返回值】 成功true,失败false
  22. ****************************************************************/
  23. bool CFlowDataProvider::getData( LPCTSTR DataName, CString& Data )
  24. {
  25. try
  26. {
  27. Data = m_FlowElement->getAttribute(DataName);
  28. return true;
  29. }
  30. /*catch (_com_error &e)
  31. {
  32. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage());
  33. }*/
  34. catch (...)
  35. {
  36. //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常"));
  37. }
  38. return false;
  39. }
  40. /*****************************************************************
  41. **【函数名称】 getDataSet
  42. **【函数功能】 获取流程数据集
  43. **【参数】 DataName:数据名称
  44. RS:数据集
  45. **【返回值】 成功true,失败false
  46. ****************************************************************/
  47. bool CFlowDataProvider::getDataSet( LPCTSTR SetName, LPCTSTR DataName, DataSet& RS )
  48. {
  49. ASSERT(m_pTemplate != NULL);
  50. CString NodeXpath;
  51. NodeXpath.Format(_T("%s[@%s='%s']/%s"), XPATH_IVR_NODE, FLOW_ATTRIBUTE_NAME, m_pTemplate->name(), SetName);
  52. try
  53. {
  54. CString Data;
  55. FLOW_ELEMENT_PTR DataElement = NULL;
  56. FLOW_LIST_PTR DataList = m_FlowDoc->selectNodes(NodeXpath.GetBuffer(0));
  57. for(int i = 0; i < DataList->Getlength(); ++i)
  58. {
  59. DataElement = DataList->Getitem(i);
  60. Data = DataElement->getAttribute(DataName);
  61. RS.AddTail(Data);
  62. }
  63. return true;
  64. }
  65. /*catch (_com_error &e)
  66. {
  67. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage());
  68. }*/
  69. catch (...)
  70. {
  71. //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常"));
  72. }
  73. return false;
  74. }
  75. /*****************************************************************
  76. **【函数名称】 getDataSet
  77. **【函数功能】 获取流程数据集
  78. **【参数】 DataName:数据名称
  79. DA:数据集
  80. **【返回值】 成功true,失败false
  81. ****************************************************************/
  82. bool CFlowDataProvider::getDataSet( LPCTSTR SetName, LPCTSTR DataName, DataArray& DA )
  83. {
  84. ASSERT(m_pTemplate != NULL);
  85. CString NodeXpath;
  86. NodeXpath.Format(_T("%s[@%s='%s']/%s"), XPATH_IVR_NODE, FLOW_ATTRIBUTE_NAME, m_pTemplate->name(), SetName);
  87. try
  88. {
  89. CString Data;
  90. FLOW_ELEMENT_PTR DataElement = NULL;
  91. FLOW_LIST_PTR DataList = m_FlowDoc->selectNodes(NodeXpath.GetBuffer(0));
  92. for(int i = 0; i < DataList->Getlength(); ++i)
  93. {
  94. DataElement = DataList->Getitem(i);
  95. Data = DataElement->getAttribute(DataName);
  96. DA.Add(Data);
  97. }
  98. return true;
  99. }
  100. /*catch (_com_error &e)
  101. {
  102. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage());
  103. }*/
  104. catch (...)
  105. {
  106. //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常"));
  107. }
  108. return false;
  109. }
  110. /*****************************************************************
  111. **【函数名称】 getFlowDefVar
  112. **【函数功能】 获取流程中定义的变量集
  113. **【参数】 CellDefineVar:定义变量节点
  114. **【返回值】 成功true,失败false
  115. ****************************************************************/
  116. bool CFlowDataProvider::getFlowDefVar( LPCTSTR SetName, CCellDefineVar& CellDefineVar )
  117. {
  118. ASSERT(m_pTemplate != NULL);
  119. CString NodeXpath;
  120. NodeXpath.Format(_T("%s[@%s='%s']/%s"), XPATH_IVR_NODE, FLOW_ATTRIBUTE_NAME, m_pTemplate->name(), SetName);
  121. try
  122. {
  123. CString VarType;
  124. CString VarName;
  125. CString VarVal;
  126. FLOW_ELEMENT_PTR VarElement = NULL;
  127. FLOW_LIST_PTR VarList = m_FlowDoc->selectNodes(NodeXpath.GetBuffer(0));
  128. for(int i = 0; i < VarList->Getlength(); ++i)
  129. {
  130. VarElement = VarList->Getitem(i);
  131. VarType = VarElement->getAttribute(CELL_ATTRIBUTE_VAR_TYPE);
  132. VarName = VarElement->getAttribute(CELL_ATTRIBUTE_VAR_NAME);
  133. VarVal = VarElement->getAttribute(CELL_ATTRIBUTE_VAR_VAL);
  134. CellDefineVar.addVar(atoi(VarType), VarName, VarVal);
  135. }
  136. return true;
  137. }
  138. /*catch (_com_error &e)
  139. {
  140. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage());
  141. }*/
  142. catch (...)
  143. {
  144. //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常"));
  145. }
  146. return false;
  147. }
  148. /*****************************************************************
  149. **【函数名称】 getFlowBranch
  150. **【函数功能】 获取流程中的分支信息
  151. **【参数】 CellBranch:分支节点
  152. **【返回值】 成功true,失败false
  153. ****************************************************************/
  154. bool CFlowDataProvider::getFlowBranch( LPCTSTR SetName, CCellBranch& CellBranch )
  155. {
  156. ASSERT(m_pTemplate != NULL);
  157. CString NodeXpath;
  158. NodeXpath.Format(_T("%s[@%s='%s']/%s"), XPATH_IVR_NODE, FLOW_ATTRIBUTE_NAME, m_pTemplate->name(), SetName);
  159. try
  160. {
  161. CString Value;
  162. CString Pos;
  163. FLOW_ELEMENT_PTR BranchElement = NULL;
  164. FLOW_LIST_PTR BranchList = m_FlowDoc->selectNodes(NodeXpath.GetBuffer(0));
  165. for(int i = 0; i < BranchList->Getlength(); ++i)
  166. {
  167. BranchElement = BranchList->Getitem(i);
  168. Value = BranchElement->getAttribute(CELL_ATTRIBUTE_VALUE);
  169. Pos = BranchElement->getAttribute(CELL_ATTRIBUTE_POS);
  170. CellBranch.addBranch(Value, atoi(Pos));
  171. }
  172. return true;
  173. }
  174. /*catch (_com_error &e)
  175. {
  176. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage());
  177. }*/
  178. catch (...)
  179. {
  180. //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常"));
  181. }
  182. return false;
  183. }
  184. /*****************************************************************
  185. **【函数名称】 getFlowSocketInputVar
  186. **【函数功能】 获取流程中的SOCKET操作的输入变量信息
  187. **【参数】 CellSocket:SOCKET操作节点
  188. **【返回值】 成功true,失败false
  189. ****************************************************************/
  190. bool CFlowDataProvider::getFlowSocketInputVar( LPCTSTR SetName, CCellSocket& CellSocket )
  191. {
  192. ASSERT(m_pTemplate != NULL);
  193. CString NodeXpath;
  194. NodeXpath.Format(_T("%s[@%s='%s']/%s"), XPATH_IVR_NODE, FLOW_ATTRIBUTE_NAME, m_pTemplate->name(), SetName);
  195. try
  196. {
  197. CString VarType;
  198. CString VarVal;
  199. FLOW_ELEMENT_PTR VarElement = NULL;
  200. FLOW_LIST_PTR VarList = m_FlowDoc->selectNodes(NodeXpath.GetBuffer(0));
  201. for(int i = 0; i < VarList->Getlength(); ++i)
  202. {
  203. VarElement = VarList->Getitem(i);
  204. VarType = VarElement->getAttribute(CELL_ATTRIBUTE_VAR_TYPE);
  205. VarVal = VarElement->getAttribute(CELL_ATTRIBUTE_VAR_VAL);
  206. CellSocket.addInputVar(atoi(VarType), VarVal);
  207. }
  208. return true;
  209. }
  210. /*catch (_com_error &e)
  211. {
  212. ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage());
  213. }*/
  214. catch (...)
  215. {
  216. //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常"));
  217. }
  218. return false;
  219. }