0

私のプラグインはフィールドを暗号化/復号化します。CRM フォーム内のフィールドで動作します。

コンソール アプリケーションからの取得では、プラグインをバイパスします。たとえば、プラグインを実行せずにデータベースから暗号化された値を直接取得します。デバッグ時、フォームからフィールドにアクセスするとプラグインのブレークポイントにヒットしますが、コンソール プログラムからアクセスするとヒットしません。

私のプラグインがプログラムから呼び出されていないことに驚いています。それは私のビジネスルールを迂回します。

プログラムからエンティティとフィールドにアクセスする方法は次のとおりです。

    private static OrganizationServiceProxy service = null;
    private static OrganizationServiceContext orgSvcContext = null;
    public static void RetrieveSSNs()
    {
        var query = orgSvcContext.CreateQuery("bpa_consumer");
        foreach (Entity consumer in query)
        {
            if (consumer.Attributes.Contains("bpa_ssn"))
            {
                string ssn = consumer["bpa_ssn"].ToString();
                Console.WriteLine(string.Format("Consumer \"{0}\" has SSN {1}", consumer.Attributes["bpa_name"], ssn));
            }
            else
            {
                Console.WriteLine(string.Format("Consumer \"{0}\" doesn't have a SSN", consumer.Attributes["bpa_name"]));
            }
        }
    }
4

3 に答える 3

3

Retrieve メソッドにプラグインが登録されていると思いますか? その場合は、RetrieveMultiple に別の同一の登録を追加します。これにより、プラグインが foreach で実行されるようになります。ただし、これはパフォーマンスの観点から非常に危険なことであることに注意してください...

于 2012-11-26T20:19:38.773 に答える
0

パフォーマンスが気になる場合は、暗号化されたデータをルックアップを使用して別のエンティティに入れることをお勧めします。この方法を使用すると、CRM は、ユーザーがプライマリ レコードにアクセスするたびにではなく、ユーザーが暗号化されたデータにアクセスする必要がある場合にのみ、Retrieve/RetrieveMultiple プラグインを実行する必要があります。これにより、暗号化されたデータの保護も容易になります。

于 2012-11-30T19:03:10.783 に答える
-1

Entities のコレクションを照会するときは、RetrieveMultiple イベントにプラグインを登録する必要があります。

于 2012-11-27T15:57:20.930 に答える