1

C#のERPシステム(SAP)からいくつかのデータをプルする必要があります。SAPについて詳しくは説明しません(SAPについては知りたくないと思います)。

C#内からリモート関数を呼び出して動作していますが、奇妙な問題が発生しています。SAPでC#から呼び出さなければならない関数の1つは、BAPI_USER_GET_DETAILと呼ばれます。

だから私はC#でこれを行います:

        s.Bapi_User_Get_Detail("No","10217502", out address, out alias, out companyName,
            out defaults, out islocked, out lastmodified, out logonData, out ref_user, out snc, out uclass, 
            ref activeGroups, ref addcomrem, ref addfax, ref addpag, ref addprt, ref addrfc,
            ref addrml, ref addsmtp, ref addssf, ref addtel, ref addtlx, ref addttx, ref adduri, 
            ref addx400, ref extidhead, ref extidpart, ref groups, ref parameter, ref parameter1,
            ref profiles, ref return0, ref systems, ref uclasssys); 

        Console.WriteLine(companyName._Company);
        Console.ReadLine();

SAPはこれらすべてのフィールドを必要とするため、これはごく普通のコードです。outこの関数内の引数の1つをプルする必要があります。companyつまり、このプロシージャを実行した後の引数は、このcompanyフィールド内に値が含まれている必要があり、ウォッチはここに次のように表示します。

ここに画像の説明を入力してください

私が抱えている問題は、_Companyには必要な価値があるが、私にはできないことに気づいたことですcompanyName._Company(Visual Studioはこれを好みません)。ただし、上記のように時計で実行すると、正しく表示されます。それは私に会社名を与えます。では、時計が値を正しく表示するのはどうしてですか。私はC#で単純なことを間違って行っているに違いありません。

編集

エラーは、SAPの保護レベルが原因で、ある種のエラーのように見えます。これをどのように公開できるのでしょうか...
4

1 に答える 1

1

私が見ることができるものから、最も可能性の高い説明はthat _Companyプライベートフィールドです。そのため、コードから直接アクセスすることはできません。ウォッチウィンドウは、リフレクション(または同様の手法)を使用して、プライベートおよび保護を含むすべてのメンバーを取得します。

編集:
SAPがそれを非公開にした場合、それはおそらく正当な理由によるものです。しかし、とにかく値を選びたい場合は、このようなものを試すことができます

companyName.GetType().GetField("_Company", BindingFlags.NonPublic).GetValue(companyName);
于 2011-02-18T20:23:43.507 に答える