ما هو نمط التحقق من صحة وقت التصميم في Workflow Foundation 4.0؟

StackOverflow https://stackoverflow.com/questions/1826511

سؤال

لست واضحًا بشأن متى وكيف يجب أن أقوم بالتحقق من الصحة في أنشطتي المخصصة/مصانع الأنشطة المخصصة/المصممين المخصصين في WF 4.0.

المكان الوحيد في نشاطي الذي يبدو أنه يوفر دعمًا لأخطاء التحقق من الصحة هو داخل CacheMetadata الطريقة (أعتقد أن هذا يتم استدعاؤه عدة مرات أثناء عملية التصميم).هل هذا هو المكان الذي يجب أن أقوم فيه بالتحقق من الصحة؟هل هناك دعم للتحقق من الصحة داخل ActivityDesigner؟

هل كانت مفيدة؟

المحلول

نعم، CacheMetadata في نشاطك هو المكان الذي يجب أن تقوم فيه بالتحقق من الصحة.التحقق من الصحة هو مفهوم ينطبق على وقت تشغيل سير العمل وكذلك على المصمم.(يمكنك رؤية ذلك من حقيقة أنه لا يزال بإمكانك محاولة تشغيل مهام سير العمل، المجمعة أو التعريفية، التي تحتوي على أخطاء في التحقق من الصحة، ولكن سيتم طرح استثناء عند القيام بذلك.)

مثال:

protected override void CacheMetadata(ActivityMetadata metadata)
{
   if (this.Body == 0) metadata.AddValidationError(
     new ValidationError(
       "You forgot to supply a body for (this activity)",
       /*iswarning = */ true, 
       "Body"));
}

(يرى ActivityMetadata.AddValidationError)

سؤالك الثانوي هو هل هناك دعم لإضافة التحقق من الصحة من جانب ActivityDesigner؟الإجابة هي "لا، ليس حقًا" - سيكون من الممكن إجراء بعض ربط WPF المخصص للبيانات والذي يضيف بعض "التحقق المخصص" أعلى ActivityDesigner، وربما حتى استخدام AttachedPropertiesService لتحديد خاصية SatisfiesConstraints الخاصة بك في فئة نشاطك .ولكنه عمل إضافي، ولن يرتبط بالتحقق من صحة وقت التشغيل بشكل متسق، لذا فهي فكرة ذات قيمة محدودة.

نصائح أخرى

public class SalesCommissionValidation : CodeActivity<decimal>
{
    public decimal NetSales { get; set; }
    public decimal Percentage { get; set; }

    protected override decimal Execute(CodeActivityContext context)
    {
        var commission = NetSales * (Percentage / 100);
        return commission;
    }

    protected override void CacheMetadata(CodeActivityMetadata metadata)
    {
        base.CacheMetadata(metadata);

        if (NetSales <= 0)
            metadata.AddValidationError("Sales cannot be less than 0!");
        else if (Percentage <= 0)
            metadata.AddValidationError("Sales percentgage cannot be less than 0!");
        else
        {
            if (Percentage > 20)
                metadata.AddValidationError(string.Format("Sales percentgage {0} cannot be greater than 20%", Percentage));
        }

    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top