Acumatica 如何在自定义中插入和添加自定义行?
我正试图为一个带有操作按钮的定制编写一些代码,AddFollowUptoLeads。我想:Acumatica 如何在自定义中插入和添加自定义行?,acumatica,Acumatica,我正试图为一个带有操作按钮的定制编写一些代码,AddFollowUptoLeads。我想: 更新名为UsrNextFollwup->的自定义字段如何访问对象中的自定义字段 我可以用PXSelect更新找到的对象,但如何插入新对象?例如,如果我创建联系人myContact=newcontact()//设置属性等->如何插入它 如何找到当前用户的ID?我可以从ContactcurLead=Base.LeadCurrent.SelectSingle()获取当前潜在客户,但我还需要类似@me函数的功能
UsrNextFollwup
->的自定义字段如何访问对象中的自定义字段myContact=newcontact()代码>//设置属性等->如何插入它
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
}
}
公共类LeadMaint_扩展:pxGrapherExtension
{
公共行动和后续行动;
公共选择任务;
[PXButton(CommitChanges=true)]
[PXUIField(DisplayName=“添加后续内容”)]
public void addFollowUp()
{
Contact curLead=Base.LeadCurrent.SelectSingle();
DateTime dueDate=DateTime.Now;
curLead.CreatedDateTime=dueDate.AddDays(14);//效果很好
curLead.UsrNextFollwup=dueDate.AddDays(14);//不起作用
}
}
在Acumatica中,自定义字段通过DAC扩展声明。要访问DAC扩展对象,可以使用以下方法:
ContactExt contactExt = curLead.GetExtension<ContactExt>();
一些应用程序设置,如BranchID、UserID和UserName,可以通过PXGraph类的Accessinfo
属性进行访问。Accessinfo
属性返回AccessinfoDAC-Accessinfo的实例。UserID
将返回当前用户的ID。要从BLC扩展访问Accessinfo属性,请使用Base.Accessinfo
语句
正在启动ver。5 Acumatica引入了运行时编译,当当前应用的定制项目中没有DLL时,它允许发布定制,而无需强制重新启动IIS应用程序池。在发布运行时编译之前,customization manager在网站的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添加以下键来禁用开发网站上的运行时编译:
Acumatica中的自定义字段通过DAC扩展声明。要访问DAC扩展对象,可以使用以下方法:
ContactExt contactExt = curLead.GetExtension<ContactExt>();
一些应用程序设置,如BranchID、UserID和UserName,可以通过PXGraph类的Accessinfo
属性进行访问。Accessinfo
属性返回AccessinfoDAC-Accessinfo的实例。UserID
将返回当前用户的ID。要从BLC扩展访问Accessinfo属性,请使用Base.Accessinfo
语句
正在启动ver。5 Acumatica引入了运行时编译,当当前应用的定制项目中没有DLL时,它允许发布定制,而无需强制重新启动IIS应用程序池。在发布运行时编译之前,customization manager在网站的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 App p
ContactExt contactExt = Base.Caches[typeof(Contact)].GetExtension<ContactExt>(curLead);
ContactExt contactExt = PXCache<Contact>.GetExtension<ContactExt>(curLead);
ShipmentLine line = new ShipmentLine();
line.ProductID = card.ProductID;
...
ShipmentLines.Insert(line);