2016-12-29 159 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

相关问题