对于尚未设置的导航属性,DevForce Validation返回Ok

时间:2017-04-11 17:03:44

标签: c# devforce

我一直在为DevForce中的实体开发validatin,我已经设法获得了除验证导航属性之外的所有工作。

我尝试在属性上放置一个RequiredValueVerifier属性,并确实在UI上显示验证错误,但是一旦我使用Manager.VerifierEngine.Execute({entitytovalidate}),结果就会显示为Ok。

我知道DevForce创建了nullos并且我们可以修改属性在所述nullos中的含义但是我希望VeirifierEngine在我们没有更新nullo中的值时返回Not Ok的方式。

我目前的解决方法是在用于FKey的Id上有一个辅助Int32RangeVerifier,但我不满意这是一种解决方法。

尝试这样做而无需为这些属性创建Verifier Providers。

如果有人对此有解决方案,我将非常感谢您分享。

以下是当前解决方案的示例:

namespace BearPaw.Models.Main 
{
[MetadataType(typeof(TechnicianNoteMetadata))]
public partial class TechnicianNote  {

    public static TechnicianNote Create(int byUserId, DateTimeZone clientZone, DateTime userUtc)
    {
        var newItem = new TechnicianNote()
        {
            CreatedById = byUserId,
            CreatedDate = userUtc,
            CreatedDateTz = clientZone.Id,
            ModifiedById = byUserId,
            ModifiedDate = userUtc,
            ModifiedDateTz = clientZone.Id
        };
        return newItem;
    }

}

    public class TechnicianNoteMetadata
    {
    [Int32RangeVerifier(ErrorMessage = "Note Category is required", MinValue = 1)]
    public static int NoteCategoryId;

    [RequiredValueVerifier(DisplayName = "Note Category")]
    public static NoteCategory NoteCategory;

    [RequiredValueVerifier(DisplayName = "Note Detail")]
    public static string NoteDetail;

    }
}

非常感谢提前

1 个答案:

答案 0 :(得分:0)

您可以创建自定义验证程序来处理导航属性验证,如果您不想使用VerifierEngine,则可以使用AddVerifier方法将其直接添加到IVerifierProvider。< / p>

例如:

public class NullEntityVerifier : PropertyValueVerifier
{
   public NullEntityVerifier(
       Type entityType,
       string propertyName,
       string displayName = null)
      : base(new PropertyValueVerifierArgs(entityType, propertyName, true, displayName)) { }

   public NullEntityVerifier(PropertyValueVerifierArgs verifierArgs)
      : base(verifierArgs) { }

   protected override VerifierResult VerifyValue(object itemToVerify, object valueToVerify, TriggerContext triggerContext, VerifierContext verifierContext)
   {
       var entity = valueToVerify as Entity;
       var msg = $"{this.ApplicableType.Name}.{this.DisplayName} is required.";
       return new VerifierResult(entity != null && !entity.EntityAspect.IsNullEntity, msg);
   }
}

要添加到引擎:

var verifier = new NullEntityVerifier(typeof(TechnicianNote), "NoteCategory");
_em1.VerifierEngine.AddVerifier(verifier);

如果您想坚持使用属性验证程序,则可以为验证程序创建自定义属性。有关详细信息,请参阅DevForce Resource Center