正確にはあなたが求めているものではありませんが、APIを介して同様の効果を達成することができます。Create
とに対するプラグインをUpdate
事前検証段階で記述します(データベーストランザクションの前null
に値を取得するため)。null不可能な属性がnullになる場合は、例外をスローします。これにより、トランザクションが完全にキャンセルされます。
レコードがすでに作成された後にプラグインを登録する場合は、それらの既存のレコードに値を入力することを確認する必要があります。
public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
var target = ((Entity)context.InputParameters["Target"]);
if (target.LogicalName == Appointment.EntityLogicalName)
{
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
var entity = target.ToEntity<Xrm.Appointment>();
if (entity.Description == null && entity.Attributes.Contains("description"))
{
throw new Microsoft.Xrm.Sdk.SaveChangesException("Fill in the field, buddy.");
}
}
}
}