2011-05-03 136 views
1

在Dynamics Axe 2009中,我們需要一個基於同一個表中的另一個字段進行計算的字段。儘管使用顯示方法或某些東西可能會很好,但實際上我們必須存儲這個值(管理層害怕動態計算,因爲之前的產品使用它們並且速度很慢(就像AX中的任何東西都很快!)) 。可以根據其他字段計算字段嗎?

提上錦上添花,他們希望它的工作雙向的:

如果我們有FIELDA,計算和存儲FieldB。 如果我們有FieldB,計算並存儲FieldA。 如果我們有或沒有,就什麼都不做。

Dynamics AX中內置了什麼可以幫助我嗎?

回答

3

首先,覆蓋表的方法insert(),如:

public void insert() 
{ 
    ; 

    this.FieldB = this.FieldA * 2; 

    super(); 
} 

然後覆蓋update(),如:

public void update() 
{ 
    if (this.FieldA == this.orig().FieldA && this.FieldB != this.orig().FieldB) 
    { 
     this.FieldA = this.FieldB/2; 
    } 
    else 
    { 
     this.FieldB = this.FieldA * 2; 
    } 

    super(); 
} 

這些僅僅是例子,使用你自己的判斷方法應該被忽略。最後,覆蓋modifiedField(),當字段在形式手動修改將被僅用於:

public void modifiedField(fieldId _fieldId) 
{ 
    ; 

    super(_fieldId); 

    switch (_fieldId) 
    { 
     case fieldnum(MyTable, FieldA) : 
      this.FieldB = this.FieldA * 2; 
      break; 

     case fieldnum(MyTable, FieldB) : 
      this.FieldA = this.FieldB/2; 
      break; 
    } 

    if (this.isFormDataSource()) 
     this.dataSource().refresh(); 
} 

P.S.請注意,當您使用doinsert()doupdate()skipDataMethods()時,不會調用insert()update()

+0

是否真的有必要重寫modifiedField?不要插入,更新方法覆蓋用戶通過表單編輯? 另外,感謝您的答案。 – 2011-05-03 11:07:55

+1

如果'modifiedField()'被覆蓋並且用戶更改了FieldA,則FieldB將立即更改。否則,只有在保存記錄時纔會更改。數據一致性並不重要,只是爲了用戶便利而添加。 – 10p 2011-05-03 11:34:51

+0

@ 10p:何時調用insert()和update()?你能再解釋一下嗎? – piku 2011-05-03 13:07:40

相關問題