#include "StdAfx.h" #include "FlowDataProvider.h" #include "CellDefineVar.h" #include "CellBranch.h" #include "CellSocket.h" #include "FlowTemplate.h" CFlowDataProvider::CFlowDataProvider( FLOW_DOC_PTR& Doc, FLOW_ELEMENT_PTR& Element ) : m_FlowDoc(Doc), m_FlowElement(Element), m_pTemplate(NULL) { } CFlowDataProvider::CFlowDataProvider(FLOW_DOC_PTR& Doc, FLOW_ELEMENT_PTR& Element, CFlowTemplate* pTemplate) : m_FlowDoc(Doc), m_FlowElement(Element), m_pTemplate(pTemplate) { ASSERT(m_pTemplate != NULL); } CFlowDataProvider::~CFlowDataProvider(void) { } /***************************************************************** **【函数名称】 getData **【函数功能】 获取流程数据 **【参数】 DataName:数据名称 **【返回值】 成功true,失败false ****************************************************************/ bool CFlowDataProvider::getData( LPCTSTR DataName, CString& Data ) { try { Data = m_FlowElement->getAttribute(DataName); return true; } /*catch (_com_error &e) { ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage()); }*/ catch (...) { //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常")); } return false; } /***************************************************************** **【函数名称】 getDataSet **【函数功能】 获取流程数据集 **【参数】 DataName:数据名称 RS:数据集 **【返回值】 成功true,失败false ****************************************************************/ bool CFlowDataProvider::getDataSet( LPCTSTR SetName, LPCTSTR DataName, DataSet& RS ) { ASSERT(m_pTemplate != NULL); CString NodeXpath; NodeXpath.Format(_T("%s[@%s='%s']/%s"), XPATH_IVR_NODE, FLOW_ATTRIBUTE_NAME, m_pTemplate->name(), SetName); try { CString Data; FLOW_ELEMENT_PTR DataElement = NULL; FLOW_LIST_PTR DataList = m_FlowDoc->selectNodes(NodeXpath.GetBuffer(0)); for(int i = 0; i < DataList->Getlength(); ++i) { DataElement = DataList->Getitem(i); Data = DataElement->getAttribute(DataName); RS.AddTail(Data); } return true; } /*catch (_com_error &e) { ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage()); }*/ catch (...) { //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常")); } return false; } /***************************************************************** **【函数名称】 getDataSet **【函数功能】 获取流程数据集 **【参数】 DataName:数据名称 DA:数据集 **【返回值】 成功true,失败false ****************************************************************/ bool CFlowDataProvider::getDataSet( LPCTSTR SetName, LPCTSTR DataName, DataArray& DA ) { ASSERT(m_pTemplate != NULL); CString NodeXpath; NodeXpath.Format(_T("%s[@%s='%s']/%s"), XPATH_IVR_NODE, FLOW_ATTRIBUTE_NAME, m_pTemplate->name(), SetName); try { CString Data; FLOW_ELEMENT_PTR DataElement = NULL; FLOW_LIST_PTR DataList = m_FlowDoc->selectNodes(NodeXpath.GetBuffer(0)); for(int i = 0; i < DataList->Getlength(); ++i) { DataElement = DataList->Getitem(i); Data = DataElement->getAttribute(DataName); DA.Add(Data); } return true; } /*catch (_com_error &e) { ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage()); }*/ catch (...) { //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常")); } return false; } /***************************************************************** **【函数名称】 getFlowDefVar **【函数功能】 获取流程中定义的变量集 **【参数】 CellDefineVar:定义变量节点 **【返回值】 成功true,失败false ****************************************************************/ bool CFlowDataProvider::getFlowDefVar( LPCTSTR SetName, CCellDefineVar& CellDefineVar ) { ASSERT(m_pTemplate != NULL); CString NodeXpath; NodeXpath.Format(_T("%s[@%s='%s']/%s"), XPATH_IVR_NODE, FLOW_ATTRIBUTE_NAME, m_pTemplate->name(), SetName); try { CString VarType; CString VarName; CString VarVal; FLOW_ELEMENT_PTR VarElement = NULL; FLOW_LIST_PTR VarList = m_FlowDoc->selectNodes(NodeXpath.GetBuffer(0)); for(int i = 0; i < VarList->Getlength(); ++i) { VarElement = VarList->Getitem(i); VarType = VarElement->getAttribute(CELL_ATTRIBUTE_VAR_TYPE); VarName = VarElement->getAttribute(CELL_ATTRIBUTE_VAR_NAME); VarVal = VarElement->getAttribute(CELL_ATTRIBUTE_VAR_VAL); CellDefineVar.addVar(atoi(VarType), VarName, VarVal); } return true; } /*catch (_com_error &e) { ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage()); }*/ catch (...) { //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常")); } return false; } /***************************************************************** **【函数名称】 getFlowBranch **【函数功能】 获取流程中的分支信息 **【参数】 CellBranch:分支节点 **【返回值】 成功true,失败false ****************************************************************/ bool CFlowDataProvider::getFlowBranch( LPCTSTR SetName, CCellBranch& CellBranch ) { ASSERT(m_pTemplate != NULL); CString NodeXpath; NodeXpath.Format(_T("%s[@%s='%s']/%s"), XPATH_IVR_NODE, FLOW_ATTRIBUTE_NAME, m_pTemplate->name(), SetName); try { CString Value; CString Pos; FLOW_ELEMENT_PTR BranchElement = NULL; FLOW_LIST_PTR BranchList = m_FlowDoc->selectNodes(NodeXpath.GetBuffer(0)); for(int i = 0; i < BranchList->Getlength(); ++i) { BranchElement = BranchList->Getitem(i); Value = BranchElement->getAttribute(CELL_ATTRIBUTE_VALUE); Pos = BranchElement->getAttribute(CELL_ATTRIBUTE_POS); CellBranch.addBranch(Value, atoi(Pos)); } return true; } /*catch (_com_error &e) { ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage()); }*/ catch (...) { //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常")); } return false; } /***************************************************************** **【函数名称】 getFlowSocketInputVar **【函数功能】 获取流程中的SOCKET操作的输入变量信息 **【参数】 CellSocket:SOCKET操作节点 **【返回值】 成功true,失败false ****************************************************************/ bool CFlowDataProvider::getFlowSocketInputVar( LPCTSTR SetName, CCellSocket& CellSocket ) { ASSERT(m_pTemplate != NULL); CString NodeXpath; NodeXpath.Format(_T("%s[@%s='%s']/%s"), XPATH_IVR_NODE, FLOW_ATTRIBUTE_NAME, m_pTemplate->name(), SetName); try { CString VarType; CString VarVal; FLOW_ELEMENT_PTR VarElement = NULL; FLOW_LIST_PTR VarList = m_FlowDoc->selectNodes(NodeXpath.GetBuffer(0)); for(int i = 0; i < VarList->Getlength(); ++i) { VarElement = VarList->Getitem(i); VarType = VarElement->getAttribute(CELL_ATTRIBUTE_VAR_TYPE); VarVal = VarElement->getAttribute(CELL_ATTRIBUTE_VAR_VAL); CellSocket.addInputVar(atoi(VarType), VarVal); } return true; } /*catch (_com_error &e) { ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}:解析流程文件时出现异常, %s"), e.ErrorMessage()); }*/ catch (...) { //ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{FileReader}: 解析流程文件时出现未知异常")); } return false; }