AX 2009 Query类(一)

一.   过滤时的值的形式

query在ax里是个可变的自动生成的查询类。让我们能更灵变的解决不少查询问题。

在query中,过滤的关键就是query.value(_value)中参数_value的格式,该参数的值可以是基本数据类型、表达式、值列表。下面会依次示例它们的使用方法。

//最普通的query如下代码

ExpandedBlockStart.gif View Code
static   void  queryBasicDate(Args _args)
{
    Query                       query;
    QueryBuildDataSource          queryBuildDataSource;
    QueryBuildRange              queryBuildRange;
    QueryRun                    queryRun;
    CustTable                   custTable;
    ;

    query                      
=   new  Query();
    queryBuildDataSource       
=  query.addDataSource(tablenum(CustTable));
    queryBuildRange            
=  queryBuildDataSource.addRange(fieldnum(CustTable,AccountNum));
    queryBuildRange.value(queryValue(
" Customer2 " ));
    queryRun                   
=   new  QueryRun(query);

    
if (queryRun.next())
    {
      
// 相当于While select CustTable
        Where custTable.AccountNum  ==  Customer2

        custTable 
=  queryRun. get (tablenum(CustTable));

        info(strfmt(
" %1-----%2 " ,custTable.Name,custTable.AccountNum));
    }
    pause;
}

 

Query的值过滤形式各式个样,其Value形式如下:

 

ExpandedBlockStart.gif View Code
Static  void  DavTest(Args _args)
{
  Query query;
  QueryBuildDataSource qbds;
  QueryBuildRange qbr;
  QueryRun        queryRun;
  InventTable inventTable;
  ;

  Query 
=   new  Query();
  Qbds  =  query.addDataSource(tablenum(InventTable),’InventTable’);
  ……
  queryRun  =   new  QueryRun(query);
  while (queryRun.next())
  {
      inventTable  =  queryRun. get (tablenum(InventTable));
    print inventTable.recId;
  }
  Pause;
}
(1)基本数据类型:
Qbr  =  qbds.addRange(fieldnum(InventTable,ItemId));

Qbr.value(‘I
- 999 ’);



Qbr 
=  qbds.addRange(fieldnum(InventTable,RecId));

Qbr.value(
5646876135 );

但为了安全起见,一般将值使用queryvalue()处理后再传递给value()方法,如: qbr.value(queryvalue(‘I-999’)

(2)表达式:
Qbr  =  qbds.addRange(fieldnum(InventTable,ItemId));

Qbr.value(strfmt(‘(
% 1   ==  “ % 2 ”)’,fieldstr(InventTable,ItemId),queryvalue(‘I - 999 ’));

 

到目前,你可能会觉得表达式不过是把简单的问题搞复杂而已,但是,我要说的是,表达式功能很强大,我们会在后面做更详细的介绍。

在使用strfmt来构造表达式的时候有几点要注意:

(a)        传递给value方法的参数最外层要用’value’的形式括起来,即用单引号括起来;

(b)        表达式中的每一个等式以及整个表达式都要使用小括号括起来,如:

‘((%1 == %2) || (%1 == %3))’

(c)        变量依次在表达式中用%n 的形式表示;

(d)        如果被用来做过滤的值是字符串型的,必须用双引号将值所对应的变量括起来,如:

Strfmt(‘(%1 == “%2”)’,fieldstr(InventTable,ItemId),queryvalue(‘I-999’));

 (3)值列表:
Qbr  =  qbds.addRange(fieldnum(InventTable,ItemId));

Qbr.value(‘I
- 999 ,I - 888 ,I - 777 ’);

 

转载于:https://www.cnblogs.com/Kurodo/archive/2011/07/16/2107728.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值