【问题标题】:Acumatica: How to duplicate an existing screen (Customer Contracts) to a new screen (Vendor Contracts)Acumatica:如何将现有屏幕(客户合同)复制到新屏幕(供应商合同)
【发布时间】:2021-09-16 18:05:05
【问题描述】:

美好的一天,

这是我第一次在网站上发帖,请多多包涵。 :)

我们项目的要求之一是将现有屏幕(客户合同)复制到模仿源屏幕的新屏幕(供应商合同)中。客户不希望我们自定义屏幕而是复制它。我已经看到了一种可以复制和重命名 asp 文件的方法,但这仅适用于 ASP 文件:Is it possible to copy existing screens?

  1. 这可能吗?
  2. 如果是这样,是否需要考虑其他事项(图表、现有屏幕的 DAC 也要复制?)
  3. 还有其他方法可以实现吗?

顺便说一句,我还是 acumatica 的新手。 谢谢,注意安全。

【问题讨论】:

  • 在 DEV 实例中尝试的东西。我不知道它是否会起作用,但这是我开始尝试的地方。我不使用任何合同屏幕,但您可以尝试创建一个继承自您所需屏幕使用的图形的图形。然后创建一个新屏幕作为占位符。然后从原始屏幕复制 ASPX 并替换新屏幕的 ASPX 内容。请记住,您需要替换新 ASPX 文件中定义的屏幕名称和图形名称。然后你可以尝试重载你想要改变的东西。
  • 请记住,默认情况下 DAC 仍将指向另一个屏幕,因此您用于前端的任何 GI 都需要定义自定义导航以将用户引导至新屏幕.同样,不知道这是否可行,但如果您没有找到任何其他建议,则值得一试。 IMO,最好找到一种方法来做某事,而不是走开并说它做不到。您可能会知道它不能或不应该以“那样”的方式完成,但无论哪种方式,您都会在此过程中学到一些东西。
  • @BrianStevens,谢谢你的回复,我会试试你提到的。

标签: acumatica


【解决方案1】:

您可以先从您需要复制的屏幕使用的图表(客户合同)中创建一个新图表。

然后您应该复制屏幕的 aspx 文件,但将正在使用的图形从旧图形更改为您的图形。在 aspx 文件的副本中查找 px:PXDataSource 并将 TypeName 属性更改为图形的全名(带有命名空间部分)。

适用于基础图的所有业务逻辑,例如图事件、图扩展、视图、操作也将适用于派生图。此外,您可以将自己的业务逻辑引入仅适用于它的派生图。有一些 Acumatica 屏幕使用这种方法(AR301000 和 SO301000)。

请注意,如果您不控制基本图的代码,可能很难用它编写和支持复杂的东西。派生图也将受到对基础图所做的每一次更改的影响。因此一般建议引入自己的独立图。但是在您需要屏幕逻辑的完整副本时,您可以尝试这种方法,

DAC 并非特定于特定图表,它们可以被另一个图表使用。如果您需要更改 DAC 中的现有字段,您可以使用 DAC 扩展来独立于所有图表进行操作。您还可以使用它们向 DAC 添加新字段: https://help-2021r1.acumatica.com/Help?ScreenId=ShowWiki&pageid=114ae5af-8667-4933-b53d-c4c8667c85ac

或者您可以使用图形的缓存附加事件来更改特定图形的现有 DAC 字段上的属性(例如,通过更改 PXUIFieldAttribute.DisplayName 来更改为字段显示的标签): https://help-2021r1.acumatica.com/Help?ScreenId=ShowWiki&pageid=80e817bd-e70b-45b9-a9b1-2d2d0e2f8ee2

如果您需要更改 DAC 声明中的很多内容,您可以使用 Acumatica 平台支持的以下技巧。制作 DAC 声明的副本并将命名空间更改为您的自定义命名空间。那么从 C#/Acumatica 框架的角度来看,这将被视为一个单独的类/DAC。但是,它仍将映射到同一个数据库表。您可以更改 DAC 属性字段的属性或删除一些您不使用的属性。这不会影响原始 DAC 和使用它的图中的业务逻辑。

更新

我忘记了一个重要的时刻。感谢@brian-stevens 指出这一点。

如果您需要更改系统中的默认导航以转到您的屏幕而不是现有的屏幕(例如,来自 GI 的导航),那么您将需要做一些额外的工作。 导航是通过PXPrimaryGraphAttribute 定义的,它在 DAC 上声明如下:

[PXPrimaryGraph(typeof(MyGraph))]
public class MyDac : IBqlTable
{
   ...
}

您需要传递默认情况下要导航到的屏幕所使用的图形类型。 PXPrimaryGraphAttribute 的声明可能包括几种图形类型和条件,以允许根据不同的条件导航到不同的屏幕。例如,您可以根据文档的类型导航到不同的屏幕。您可以查看PX.Objects.AP.APRegister 的示例。

但是,PXPrimaryGraphAttribute 不是在 DAC 字段属性上声明的,而是在 DAC 本身上声明的。因此,不可能使用用于更改 DAC 属性属性的方法对其进行自定义。如果您不拥有 DAC 的源代码,则无法更改其PXPrimaryGraphAttribute 声明。

在这种情况下,我会尝试以下方法。您可以在图形上声明 PXPrimaryGraphAttribute 并将主 DAC 的类型传递给其构造函数。根据文档,这应该覆盖此 DAC 的导航。

[PXPrimaryGraph(typeof(PrimaryDac))]
public class MyCopyOfGraph : BaseGraph
{}

以下是文档和相关 SO 问题的链接:

更新 2

检查代码后,我发现 Acumatica 平台实际上通过在 DAC 扩展上声明 PXPrimaryGraphAttribute 属性为您提供了覆盖 DAC 默认导航的能力,如下所示:

[PXPrimaryGraph(typeof(MyCopyOfGraph))]
public class MyDacExtension : PXCacheExtension<MyDac>
{
   ...
}

更新 3 我的同事最近提到的另一个问题是屏幕的工作流程。您将需要覆盖现有的工作流程并定义自己的工作流程。

【讨论】:

  • 不错的细节。一个澄清虽然...... DAC 不限于由单个图形使用,但应该给它一个 PrimaryGraph 定义。完成后,对 DAC 的访问(例如在 GI 中)将默认导航到 PrimaryGraph 指定的任何图形。同样,字段上的“允许编辑”等功能也将默认使用主图。因此,如果您希望记录进入您的自定义图表(屏幕),任何此类自定义都需要覆盖默认导航。
  • 谢谢,更新了答案,详细说明了如何覆盖导航。
  • 我可以从代码中看到,将 PXPrimaryGraphAttribute 放在 DAC 扩展上也应该可以工作。我会尝试确认,然后使用此选项更新答案。
猜你喜欢
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 2019-09-07
  • 2018-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
相关资源
最近更新 更多