2016-09-02 12 views
3

プログレス/ ABLコード付きのEpicor V9システムをC#コードでv10に移行することを検討しています。私はほとんどのことをやっていますが、私はBPMの前処理と後処理の間にデータを保持する方法が必要です。元ABLコード状態のコメント:Epicor 10 BPMの前処理と後処理の間にデータを格納する方法は?

説明:BPM前処理アクションからこの関数を格納したデータを、それが呼び出しプログラムにプライベート・データ(ストレージ属性)を使用してこれを行います... このBPM前とBPMの両方のプロシージャコールのポスト転送中に範囲内に残ります

Epoteorフォームが、Quoteフォームが.pファイルのBPM前処理/後処理を呼び出すように設定されています。 .pファイルは、.iファイルで移行しようとしているコードを呼び出しています。単純なスタックや文字列の配列に見えます。

V9で行われた.iコードのように、前/後のBPM処理間でデータを保持するためにEpicor 10で使用されるものは何ですか?

答えて

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組み込み型であり、はるかに優れています。 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) 
    { 

    } 
を取得します。このクラスを使用するには

//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); 

:しかし、それからエントリを追加および削除する方法は、以下のような変更を持っています

E10.1では、これに任意の種類のオブジェクトを入れることができるので、文字列の配列を持っているならば、〜の値の古いトリックを使う必要はありません。

+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デザイナーで直接設定することができます。デザイナーの左ウィンドウ枠で、下までスクロールすると、「Set BPM Data Field」と呼ばれるものが表示されます。デザインエリアにドラッグします。それをデザイナー領域にドラッグした後、下部のウィンドウ枠にフィールドとその値を設定するオプションが表示されます。フィールドを選択すると、「値」を選択すると、baq計算フィールドデザイナーと同様のウィンドウが表示されます。静的データを使用することも、ビジネス・オブジェクト内のデータを使用して値を計算することもできます。

+0

"callContextBpmData"をVisual Studioで認識させることができません。あなたは何を追加する必要があるか考えていますか?ありがとう! – RichP

+1

私はcallContextBpmDataがIce.Tablesets.BpmDataRow型であることを知っています。あなたはEpicor.Customization.BPMを通してローカル参照にアクセスできると思います。しかし私はそれについて肯定的ではない。関連するすべてのbpmファイルをサーバーからビジュアルスタジオに直接プルすると、自動的に認識されるようです。 – Jerm86

関連する問題