2017-01-10 36 views
0

我在RQRequisition主數據視圖上創建了3個自定義字段。爲每個自定義字段添加FieldUpdated事件,該函數將從這些字段中總結值,然後將其複製到行dataview(RQRequisitionLine)上的自定義字段。計算主人的自定義字段,並將其複製到線上的自定義字段 - Acumatica

爲RQRequisition

DAC擴展定義:

//Non UI Field for UsrEngCost 
[PXDBDecimal] 
[PXDefault(TypeCode.Decimal, "0.0")]  

// definition for UsrCuryEngCost 
[PXDBCurrency(typeof(RQRequisition.curyInfoID), typeof(RQRequisitionExt.usrEngCost))] 
[PXUIField(DisplayName="Est. Eng. Cost")]  
[PXDefault(TypeCode.Decimal, "0.0")] 

//Non UI Field for UsrShipCost 
[PXDBDecimal] 
[PXDefault(TypeCode.Decimal, "0.0")] 

// definition for UsrCuryShipCost 
[PXDBCurrency(typeof(RQRequisition.curyInfoID), typeof(RQRequisitionExt.usrShipCost))] 
[PXUIField(DisplayName="Est. Ship. Cost")] 
[PXDefault(TypeCode.Decimal, "0.0")] 

//Non UI Field for UsrCleCost 
[PXDBDecimal] 
[PXDefault(TypeCode.Decimal, "0.0")] 

// definition for UsrCuryCleCost 
[PXDBCurrency(typeof(RQRequisition.curyInfoID), typeof(RQRequisitionExt.usrCleCost))] 
[PXUIField(DisplayName="Est. Clear. Cost")] 
[PXDefault(TypeCode.Decimal, "0.0")] 

DAC擴展定義RQRequisitionLine:

//Non UI Field for UsrAddCost 
[PXDBDecimal] 
[PXDefault(TypeCode.Decimal, "0.0")] 

// definition for UsrCuryAddCost 
[PXDBCurrency(typeof(RQRequisitionLine.curyInfoID), typeof(RQRequisitionLineExt.usrAddCost))] 
[PXUIField(DisplayName="Additional Cost")] 
[PXDefault(TypeCode.Decimal, "0.0")] 

這裏是FieldUpdated事件的代碼:

protected virtual void RQRequisition_UsrEngCost_FieldUpdated(PXCache cache, PXFieldUpdatedEventArgs e) 
{ 
    RQRequisition row = (RQRequisition)e.Row; 
    if (row == null) return; 

    RQRequisitionExt rowExt = PXCache<RQRequisition>.GetExtension<RQRequisitionExt>(row); 

    RQRequisitionLine reqLine = ReqLines.Current; 
    RQRequisitionLineExt reqLineExt = PXCache<RQRequisitionLine>.GetExtension<RQRequisitionLineExt>(reqLine); 

    reqLineExt.usrCuryAddCost = rowExt.usrCuryEngCost + rowExt.usrCuryShipCost + rowExt.usrCuryCleCost; 
    row.Update(reqLine); 

} 

發佈並得到錯誤:

錯誤:'usrCuryAddCost':無法通過表達式引用類型;請嘗試'PX.Objects.RQ.RQRequisitionLineExt.usrCuryAddCost'代替文件:代碼#RQRequisitionEntry(41) 錯誤:'usrCuryEngCost':不能通過表達式引用類型;嘗試'PX.Objects.RQ.RQRequisitionExt.usrCuryEngCost'代替文件:代碼#RQRequisitionEntry(41)

請您需要您的建議。

回答

0

應將'usrCuryAddCost'和'usrCuryEngCost'(第一個字符小寫)字段聲明爲DAC擴展中的抽象類類型。

應將「UsrCuryAddCost」和「UsrCuryEngCost」(第一個字符大寫)聲明爲DAC擴展中抽象類旁邊的屬性類型。

在BQL查詢,類型參數和屬性中使用抽象類(第一個字符小寫)。

當您需要訪問字段的屬性值時,您可以使用屬性(第一個字符大寫)。您是否嘗試過: reqLineExt.UsrCuryAddCost = rowExt.UsrCuryEngCost +

這些屬性是否在擴展DAC中聲明?

+0

屬性已在擴展DAC中聲明。你可以在我上面更新的問題中找到它。 – Arsiadi

+0

如果您正在使用項目編輯器,則可以通過單擊「數據類」窗口的查看源按鈕來查看字段的屬性。您添加到問題中的是字段的屬性。屬性將被聲明爲:'override decimal? UsrEngCost {get;設置}'。看起來你正在使用引用類,而應該看起來像這樣:abstract class UsrEngCost:IBqlField {}。至少這就是'不能通過表達式引用類型'的錯誤所說的。 –

+0

我的意思是抽象類lowercased:抽象類usrEngCost:IBqlField {}。 –