2016-11-14 2 views
1

Epicor 9では、Visual Studioを開いてプロジェクトを作成し、Epicorライブラリを使用してビジネスオブジェクト(BO)にアクセスするのはかなり簡単でした。したがって、たとえば、Epicor.Mfg.Partライブラリをインクルードし、Partオブジェクトを新しくすることによって、Partにアクセスすることができます。その後、Part.GetByID("partnum");を呼び出すことによって、部品の情報を入手することが容易になりました。これは、PartDataSetを返します。Epicor以外のEpicor10ビジネスオブジェクトでUDフィールドにアクセスするにはどうすればよいですか?

Epicor 10でも同じことをするのは難しいですが、PartDataSetにはUDフィールドが含まれていないことに気付きました.EdicフィールドにUiフィールドが正しく設定されていることに気付きました。

ビジネスオブジェクトを通じてEpicor 10をタップすると、どのようにUDフィールドにアクセスできますか?

EDIT:

using Erp.BO; 
using Erp.Proxy.BO; 

// ... 

var binding = Epicor.ServiceModel.StandardBindings.NetTcp.UsernameWindowsChannel(); 

var cc = new ClientCredentials(); 
var cred = cc.UserName; 
cred.UserName = "****"; 
cred.Password = "****"; 
DnsEndpointIdentity ep = new DnsEndpointIdentity("****"); 

var quoteBo = new QuoteImpl(binding, new Uri("net.tcp://****/Erp/BO/Quote.svc"), cc, ep); 

var qds = new QuoteDataSet(); 
var hed = qds.QuoteHed.NewQuoteHedRow(); // type: QuoteDataSet.QuoteHedRow 

// I am not getting UserDefinedColumns as a member of hed. 
// This gives me a compiler error. 
qds.QuoteHed[0].UserDefinedColumns["Custom_c"] = "value"; 

答えて

1

これはかなり簡単ですが、BOへの呼び出しによって返されたDSは、クライアントとサーバーの両方にある契約DLLに定義されます。このファイルは、UDフィールドがクライアントマシンに配布される必要があるためです追加されていません。あまりにも多くのクライアントの更新が発生します。

これは、Visual Studioでは、コントラクトアセンブリを参照してフィールド名を判別できないことを意味します。代わりに、アクセスCOLUMNNAMEインデクサすなわち使用してフィールド:

class Program 
{ 
    static void Main(string[] args) 
    { 
     // Hard-coded LogOn method 
     // Reference: Ice.Core.Session.dll 
     Ice.Core.Session session = new Ice.Core.Session("manager", "manager", "net.tcp://AppServer/MyCustomerAppserver-99999-10.0.700.2"); 

     // References: Epicor.ServiceModel.dll, Erp.Contracts.BO.ABCCode.dll 
     var abcCodeBO = Ice.Lib.Framework.WCFServiceSupport.CreateImpl<Erp.Proxy.BO.ABCCodeImpl>(session, Erp.Proxy.BO.ABCCodeImpl.UriPath); 

     // Call the BO methods 
     var ds = abcCodeBO.GetByID("A"); 
     var row = ds.ABCCode[0]; 

     System.Console.WriteLine("CountFreq is {0}", row.CountFreq); 
     System.Console.WriteLine("CustomField_c is {0}", row["CustomField_c"]); 
     System.Console.ReadKey(); 
    } 
} 

UserDefinedColumnsはEpicor.ServiceModelで定義されているが、それはErp.Tablesets.QuoteHedRowから継承Ice.IceRowの内部プロパティであるとしてアクセスできなくなります。

+0

Erp.Tablesets.QuoteHedRowを使用しています。私はErp.BO.QuoteDataSet.QuoteHedRowを使用しようとしています。私が知る限り、QuoteImplクラスは、型が後者に一致する参照を必要とします。テーブルセットをデータセットにキャストする方法はありますか(またはその逆)?テーブルセットを使用して通信する必要がある別のBOオブジェクトがありますか? –

+0

私は、外部クライアントからBOメソッドを呼び出すためのより完全な例を追加しました。 QuoteImplクラスで作業する必要はなく、CreateImplメソッドを呼び出すだけで、BPM内でIce.Assemblies.ServiceRenderer.GetServiceを呼び出した場合と同じようにBOインスタンスを取得できます。 –

+0

これは完璧です。正確に私が必要としたもの。ありがとう。私は外部環境でテーブルセットを利用する方法を知りたがっています。 QuoteImplをQuoteSvcContractにキャストしようとしましたが、うまくいきませんでした。再度、感謝します。 –

0

あなたが特定のレコードがあなたを探して見つけた、あなたはUserDefinedColumnsという名前の追加のオブジェクトが表示されるはずのレコードのすべての列を含むオブジェクトを持っています。それはタイプ<string, object>の二分法のように機能します。だから、例えば、あなたがこのような何かをするだろう値を設定するには:

myPartDs.Part[0].UserDefinedColumns["MyUdColumn_c"] = "some value"; 

アウト値を引く必要がある場合、あなたはそれが彼らがオブジェクトとして格納されているためである必要がどんなタイプにそれを解析する必要があります。

+0

UserDefinedColumnsにアクセスするためにアセンブリが必要ですか?私はDataSetでそれを見つけることができません。上記の質問を編集して、私が使っているオブジェクトとアセンブリを表示しました。 –

関連する問題