2016-09-02 86 views
3

我正打算将带有Progress/ABL代码的Epicor V9系统迁移到带有C#代码的v10。我已经完成了大部分工作,但我需要一种在BPM前期和后期处理之间保持数据的方法。在原来的ABL代码状态注释:Epicor 10如何在BPM预处理和后处理之间存储数据?

说明:此功能将把从BPM预处理动作数据,它通过使用专用数据(存储属性)的调用程序... 这样做此在BPM pre和BPM发布前后都保持在范围内

已设置Epicor v9系统,以便Quote格式在.p文件中调用BPM前/后处理。转换中的.p文件调用了我试图在.i文件中迁移的代码。它看起来是一个简单的堆栈或字符串数​​组。

在Epicor 10中,如何在V9之前使用.i代码执行前/后BPM处理之间保持数据?

回答

3

您可以为此使用CallContext.Properties。

在E10.0的CallContext.Properties是类型Epicor.Utilities.PropertyBag的,和项将被如下访问:现在

//Add 
CallContext.Properties.Add("LineRef", LineRef); 
// Get 
var LineRef = (string)CallContext.Properties["LineRef"]; 
// Remove 
CallContext.Properties.Remove("LineRef"); 

E10.1 CallContext.Properties是类型的System.Collections中。 Concurrent.ConcurentDictionary,它是一个内置的.NET类型,更好地记录。然而这些方法来添加和删除条目从它有变化如下:

//Add 
bool added = CallContext.Properties.TryAdd("LineRef", LineRef); 
// Get 
var LineRef = (string)CallContext.Properties["LineRef"]; //Note: Do not use .ToString() this converts instead of unboxing. 
// Remove 
object dummy; 
bool foundAndRemoved = CallContext.Properties.TryRemove("LineRef", out dummy); 

要使用这个类需要从ContextBoundBase继承和实施的唯一上下文范围构造或者你会得到'Ice.ContextBoundBase<Erp.ErpContext>.ContextBoundBase()' is obsolete: 'Use the constructor that takes a data context'

public partial class MyInvokeExternalMethodThing : ContextBoundBase<ErpContext> 
{ 
    public MyInvokeExternalMethodThing(ErpContext ctx) : base(ctx) 
    { 

    } 

在E10.1中,你可以放入任何类型的对象,所以如果你有一个字符串数组,你不需要使用tilde〜separated〜值的旧技巧。

+0

你知道如何使用CurrentCallContext.CurrentUser吗?我有一个预处理BPM,用于存储更新用户的更新方法。目前,它没有,我不知道为什么,它只是不插入数据。我查看了Epicor文档,但没有运气。我正在使用E10 –

+0

您需要将此作为一个单独的问题来询问,而不是将其添加为对此答案的评论。只要记住用[epicorerp]标记它,并提及您在问题中使用的Epicor ERP版本。 –

1

我不知道从E9使用.i文件,但我知道如何在E10中的前后方法指令之间保持数据。希望这有助于。

有几种不同的方法可以做到这一点。如果在创建预处理bpm时选择了“执行自定义代码”选项。您可以使用callContextBpmData直接在您的代码中执行此操作。几乎所有的字段名称与E9使用的用户字段(即Number01,Chracter01,Date01)类似。

在你的代码,如果你要设置的文字,你可以简单地输入:

callContextBpmData.Character01 = "some text"; 

另外,您可以在BPM设计师直接设置它没有任何代码。在设计器左窗格中,一直滚动到底部,您应该看到一个名为“设置BPM数据字段”的东西。将其拖入设计区域。将其拖入设计器区域后,您应该看到在底部窗格中设置字段及其值的选项。选择该字段,然后当您选择“值”时,您被带到类似于baq计算字段设计器的窗口。您可以使用静态数据或使用业务对象中的数据来计算值。

+0

我无法让“callContextBpmData”被Visual Studio识别。你有什么想法我需要添加什么参考?谢谢! – RichP

+1

我知道callContextBpmData是Ice.Tablesets.BpmDataRow类型,我认为你可以通过Epicor.Customization.BPM访问本地引用。不过,我对此并不积极。如果将所有关联的bpm文件直接从服务器拉入Visual Studio,它似乎会自动识别它。 – Jerm86

相关问题