ITPub博客

首页 > 数字化转型 > ERP > 二.《微软ERP Dynamics AX 2009 企业开发指南》 笔记

二.《微软ERP Dynamics AX 2009 企业开发指南》 笔记

ERP 作者:36thelma 时间:2013-08-31 09:45:56 0 删除 编辑

一:是否可重用执行计划   2013/8/16

 

    数据库在执行数据查询语句前,都需要将SQL语句转换成执行计划,并找出执行该语句的最高效的方法,这个过程就叫做编制执行计划。对于复杂的查询语句,比较评估和产生执行计划是一件很消耗系统资源的,所以,需要系统优化此项。DBCC FREEPROCCACHE

1 *ForcePlaceholds

 强制让AX内核在解析查询条件时使用变量代替常量,这样产生的SQL脚本可以被下一次具有相同条件但条件值不同的查询使用。

2 FerceLiterals

  强制让AX内核在解析查询条件时使用常量,而不是变量,这样产生的SQL脚本不可重用。

3 Repeatable

  使用Repeatable读取的记录都不可以被其他连接修改或删除,但不能阻止别的连接新增数据,直到本次交易完成。

二:聚合函数

 

Avg()/count()/sum()/minof()/maxof()

Group By

三:多表连接查询

 

Inner join 内连接是连接两个或者多个表时最常用的连接方式,

Exists join 若关联查询后的结果集中存在数据的话,返回真(true)否则为(false

Notexists join若关联查询后的结果集中存在数据的话,返回为(false)否则为真(true

Outer join  左关联是以左表为主表的每行数据去匹配游标的数据列,对符合条件的数据将直接返回到结果集中,而对那些不符合连接条件的列将被填上Null值,也返回结果集。

四:静态查询

 

AOT>Queries>创建Query>把表(MapView)置于DataSources >Field下有个属性

DynamicNo/ Yes/Unselected   A:No 删除数据源下不需要返回的字段

                             B:Yes系统自动添加该表的所有字段

                             C:Unselected 系统不添加任何字段,但是可选择的添加。

Order By  Query查询出的数据集按此节点下的字段排列

Group By  Query查询出的数据按此字段分组

Ranges    Query按某字段的条件要求查询,相当于QueryBuildRange()

Relations 属性为Yes,自动创建与上层表的关系。

五:代码创建动态查询

 

1>  Query(系统级别)和SysQuery(应用程序级别)

注:可以使用这两个类来为查询添加一个或多个数据源

2>  QueryRun(系统级别)和SysQueryRun(应用程序级别)

      注:执行查询并返回结果,以循环的方式从类中读取数据

      m_QueryRun         =new SysQueryRun( m_query )

3>  QueryBuildDataSource(系统级别)

      注:连接到查询中的一个数据源

4>  QueryBuildRange(系统级别)

      注:为数据源添加条件和条件值

      m_QueryBuildRange.value(queryValue(documentstatus::PackingSlip));

      m_queryBuildRange.value(QueryRange(“1000”,1001))

      m_queryBuildRange.value(“1000,1001”);

5>  QueryBuildFieldList(系统级别)

      注:列出数据源的所有字段

6>  QueryBuildLink(系统级别)

      注:设定数据源的连接关系,且数据源的链接关系总是设置在下一层的数据源中。

      m_queryBuildLink   =m_InventTableDS.addLink (

                          fieldNum(SalesLine,ItemId ),fieldNum(InventTable ,ItemId ));

备注:具体应用

   query.Literals(0)查询由系统决定

   query.Literals(1)强制使用ForceLiterals模式查询

   query.Literals(2)强制使用ForcePlaceholders模式查询

  注: 没应用过!!!

六:复合查询

 

Composite Query  A :覆盖父类的方法

                 B:添加更多的查询条件

描述    路径     方法/属性名 诊断 ID

*** 错误: 271,尚未设置查询数据源“InventTable”的字段列表的动态属性。    QueriesAXD_InventTable_Item_CompComposite QueryAXD_InventTable_ItemData SourcesInventTable(InventTable)       InventTable Err:271

老出现这个错误,不知哪里错了?

可以用表作为查询的数据源外,CompositeQuery还允许一个查询作为另一个查询的数据源。

 一 表方法

                                                           2013/8/23

   表方法是定义在每个表的Methods节点下的方法。

(1)   Formreport里的方法都是不可重用的,而定义在表和类的方法是可以被AX胖客户端企业门户和第三集成的应用程序所调用(把通用的业务逻辑定义在表方法或类中)。

(2)   Methods定义新方法和覆盖表方法,每个被覆盖的方法都会默认使用super(),父方法的逻辑。

Find():主要用来查找主键对应的行记录,update==true返回记录可修改,静态方法,update==flase只读记录。

(3)   系统方法:

a>  initValue()新建行时调用,可将默认值写于此方法中

应用:常用此方法来初始化流水号,单据编号和其它默认值。

b>  validataField() 每当字段值改变时,或字段失去焦点时就触发此方法,主要用于校验字段的值是否规范。

c>  modifiedField()此方法主要用于初始化那些基于该字段的值的字段。

前提是validataField()返回为true  this.custInvoiceAccount=this.CustAccount

d>  validataWrite()方法

保存数据是,触发此方法,判断是否满足保存的条件,此方法的父类方法主要检查字段的合法性。

super()=true时,触发Insert()和update()方法。

应用:币种必须和发票账户的币种相同

CustTable::findthis.CustInvoiceAccount.Currency=this.CurrencyCode

e>  validataDelete()方法   用户删除记录时触发

可用此方法来判断是否有相关数据(交易数据或子表数据)

true触发delete()方法。

  关联

 

(1)   普通关联:外键表和主表  在外键表中创建关联 SalesLine.SalesID=SalesTable.SalesID

(2)   多态关联:固定字段/固定的相关字段

二.《微软ERP <wbr>Dynamics <wbr>AX <wbr>2009 <wbr>企业开发指南》 <wbr>笔记

 

  删除触发事件

   MorPhx 允许定义删除事件DeleteAction,只要把那些要删除的字表定义在DeleteAction节点下。

   字表的记录可以被删除的前提条件是字表中建立和主表的关系(relations.

a>  None

b>  Casade

c>  Restricted

d>  Casade+Restricted

 

  表缓存 CacheLookup

     AX系统有一套数据缓存机制来降低从数据库服务器读取数据的次数,从而提高数据的查询效率。(不应对那些频繁更新的表设置缓存)

 

表记录缓存 (客户端100条,而AOS服务器为<=2000)

  系统当且仅当满足一下条件时才使用记录缓存功能

(a)表的属性CacheLookup值为Found, NonInTTS, FoundAndEmpty

(b)查询条件的where子句中都是用符号(==)匹配。

(c)where后的条件字段有对应的唯一索引组,最好能匹配上主索引(primary Index)。

(d)查询语句是单表查询,即没有使用关联多表查询(join Inquiry.

属性设置项:Found

             NonInTTS

             FoundAndEmpty

Found: 若表标准包里的缓存模式是Found,则首先查找客户端缓存,若没有则查找服务器段缓存,若没有则查询数据库服务器。

NonInTTS: 表现为对事务敏感,即事务中的第一次查询必然直接查询数据库而不使用缓存。

FoundAndEmpty:独特之处在于它“不但缓存找到的数据,同时也缓存找不到数据的条件”,也就是说相同的条件如果第一次查不到的话,系统就会缓存起来,第二次再使用该条件查询的时候,系统直接查询缓存并返回空记录,而不会再查询数据库。但是其他缓存类型是在缓存中找不到记录的情况下,会进一步查询数据库。

FoundFoundAndEmpty对事务不敏感,即在事务的内外层都可以使用缓存。

注:

DisableCache方法会阻止表使用缓存,直接插叙数据库,同时若查询语句使用的是字段列表的话,这个方法会阻止查询语句的有限字段列表被展开成所有字段。

整表缓存EntireTable

 

    

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22286856/viewspace-1119116/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-08-07