如何在另一个引用程序集中使用与另一个类型同名的类型



我遇到了一种荒谬的情况(别怪我,这是第三方软件),我需要有两个引用(Erp.Contracts.BO.Quote和Erp.Contracts.BO.SalesOrder),但类型Erp.Tablesets.QuoteQtyRow在这两个程序集中都定义了!

如何在代码中使用它们?

void Absurdity()
{
Erp.Tablesets.QuoteQtyRow qqr_Quote = null; //<-- my intention is to use the one from the quote assembly here.
Erp.Tablesets.QuoteQtyRow qqr_SO = null; //<-- my intention is to use the one from the sales order assembly here.
}

编译器抛出一个错误。即:"类型'Erp.Tablesets.QuoteQtyRow'在两个程序集中都存在。">

编辑:限制:

  1. 我没有使用此答案中提供的外部别名的灵活性—两个程序集中具有相同名称的类(有意)。我受到第三方软件提供的环境的限制。我本质上需要一种方法来区分方法的主体。

  2. 我知道我可以通过使用dynamic关键字完全避免这个问题,但我正在寻找一个可能的强类型解决方案。

  3. 可能没有解决方案,但我想在放弃这个问题之前耗尽我所有的资源。

Epicor ERP使用一种工具将数据库中的表组合到数据集中,然后再组合到业务对象中。该业务对象在协定程序集中进行了描述,但正如您所发现的,当您使用引用同一表的两个业务对象时,会遇到问题。这通常是SerialNumber表的问题。

我从您的笔记中了解到,您正在Epicor ERP应用程序中的方法指令或数据指令中提供方法主体代码。它在客户端上输入并存储在数据库中,但在服务器上的Deployment\server\BPM\Sources\BO文件夹中生成代码,并编译到Deployment\server \Customization \BO文件夹中。

无法在BPM设计器的"执行自定义代码"工作流项中为引用的DLL指定别名。SCR 148549中要求进行修复。没有可供编辑的项目文件,即使每次启用和禁用BPM都会重新生成它。

但是,如果使用"调用外部方法"工作流项,则可以构建自己的dll,并将其放在Deployment\Server\Customization \Externals文件夹中。要做到这一点:

  • 在BPM的方法指令维护中单击Actions>Create Programming Interfaces for your method并复制代码
  • 在Visual Studio中创建新的类库项目
  • 将复制的代码粘贴到.cs文件中
  • 添加程序集-框架引用:
    • 系统数据实体
    • System.ServiceModel
    • 系统交易
  • 将文件引用添加到
    • Bin\Epicor.ServiceModel.dll
    • 程序集\Epicor.Ice.dll
    • 程序集\Epicor.System.dll
    • 程序集\Ice.Data.Model.dll
    • 程序集\ Erp.Data.910100.dll
  • 并为BPM的BO添加一个参考,即。
    • 程序集\Erp.Contracts.BO.Quote.dll
  • 确保所有引用的"复制本地"设置为false
  • Ice.ContextBoundBase<Erp.ErpContext>继承
  • 添加接受上下文public MyQuote (Erp.ErpContext ctx) : base(ctx){ }的构造函数

您不能完全复制并粘贴"执行自定义代码"主体,因为您无法访问tt行变量,这些都在ds.中

相关内容

  • 没有找到相关文章

最新更新