dd事件与规则关联

1.背景

原实现中,在接口事件是与单据类型关联的.当一种单据类型对应多个抽取规则,需要各自的事件处理方式,程序就无法适应了.

要求抽取事件和抽取规则关联.

修改后的逻辑如下:
.仍允许按单据类型设置接口事件.
.如果规则指定了自己的事件处理逻辑,则采用本规则设置,否则采用单据类型的设置.
.当未指定单据类型的事件处理命令时,采用第1个规则的设置.(兼容性考虑)


2.代码修改

代码已在trunk上修改.

(1)增加定义

CRule增加成员.
 

 CEventCmd *on_before_get_;
 CEventCmd *on_after_get_;

 
(2)读配置

  pElement = (DOMElement*)GetChildNodeByTagName(pRootElement,"BeforeGet");
  this->on_before_get_ = dynamic_cast<CEventCmd*>(sti_->get_event_cmd(EVENT_EXTRACTION_BEGIN));

  if (pElement) {
   CEventCmd *cmd = new CEventCmd;
   if (cmd->Load(pRootElement,"BeforeGet")); {
    delete cmd;
    return -1;
   }
   if (this->on_before_get_==0) {
    sti_->set_event_cmd(EVENT_EXTRACTION_BEGIN,cmd);
   }
   this->on_before_get_ = cmd;
  }

  pElement = (DOMElement*)GetChildNodeByTagName(pRootElement,"AfterGet");
  this->on_after_get_ = dynamic_cast<CEventCmd*>(sti_->get_event_cmd(EVENT_EXTRACTION_END));
  if (pElement) {
   CEventCmd *cmd = cmd = new CEventCmd;
   if (cmd->Load(pRootElement,"AfterGet")) {
    delete cmd;
    return -1;
   }
   if (this->on_after_get_)
    sti_->set_event_cmd(EVENT_EXTRACTION_END,cmd);
   this->on_after_get_ = cmd;
  } 

  
(3)使用  

  CEventCmd *on_before_get = this->on_before_get_; /// dynamic_cast<CEventCmd*>(sti_->get_event_cmd(EVENT_EXTRACTION_BEGIN));
  CEventCmd *on_after_get = this->on_after_get_; ///dynamic_cast<CEventCmd*>(sti_->get_event_cmd(EVENT_EXTRACTION_END));


3.todo

注意事项:
.das(或gyb2.0)的代码未修改,需要时调整
.新引入的成员变量在单据类型设置了事件处理命令时对象在程序结束时未销毁
.目前只处理了:EVENT_EXTRACTION_BEGIN,EVENT_EXTRACTION_END这2个事件.
.是否将来有这种情形:指定了单据类型的接口事件,但某个规则不执行任何命令.目前的情况是必然执行单据类型指定的命令. 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值