ksql中定义的本体在dataModel中不存在

问题

  前几天还是一切正常。昨天,因为需求方提出了新的需求,所以改动了MySQL中的几个表格。主要的修改方式是,砍去几栏,或者删除几栏,而保留原来的数据;这一操作借助可视化MySQL工具可以轻松完成。但是,在今天的报表实例运行时出现错误“报表执行错误:报表数据获取失败”。


  顺着由前往后调试的思路,首先打开前面.w报表文件,发现图表组件数据源异常,如图所示:


ksql中定义的本体在dataModel中不存在


  于是,再往后检查,跟踪到BIZ端logic下的Action定义。我使用的是简单的ksql创建的KSQL类型Action。接下来想仔细分析一下对应的SQL语句,但是点击ksql编辑器中ksql一行中的...符号想进去时出现如题所示的警告错误。请参考下图:

ksql中定义的本体在dataModel中不存在



解答

  意思再明确不过了,查看本体定义情况吧。于是,转到antology子模块下观察。乍看是没有问题的--其实真正存在问题。先到wex5论坛中搜索相关帮助,只找到一条,说是KSQL编辑器正常的错误提示,再没有其他进展与解答。


  根据以往操作,肯定是在调整数据表结构后再反向生成本体时出现的问题。于是,再次小心细致地把本体再反向生成一遍,并正常生成对应的数据库表。


  那么,接下来要创建ksql类型的ACTION了。问题正在于这里。此前,我是直接在eclipse中新建概念并填入关系,然后在运行界面中输入数据的。而现在,我是直接通过MYSQL后面修改的数据表结构,再来反向生成本体。这一步操作中,要特别注意的标准action操作过程的大小写问题。因为本质上这些ACTION对应于后台的一些JAVA函数,而JAVA自然是区分大小写的。


  接下来,就是检查ksql表达式的问题。幸好,以前的ksql还存在。我把它记录下来,如下:

1
2
3
select Mo_TradeDetail.fTradeNatureClass as fTradeNatureClass,Mo_TradeDetail.fTradeNature as fTradeNature,count(Mo_TradeDetail.fTradeNature) as fTradeNatureCount,sum(Mo_TradeDetail.fTotal) as fTotalCount,sum(Mo_TradeDetail.fFine) as fFineCount
    from Mo_TradeDetailMo_tradedetail
    group by Mo_TradeDetail.fTradeNature


  现在,点击【测试】按钮,运行出现错误!但是,没有更细致的错误提示(不像mysql可视化管理工具中那样提示好定位)!


  在浪费了不少时间后,我注意到概念的大小写与我反向生成本体后概念的大小写是不一致的(正确的形式是Mo_tradedetail)。于是,我尝试着把大小写修改过来,如下:

1
2
3
select Mo_tradedetail.fTradeNatureClass as fTradeNatureClass,Mo_tradedetail.fTradeNature as fTradeNature,count(Mo_tradedetail.fTradeNature) as fTradeNatureCount,sum(Mo_tradedetail.fTotal) as fTotalCount,sum(Mo_tradedetail.fFine) as fFineCount
    from Mo_tradedetail Mo_tradedetail
    group by Mo_tradedetail.fTradeNature



  现在点击【测试】按钮,运行成功了!接下来,再到前面调整报表窗体中的图表数据源形式便很容易了。


吃亏后的小结


  根本原因是对于WeX5中提供的KSQL语法不熟,如下所描述的:这个KSQL语句中,竟然表格(即概念)名字是大小写敏感的,而后面例如sum函数等根本不敏感!竟然因为小小的语法问题浪费了那么多时间。唉,无怪乎网络上称呼程序员为“程序猿”,虽然听起来有些刺耳,但是的确有一定的道理。


















本文转自朱先忠老师51CTO博客,原文链接:http://blog.51cto.com/zhuxianzhong/1898455,如需转载请自行联系原作者





上一篇:UploadiFive jquery html5上传插件使用[带项目源码]


下一篇:全新英特尔®凌动™处理器E3900系列:支持下一代智能互联的物联网设备 —— 这个全新处理器系列把计算能力迁移到更靠近传感器的位置,从而减轻把所有处理工作推向数据中心的需求