如何在自定义中插入和添加自定义行?

时间:2016-12-29 09:14:11

标签: acumatica

我尝试使用操作按钮,AddFollowUp为潜在客户编写一些自定义代码。我想:

  1. 更新名为UsrNextFollwup的自定义字段 - >如何访问对象中的自定义字段?
  2. 我可以使用PXSelect<>更新我找到的对象但我如何插入新对象?例如,如果我创建联系人myContact=new Contact(); //设置属性等 - >我该如何插入?
  3. 如何找到当前用户的ID?我可以从联系curLead=Base.LeadCurrent.SelectSingle()获得当前的领先优势,但我也想要@me函数。
  4. 我的代码:

    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 个答案:

答案 0 :(得分:2)

在Acumatica中,自定义字段通过DAC扩展声明。要访问DAC扩展对象,可以使用以下方法:

  1. 每个DAC实例可用的GetExtension()泛型方法:

    ContactExt contactExt = curLead.GetExtension<ContactExt>();
    
  2. 在非通用PXCache类中声明的GetExtension(object)泛型方法

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

    ContactExt contactExt = Base.Caches[typeof(Contact)].GetExtension<ContactExt>(curLead);
    
  3. PXCache泛型类的GetExtension(object)静态泛型方法

    ContactExt contactExt = PXCache<Contact>.GetExtension<ContactExt>(curLead);
    
  4. 要插入,更新或删除DAC记录,应在适当的PXCache实例上调用Insert,Update或Delete方法(或者只是将调用重定向到PXCache的数据视图 - &gt; ShipmentLines.Insert(line)是等效的到ShipmentLines.Cache.Insert(line)声明)。例如,要在代码中将数据记录插入缓存,可以按如下方式调用数据视图的Insert()方法:

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

    某些应用程序设置(例如BranchID,UserID和UserName)可通过 PXGraph 类的Accessinfo属性访问。 Accessinfo属性返回 AccessInfo DAC的实例 - AccessInfo.UserID将返回当前用户的ID。要从BLC扩展访问Accessinfo属性,请使用Base.Accessinfo语句

    开始ver。 5 Acumatica引入了运行时编译,当任何当前应用的自定义项目中不包含dll时,它允许在不强制重新启动IIS应用程序池的情况下发布自定义项。在发布运行时编译之前,自定义管理器在网站的App_Code \ Caches文件夹中创建了所有代码文件。 Asp.Net运行时负责处理在App_Code \ Caches文件夹中创建的任何代码文件,立即编译它们并重新启动IIS应用程序池,以便立即在Acumatica网站上进行所有更改。这种方法的优点在于,在位于App_Code \ Caches文件夹下的任何文件中声明的所有类都可以使用VS IntelliSense,并且永远不会突出显示为红色下划线作为潜在问题。唯一的缺点 - 每次在App_Code \ Caches文件夹中进行任何更改时,IIS应用程序池都会重新启动(就像您重新编译位于Bin文件夹中的dll一样)并且您的网站需要一些时间才能重新启动,因此您可以进行测试你的改变。

    通过运行时编译,Acumatica在网站的App_RuntimeCode文件夹中创建了所有代码文件。现在,Acumatica有责任将App_RuntimeCode文件夹中的所有代码文件编译到程序集中,并在运行时加载它而无需重新启动IIS应用程序池。使用这种方法,每次在自定义中进行一些更改时,都不需要等待网站重新启动。另一方面,有时运行时复杂并不总是正确地清除以前的代码文件中所执行的操作,并且可能需要手动回收应用程序池或重新启动开发人员计算机上的IIS以确保Acumatica仅加载App_RuntimeCode文件夹中的实际代码。另一个缺点是VS IntelliSense缺乏支持:所有在App_RuntimeCode文件夹下的文件中声明的类都不会被IntelliSense建议,并且总是以红色突出显示为潜在问题,尽管你自己和Acumatica都有信心,一切都很好,所有文件都是会用mo问题编译。

    要在App_Code \ Caches文件夹中自动创建所有自定义文件,只需在开发网站上通过向web.config文件中的appSettings添加以下密钥来禁用运行时编译: <add key="UseRuntimeCompilation" value="false" />