zoukankan      html  css  js  c++  java
  • enum2str做为queryValue时的问题

    JachE 提到在Query中对枚举类型DocumentStatus字段的值进行限定的问题,由于QueryBuildRange的value只能是str类型的,所以需要用Enum2Str(DocumentStatus::None)进行转换,但我试了一下这个方法好像有问题:
    static void Enum2StrTest(Args _args)
    {
        Query                       q;
        QueryBuildDataSource        qbds;
        QueryRun                    qr;
        PurchParmUpdate             purchParmUpdate;
        ;
        q       
    = new Query();
        qbds    
    = q.addDataSource(tableNum(PurchParmUpdate));
        qbds.addRange(fieldNum(PurchParmUpdate,DocumentStatus)).value(enum2str(DocumentStatus::None));
        
        info(qbds.toString());
        
     
    }
    这样打印出的语句并没有添加where条件,由于enum2Str的结果是枚举值对应的Label值,所以出现这样的情况应该去查一下该枚举值对应的Label,确实AX系统中该枚举值没有对应的Label,于是设定None对应的Label为"没有文档",可以看到上面语句打印的结果是:
    SELECT * FROM purchParmUpdate WHERE ((DocumentStatus = 0))
    这样看来在添加Label后就可以打印了.
    突然奇想,由于枚举值在数据库里存储的类型是int,如果Lable全是数字的话,结果会怎么样那?我试着将None对应的值设为2,上面的语句打印的结果变成了:
    SELECT * FROM purchParmUpdate WHERE ((DocumentStatus = 2))
    将其写成234:
    SELECT * FROM purchParmUpdate WHERE ((DocumentStatus = 234))
    这样显然不是自己想要的结果.
    综上所述:
    1.对于枚举类型的值一定要为其设置Label;
    2.设定的值不能全为数字.
    当然我这只是自己瞎鼓捣的结果,不知道微软有没有正式的文档说明这个问题,所以如果有人知道如何解决这个问题,还望多多指教.
    非常感谢JachE!
  • 相关阅读:
    覆盖式发布与非覆盖式发布
    GIT
    Web Service返回符合Xml Schema规范的Xml文档
    下拉渐显菜单
    计算网页上坐标的距离
    初识交互设计
    良好用户体验-实现过程!
    做 用户调研?
    这个没什么技术含量,实现起来很简单?
    SQL SERVER 登录问题!该用户与可信的Sql Server连接无关联
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/1108302.html
Copyright © 2011-2022 走看看