• AX2009根据当前显示维度查询


    在上一篇中已经获取到了当前窗体的维度显示,那如何根据获取到的维度显示进行其他的查询呢?

    系统给出了两种方案

    方案1

    使用宏#InventDimJoin

    调用参数在行1到行5已经给出了,按照这几个参数调用就可以了

     1 /* %1 InventDimId           */
     2 /* %2 InventDim             */
     3 /* %3 InventDimCriteria     */
     4 /* %4 InventDimParm         */
     5 /* %5 Index hint            */
     6 
     7 join tableId from %2
     8     #ifnot.empty(%5)
     9         index hint %5
    10     #endif
    11     
    12     where (%2.InventDimId       == %1) &&
    13           (%2.ConfigId          == %3.ConfigId              || ! %4.ConfigIdFlag)           &&
    14           (%2.InventSizeId      == %3.InventSizeId          || ! %4.InventSizeIdFlag)       &&
    15           (%2.InventColorId     == %3.InventColorId         || ! %4.InventColorIdFlag)      &&
    16           (%2.InventSiteId      == %3.InventSiteId          || ! %4.InventSiteIdFlag)       &&
    17           (%2.InventLocationId  == %3.InventLocationId      || ! %4.InventLocationIdFlag)   &&
    18           (%2.InventBatchId     == %3.InventBatchId         || ! %4.InventBatchIdFlag)      &&
    19           (%2.WMSLocationId     == %3.WMSLocationId         || ! %4.WMSLocationIdFlag)      &&
    20           (%2.WMSPalletId       == %3.WMSPalletId           || ! %4.WMSPalletIdFlag)        &&
    21           (%2.InventSerialId    == %3.InventSerialId        || ! %4.InventSerialIdFlag)22 #InventDimDevelop

    原理和简单,就是根据表InventDimParm中的字段显示标识,做为查询的条件进行关联,但是这种方法只能使用在查询语句中

    那就介绍另一种方案,可以用在Query中的

    方案2

    使用动态组合查询

     1     InventDimParm                   inventDimParm=callerArgs.caller().parmDimParmVisibleGrid();//获取显示的维度
     2     container                       dimFields = InventDim::dimFieldList();//获取当前系统使用的维度
     3     QueryBuildDataSource            inventDimqbs=this.query().dataSourceTable(tablenum(InventDim));//关联当前Form的Dim数据源
    5 FormDataSource                  inventDimFrqbs=InventDim::callerInventDimDatasource(callerArgs);//从调用Form获取Dim数据
    6
    int h; 7 fieldId dimParmFieldId,dimFieldId; 8 ; 9 for(h=1;h<=conlen(dimFields);h++) 10 { 11 dimFieldId = conpeek(dimfields,h);//维度ID 12 dimParmFieldId = InventDim::dim2dimParm(dimFieldId);//显示维度ID 13 if(inventDimParm.(dimParmFieldId)) 14 inventDimqbs.addRange(dimFieldId).value(queryValue(inventDimFrqbs.cursor().(dimFieldId)));//根据显示的维度进行过滤 15 else 16 inventDimqbs.addRange(dimFieldId).value(SysQuery::valueUnlimited());//不显示的维度取消过滤 17 }
  • 相关阅读:
    【Python】ModuleNotFoundError: No module named 'matplotlib.pyplot'
    【DB2】DB2使用IMPORT命令导入含有自增长列的表报错处理
    ~~
    汉字的unicode码范围是多少?
    字符编码(ASCII,Unicode和UTF-8) 和 大小端(zz)
    是否 whether ,if
    定语从句:
    by,with
    C++中extern “C”含义深层探索
    安装Office2007时出现1706错误的解决方案
  • 原文地址:https://www.cnblogs.com/rumenren/p/3177227.html
Copyright © 2020-2023  润新知