| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- #include "StdAfx.h"
- #include "CellStringOp.h"
- #include "IvrFlow.h"
- #include "FlowDataProvider.h"
- IMPLEMENT_CELL_AUTOCREATE(CCellStringOp, CELL_NAME_STRING_OP)
- CCellStringOp::CCellStringOp(void)
- {
- m_OpType = 0;
- m_InterceptIdx = 0;
- m_InterceptLen = 0;
- m_NextPos = 0;
- m_MatchTruePos = 0;
- m_MatchFalsePos = 0;
- m_OpVarName = "";
- m_ResultVarName = "";
- m_ReplaceVarName = "";
- m_ReplaceAsVarName = "";
- m_MatchVarName = "";
- m_AppendVarName = "";
- }
- CCellStringOp::CCellStringOp( CCellStringOp & CellStringOp ) : CCellBase(CellStringOp)
- {
- m_OpType = CellStringOp.m_OpType;
- m_InterceptIdx = CellStringOp.m_InterceptIdx;
- m_InterceptLen = CellStringOp.m_InterceptLen;
- m_NextPos = CellStringOp.m_NextPos;
- m_MatchTruePos = CellStringOp.m_MatchTruePos;
- m_MatchFalsePos = CellStringOp.m_MatchFalsePos;
- m_OpVarName = CellStringOp.m_OpVarName;
- m_ResultVarName = CellStringOp.m_ResultVarName;
- m_ReplaceVarName = CellStringOp.m_ReplaceVarName;
- m_ReplaceAsVarName = CellStringOp.m_ReplaceAsVarName;
- m_MatchVarName = CellStringOp.m_MatchVarName;
- m_AppendVarName = CellStringOp.m_AppendVarName;
- }
- CCellStringOp::~CCellStringOp(void)
- {
- }
- /*****************************************************************
- **【函数名称】 operate
- **【函数功能】 节点执行函数
- **【参数】
- **【返回值】 下一个节点编号
- ****************************************************************/
- int CCellStringOp::operate( void )
- {
- if(m_pIvrFlow == NULL)
- return CELL_OP_ERROR;
- CString Info;
- _getCellInfo(Info);
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_NORMAL, _T("{Cell}: 开始执行[%s]"), Info);
- CString strSourceString;
- if( !m_pIvrFlow->findVarValue( m_OpVarName, strSourceString ) )
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 操作字符串[%s]未找到相应值"), Info, m_OpVarName);
- return CELL_OP_ERROR;
- }
- switch(m_OpType)
- {
- case STRING_OP_TRIM:
- {
- strSourceString.Trim();
- m_pIvrFlow->addVar(m_ResultVarName, strSourceString);
- return m_NextPos;
- }
- break;
- case STRING_OP_SUB:
- {
- CString strTmp = strSourceString.Mid( m_InterceptIdx, m_InterceptLen );
- m_pIvrFlow->addVar(m_ResultVarName, strTmp);
- return m_NextPos;
- }
- break;
- case STRING_OP_REPLACE:
- {
- CString strSourceReplace = "";
- CString strDestReplace = "";
- if( !m_pIvrFlow->findVarValue( m_ReplaceVarName, strSourceReplace ) )
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 被替换字符串[%s]未找到相应值"), Info, m_ReplaceVarName);
- return CELL_OP_ERROR;
- }
- if( !m_pIvrFlow->findVarValue( m_ReplaceAsVarName, strDestReplace ) )
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 替换为字符串[%s]未找到相应值"), Info, m_ReplaceAsVarName);
- return CELL_OP_ERROR;
- }
- strSourceString.Replace( strSourceReplace, strDestReplace );
- m_pIvrFlow->addVar( m_ResultVarName, strSourceString );
- return m_NextPos;
- }
- break;
- case STRING_OP_MATCH:
- {
- CString strMatch;
- if( !m_pIvrFlow->findVarValue( m_MatchVarName, strMatch ) )
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 匹配字符串[%s]未找到相应值"), Info, m_MatchVarName);
- return CELL_OP_ERROR;
- }
- if( strMatch == strSourceString )
- return m_MatchTruePos;
- else
- return m_MatchFalsePos;
- }
- break;
- case STRING_OP_APPEND:
- {
- CString strDestString;
- if( !m_pIvrFlow->findVarValue( m_AppendVarName, strDestString ) )
- {
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_WARNING, _T("{Cell}: 执行[%s]出错, 合并字符串[%s]未找到相应值"), Info, m_AppendVarName);
- return CELL_OP_ERROR;
- }
- strSourceString += strDestString;
- m_pIvrFlow->addVar( m_ResultVarName, strSourceString );
- return m_NextPos;
- }
- break;
- default:
- ASSERT(FALSE);
- }
- return CELL_OP_ERROR;
- }
- /*****************************************************************
- **【函数名称】 copy
- **【函数功能】 拷贝自身
- **【参数】
- **【返回值】 拷贝副本
- ****************************************************************/
- CCellBase * CCellStringOp::copy( void )
- {
- CCellBase * pCellBase = new CCellStringOp(*this);
- return pCellBase;
- }
- /*****************************************************************
- **【函数名称】 fillData
- **【函数功能】 节点解析,填充数据
- **【参数】 Provider:数据提供器
- **【返回值】 成功true,失败false
- ****************************************************************/
- bool CCellStringOp::fillData( IFlowDataProvider& Provider )
- {
- CString Data;
- do
- {
- if(!Provider.getData(CELL_ATTRIBUTE_POS, Data))
- {
- Data = _T("节点号");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_Pos);
- if(m_Pos < 1)
- {
- Data = _T("节点号");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_OPERATE_TYPE, Data))
- {
- Data = _T("操作类型");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_OpType);
- if(m_OpType < STRING_OP_TRIM || m_OpType > STRING_OP_APPEND)
- {
- Data = _T("操作类型");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_OPERATE_VAR, m_OpVarName))
- {
- Data = _T("操作字符串");
- break;
- }
- if(!Provider.getData(CELL_ATTRIBUTE_RESULT_VAR, m_ResultVarName))
- {
- Data = _T("存储结果变量");
- break;
- }
- if(!Provider.getData(CELL_ATTRIBUTE_REPLACE_VAR, m_ReplaceVarName))
- {
- Data = _T("被替换字符串变量");
- break;
- }
- if(!Provider.getData(CELL_ATTRIBUTE_REP_AS_VAR, m_ReplaceAsVarName))
- {
- Data = _T("替换为字符串变量");
- break;
- }
-
- if(!Provider.getData(CELL_ATTRIBUTE_MATCH_VAR, m_MatchVarName))
- {
- Data = _T("匹配字符串变量");
- break;
- }
- if(!Provider.getData(CELL_ATTRIBUTE_APPEND_VAR, m_AppendVarName))
- {
- Data = _T("合并字符串变量");
- break;
- }
- if(!Provider.getData(CELL_ATTRIBUTE_INTERCEPT_INDEX, Data))
- {
- Data = _T("截取开始索引");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_InterceptIdx);
- if(m_OpType == STRING_OP_SUB && m_InterceptIdx < 0)
- {
- Data = _T("截取开始索引");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_INTERCEPT_LEN, Data))
- {
- Data = _T("截取长度");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_InterceptLen);
- if(m_OpType == STRING_OP_SUB && m_InterceptLen < 1)
- {
- Data = _T("截取长度");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_NEXT, Data))
- {
- Data = _T("跳转节点");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_NextPos);
- if(m_NextPos < 1)
- {
- Data = _T("跳转节点");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_TRUE_POS, Data))
- {
- Data = _T("匹配为真跳转节点");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_MatchTruePos);
- if(m_OpType == STRING_OP_MATCH && m_MatchTruePos < 1)
- {
- Data = _T("匹配为真跳转节点");
- break;
- }
- }
- if(!Provider.getData(CELL_ATTRIBUTE_FALSE_POS, Data))
- {
- Data = _T("匹配为假跳转节点");
- break;
- }
- else
- {
- sscanf_s(Data, _T("%d"), &m_MatchFalsePos);
- if(m_OpType == STRING_OP_MATCH && m_MatchFalsePos < 1)
- {
- Data = _T("匹配为假跳转节点");
- break;
- }
- }
- Provider.getData(CELL_ATTRIBUTE_NOTE, m_Note);
- return true;
- } while (false);
- ILogger::getInstance().log(LOG_CLASS_BUSI, LOG_LEVEL_ERROR, _T("{Cell}: 节点[%s]解析失败, '%s'错误"), CELL_NAME_STRING_OP, Data);
- return false;
- }
|