قيد معلمة خدمات التقارير
-
03-07-2019 - |
سؤال
لدي تقرير خدمات التقارير (SQL 2008) مع معلمتين للتاريخ/الوقت - تاريخ البدء وتاريخ الانتهاء.أحتاج إلى تقييد تاريخ الانتهاء بنفس الشهر والسنة مثل تاريخ البدء.يبدو أن هذا يجب أن يكون أمرًا سهلاً للقيام به، لكن لا يمكنني معرفة ذلك.
حاليًا، أقوم بالتحقق من المعلمات التي تم تمريرها إلى الإجراء المخزن وأظهر خطأ إذا لم تكن معلمتي التاريخ والوقت في نفس الشهر والسنة.أنا أبحث عن طريقة أكثر أناقة لتحقيق ذلك.
المحلول
يمكنك التحقق من قيمة EndDate في تعبير المعلمة، وإذا كانت غير صحيحة، فاضبطها على StartDate + 1 Month.
شيء مثل:
= IIF(DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) = 0, Parameters!EndDate.Value, AddDate(DateInterval.Month, 1, Parameters!StartDate.Value))
إذا كنت تريد فقط إعلام المستخدم، فيمكنك وضع بعض مربعات النص المخفية بالتنسيق المناسب (الخط الأحمر الكبير) ورسالة حول نطاق غير صحيح لمعلمات التاريخ.في مجموعة التعبير المخفية
= (DateDiff(DateInterval.Month, Parameters!StartDate.Value, Parameters!EndDate.Value) <> 0)
يمكنك أيضًا دمج كلا الإجراءين مع التعليمات البرمجية المخصصة:
Public DateMessage As String
Public Function ValidateDate(StartDate As DateTime, EndDate As DateTime) As DateTime
Dim ResultDate As DateTime
If (DateDiff(DateInterval.Month, StartDate, EndDate) <> 0) Then
ResultDate = AddDate(DateInterval.Month, 1, StartDate)
DateMessage = String.Format("End Date parameter value {0}
was out of range and was changed to {1}", EndDate, ResultDate)
Else
ResultDate = EndDate
End If
End Function
ثم، في تعبير قيمة المعلمة:
= Code.ValidateDate(Parameters!StartDate.Value, Parameters!EndDate.Value)
في خاصية القيمة لمربع النص tbDateParameterMessage:
= Code.DateMessage
وفي تعبير الخاصية المخفية:
= String.IsNullOrEmpty(Code.DateMessage)
يحررولكن إذا كنت تريد إيقاف تشغيل التقرير، فاستخدم هذا الرمز المخصص:
Public Function CheckDate(SDate as Date, EDate as Date) as Integer
Dim msg as String
msg = ""
If (SDate > EDate) Then
msg="Start Date should not be later than End Date"
End If
If msg <> "" Then
MsgBox(msg, 16, "Parameter Validation Error")
Err.Raise(6,Report) 'Raise an overflow
End If
End Function
انها مأخوذة من منتدى SQLServerCentral.
نصائح أخرى
في كثير من الأحيان، توجد مشكلات في النشر تتعلق باستخدام وظيفة Msgbox في تقرير SSRS.إنها تعمل بشكل جيد على أجهزة التطوير الخاصة بنا، ولكن قد يكون من الصعب بدء العمل عند نشرها فعليًا.وإليكم رابطين يوضحان المشكلة:
كان الحل الذي توصلت إليه هو تنفيذ مبسط للغاية حيث تم إيقاف التقرير، ولكنه يظهر ببساطة خطأ في التقرير مع الرسالة المعروضة للمستخدم من عارض التقارير.
- قم بإنشاء معلمة نص/سلسلة جديدة (أطلق عليها اسم CheckDateRange)
- السماح بالقيم الفارغة وجعلها مخفية
- القيم المتاحة = لا شيء
- متقدم = استخدم القيم الافتراضية
- القيم الافتراضية = تحديد القيم - في القيمة، استخدم زر الوظيفة واستخدم ما يلي:=CODE.CheckDateParameters(Parameters!BeginDate.Value,Parameters!EndDate.Value) - لاحظ أنه يمكنك رؤية أسماء المعلمات الخاصة بي للتواريخ المحددة وهي BeginDate وEndDate
أخيرًا، بالنسبة لرمز التقرير، أدخل مقتطف الكود التالي:
Function CheckDateParameters(StartDate as Date, EndDate as Date) as Integer Dim msg as String msg = "" If (StartDate > EndDate) Then msg="Start Date should not be later than End Date" Err.Raise(22000, "VBCore.Utility", msg) End If End Function
لا شيء يتوهم، ولكن ينجز ما تحتاجه.
حظ سعيد!
ولقد استخدمت الخفية فكرة مربع النص لأنه كان أفضل من السماح للتحطم التقرير. ما كنت آمل أن إنجاز كان لإجبار المستخدم لتغيير المعلمات الخاصة بهم في خط الهجوم قبل صدور التقرير تنفيذها.
وراجع للشغل، بناء الجملة لم تنجح. أنا استخدم هذا بدلا من ذلك:
= Month(Parameters!begindate.Value) = Month(Parameters!enddate.Value) and Year(Parameters!begindate.Value) = Year(Parameters!enddate.Value)
وبفضل coldice لهذه الفكرة.
> Public Function CheckDate(SDate as Date, EDate as Date) as Integer Dim msg as String
> msg = ""
> If (SDate > EDate) Then msg="Start Date should not be later than End Date"
> End If
> If msg <> "" Then MsgBox(msg, 16, "Parameter Validation Error") Err.Raise(6,Report) 'Raise an overflow
> End If End Function
ما لم تكن قد قدمت التغييرات سوف الدالة MsgBox () لا يعمل على SSRS. أنها لا تعمل على SSRS 2010. وأعتقد أنه من وظيفة النوافذ بحيث لا يمكن استخدامها على صفحة الويب المقدمة.