ここで、Aileen Gusni によるこの興味深いブログ投稿を見つけました
RetrieveMultiple プラグイン C# を使用して CRM ビューの列/フィールドの値をインターセプトする
基本的に、彼女は新しいフィールドを作成します (以下の例ではpa_age
) が、フォームなどには追加しません。
代わりに、彼女は Plugin でRetrieve
とRetrieveMultiple
メッセージをキャッチし、必要に応じてこのフィールドを計算します。
彼女のコードを以下に貼り付けました
これは私のコードではなく、アイリーンによって書かれたことに注意してください
public void Execute(IServiceProvider serviceProvider)
{
#region must to have
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
// Create service with context of current user
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
//create tracing service
ITracingService tracingService = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
#endregion
//this is to modify the Age column
if (context.OutputParameters.Contains("BusinessEntityCollection"))
{
var retrievedResult = (EntityCollection)context.OutputParameters["BusinessEntityCollection"];
foreach (Entity entity in retrievedResult.Entities)
{
if (entity.Contains("birthdate"))
{
var birthday = entity.GetAttributeValue<DateTime>("birthdate");
int age = CalculateAgeYear(birthday);
//modify the Age field
entity.Attributes["pa_age"] = age;
}
}
}
}
このアプローチでは、考慮すべき点がいくつかあります。
- フィールドの
pa_age
値が設定されることはありません。ビューに含めることができるように、エンティティにのみ追加されます
- これは、フィールドが常にnull
pa_age
になるため、フォームまたはレポートに含めることができないことを意味します。
- 高度な検索 (フィルター) でフィールドを使用することはできません
pa_age
が、もちろん、高度な検索結果に追加することはできます。理由は前と同じです: 値は実際にはデータベースに保存されません。
彼女のブログ投稿には、より多くの情報と、それがどのように機能するかのスクリーンショットがあります。私はこのアプローチを試したことはありませんが、あなたにとって役立つかもしれません