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

How to insert and add custom rows in customization?

我正在尝试为带有操作按钮的自定义编写一些代码,AddFollowUp to Leads。我想:

  1. 更新名为 UsrNextFollwup 的自定义字段 -> 如何访问对象中的自定义字段?
  2. 我可以更新使用 PXSelect<> 找到的对象,但如何插入新对象?例如,如果我创建联系人 myContact=new Contact(); //设置属性等 -> 如何插入它?
  3. 如何找到当前用户的ID?我可以从 Contact 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
 }
 }

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

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

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

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

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

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

要插入、更新或删除 DAC 记录,应在适当的 PXCache 实例(或数据视图,它只是将调用重定向到 PXCache -> ShipmentLines.Insert(line) 上调用 Insert、Update 或 Delete 方法相当于 ShipmentLines.Cache.Insert(line) 语句)。例如,要在代码中将一条数据记录插入到缓存中,您可以调用数据视图的 Insert() 方法,如下所示:

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

一些应用程序设置,例如 BranchID、UserID 和 UserName 可通过 PXGraphclass 的 Accessinfo属性 访问。 Accessinfo 属性 return 是 AccessInfo DAC 的实例 - AccessInfo.UserID 将为当前用户提供 return ID .要从 BLC 分机访问访问信息 属性,请使用 Base.Accessinfo 语句

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

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

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