2016-12-29 179 views
0

我想用一個動作按鈕,AddFollowUp到Leads來編寫一些自定義代碼。我想要:如何在自定義中插入和添加自定義行?

  1. 更新自定義字段名爲UsrNextFollwup - >如何訪問對象中的自定義字段?
  2. 我可以更新對象我PXSelect <找到>但我怎麼可以插入新對象?例如,如果我創建聯繫人myContact=new Contact(); //設置屬性等 - >我該如何插入它?
  3. 如何找到當前用戶的ID?我可以從聯繫人curLead=Base.LeadCurrent.SelectSingle()獲得當前線索,但我也想要類似@me的功能。

我的代碼:

public class LeadMaint_Extension:PXGraphExtension<LeadMaint> 
{ 
public PXAction<PX.Objects.CR.Contact> AddFollowUp; 
public PXSelect<CRActivity> Task; 

[PXButton(CommitChanges = true)] 
[PXUIField(DisplayName = "Add FollowUp")] 
public void addFollowUp() 
{   
    Contact curLead=Base.LeadCurrent.SelectSingle(); 
    DateTime dueDate = DateTime.Now; 
    curLead.CreatedDateTime = dueDate.AddDays(14); //works great 
    curLead.UsrNextFollwup = dueDate.AddDays(14); //doesn't work 
} 
} 

回答

1

在Acumatica自定義字段通過DAC擴展聲明。要訪問DAC擴展對象,你可以使用以下方法:

  1. 的GetExtension()可用於每個DAC實例通用方法:

    ContactExt contactExt = curLead.GetExtension<ContactExt>(); 
    
  2. 的GetExtension(對象)內聲明的泛型方法非通用類PXCache

    ContactExt contactExt = Base.LeadCurrent.Cache.GetExtension<ContactExt>(curLead); 
    

    ContactExt contactExt = Base.Caches[typeof(Contact)].GetExtension<ContactExt>(curLead); 
    
  3. 的GetExtension(對象)PXCache泛型類

    ContactExt contactExt = PXCache<Contact>.GetExtension<ContactExt>(curLead); 
    

插入,更新或刪除DAC記錄的靜態泛型方法,應該調用INSERT,UPDATE或適當PXCache刪除方法實例(或數據視圖,它只是將調用重定向到PXCache - >ShipmentLines.Insert(line)相當於ShipmentLines.Cache.Insert(line)語句)。例如,插入數據記錄到代碼中的高速緩存,您可以調用數據視圖的insert()方法如下:

ShipmentLine line = new ShipmentLine(); 
line.ProductID = card.ProductID; 
... 
ShipmentLines.Insert(line); 

某些應用程序的設置,如BranchID,用戶名和用戶名通過Accessinfo訪問屬性PXGraph類。該Accessinfo屬性返回AccessInfo DAC的實例 - AccessInfo.UserID將返回ID爲當前用戶。要訪問從BLC延伸Accessinfo屬性,請使用Base.Accessinfo聲明

版開始。 5 Acumatica引入了運行時編譯,當沒有任何當前應用的自定義項目包含任何dll時,允許發佈自定義,而不強制重新啓動IIS應用程序池。在發佈運行時編譯之前,定製管理器在網站的App_Code \ Caches文件夾中創建了所有代碼文件。 Asp.Net運行時負責在App_Code \ Caches文件夾中創建的任何代碼文件,立即編譯它們並重新啓動IIS應用程序池,以便立即將您的Acumatica網站上的所有更改。這種方法的優點在於,在App_Code \ Caches文件夾下的任何文件中聲明的所有類都可以使用VS智能感知,並且從不突出顯示紅色下劃線作爲潛在問題。唯一的缺點 - 每次在App_Code \ Caches文件夾中進行任何更改時,IIS應用程序池都會重新啓動(與重新編譯位於Bin文件夾中的dll一樣),並且您的網站需要一些時間才能重新啓動,以便測試你的改變。

使用運行時編譯,Acumatica在網站的App_RuntimeCode文件夾中創建了所有代碼文件。現在,Acumatica有責任將所有代碼文件從App_RuntimeCode文件夾編譯到程序集中,並在運行時加載它,而無需重新啓動IIS應用程序池。採用這種方法,您無需等待每次對自定義進行一些更改時重新啓動網站。另一方面,有時候運行時併發症並不總是能夠正確地清理以前的代碼文件中所做的事情,有時可能需要手動回收應用程序池或在開發人員計算機上重新啓動IIS以確保Acumatica僅加載App_RuntimeCode文件夾中的實際代碼。另一個缺點是VS智能感知缺乏支持:所有在App_RuntimeCode文件夾下文件中聲明的類永遠不會被IntelliSense建議,並且始終用紅色下劃線突出顯示爲潛在問題,儘管您和Acumatica都有信心,一切正常,所有文件將與mo問題編譯。

要在App_Code文件\ Caches文件夾自動創建的所有自定義文件,只是在web.config文件中添加以下關鍵的appSettings禁用開發網站運行時編譯: <add key="UseRuntimeCompilation" value="false" />

+0

感謝您的信息。我似乎遇到的問題涉及擴展放置在App_RuntimeCode目錄中似乎忽略智能感知的事實。例如:Contact curLead = Base.LeadCurrent.SelectSingle(); var ext = curLead.GetExtension ();但不存在,除非我將PX_Objects_Cr_Contact_extensions.cs從App_RuntimeCode移到App_Data。有一個更好的方法嗎? – AcumaticaGuy

+0

@AcumaticaGuy,請查看上面更新的答案 – RuslanDev

相關問題