فروم تخصصی - پشتیبانی CPSD
آموزش نكات فني قفل گذاري مبتني بر Trial Keeper Professional بخش اول - نسخه‌ی قابل چاپ

+- فروم تخصصی - پشتیبانی CPSD (http://cpsd.ir/forum)
+-- انجمن: محصولات (/forumdisplay.php?fid=1)
+--- انجمن: غیر رایگان (/forumdisplay.php?fid=7)
+---- انجمن: Trial Keeper Professional (/forumdisplay.php?fid=4)
+----- انجمن: مقالات و مثال های آموزشی مرتبط با Trial Keeper Professional (/forumdisplay.php?fid=18)
+----- موضوع: آموزش نكات فني قفل گذاري مبتني بر Trial Keeper Professional بخش اول (/showthread.php?tid=76)



آموزش نكات فني قفل گذاري مبتني بر Trial Keeper Professional بخش اول - CPSD Admin - ۱۸ تير ۱۳۹۰ ۰۹:۴۶ عصر

با سلام

در این جلسه قصد دارم مقداری در خصوص فراخوانی تابع Initialize موجود در داخل Trial Keeper Professional توضیحاتی رو ارائه کنم .

در پروسه كنترل بايد دقت كنيد كه حتماً روال كنترلی رو به صورت چندين باره در داخل خود برنامه هم تكرار كنيد ، تا در صورت غير فعال شدن هر يك از نقاط كنترلي در محلهايي ديگه بتونيد بر روي عملكرد قفل صحه گذاري كنيد .

تكرار چندين باره عمليات فراخواني قفل ميتونه تا حدودي بر روي سرعت اجراي خود برنامه تاثير گذار باشه ، نكات زير ميتونه به شما در كاهش اين زمان كمك كنه .

در داخل Trial Keeper Professional اگه دقت كرده باشيد وضعيت جاري قفل از طريق كدي كه از تابع Initialize بازگردانده ميشه قابل تشخيصه .

به طور مثال كد شماره 1 نشان دهنده عدم پايان دوره آزمايشي و كد شماره 10 نشاندهنده فعال بودن و يا همان ثبت بودن برنامه ميباشد .

شما ممكنه در نقاط مختلفي بخوايد اين تابع رو بارگذاري كنيد و با استفاده از مقدار برگشتي اون به وضعيت جاري پي ببريد . به طور مثال شما ممكنه اين كد رو در داخل روال انتساب داده شده به دكمه اي كه عمليات نمايش يك گزارش رو به انجام ميرسونه فراخواني كنيد . در صورتي كه اين گزارش در يك جلسه كاري به دفعات زيادي از سوي كاربر مورد استفاده قرار ميگيره ، فراخواني چندين باره قفل ميتونه تا حدودي براي كاربر ايجاد مزاحمت كنه ( با توجه به مكثهاي صورت پذيرفته تا زمان اجراي فرمان مورد نظر )

راه حل پيشنهادي رو در ادامه ذكر ميكنم تا سربار كاري رو به نحوي قابل توجه كاهش بديم :

همونطوري كه ميدونيد ميشه اقدام به تعريف يك متغير كرد تا اين متغير عمليات نگهداري يك نوع داده رو به عهده بگيره .

ما متغير رو به صورت زير تعريف ميكنم :

Dim XYZ As Byte

دقت كنيد كه نام XYZ اختياري بوده و شما هر نامي رو ميتونيد به اين متغير اختصاص بديد .

نوع اين متغير رو هم از نوع همون مقدار برگشتي از تابع Initialize قرار داديم يعني Byte .

در داخل فرمها و گزارشها ميتونيد اين قطعه كد رو در بالاترين بخش ماژول موجود در داخل هر يك از اونها كپي كنيد .

در اين حالت شما اين متغير رو به نحوي تعريف كرديد كه براي تمامي روالهاي موجود در داخل فرم و يا گزارش مورد نظر قابل دسترسي باشه .

حال با يك بار فراخواني تابع Initialize و انتساب اون به اين متغير ، در دفعات بعدي شما فقط نيار داريد كه مقدار موجود در داخل اين متغير رو مورد بررسي قرار بديد . به قطعه كد زير توجه كنيد :

کد:
XYZ=Initialize( ….. )

قبلاً ممكن بود كه شما از خروجي تابع Initialize به صورت زير استفاده مي كرديد :

به طور مثال در داخل روال On Click يك دكمه ، دستور زير رو فراخواني كرديد :

کد:
If Initialize(…..)<>10 Then

MsgBox "Sample Nag Message"

End if

در قطعه كد بالا قصد داريد كه كاربر در صورتي كه برنامه رو ثبت نكرده پيغامي مزاحم رو مشاهده كنه . اگه دقت كرده باشيد در اين حالت كاربر علاوه برمشاهده پيغام مزاحم با تاخيري در اجراي فرمان مورد نظرش هم مواجه ميشه .

كد بالا رو ميتونيد به صورت زير بنويسيد :

کد:
If XYZ<>10 Then

MsgBox "Sample Nag Message"

End if

نتيجه در هر دو حالت هموني ميشه كه شما انتظار داريد ولي اين بار بدون تاخير ناشي از اجراي تابع Initialize

نكته : در حالت دوم شما نياز داريد كه حداقل يك بار تابع Initialize رو فراخواني كرده باشيد . اين روال ميتونه در داخل رويدار On Load فرم بوده باشه . در اين حالت مقدار برگشتي به XYZ انتساب داده ميشه و شما ميتونيد از اون مقدار به دفعات متوالي در نقاط مختلف استفاده به عمل بياريد ، بدون اينكه تاثيري بر روي كارايي برنامه داشته باشه .

خوشبختانه تابع Initialize به گونه اي طراحي شده كه حتي در صورت دور زدن روال كنترلي موجود در داخل برنامه شما ( فراخواني تابع ) كد برگشتي به گونه اي خواهد بود كه دال بر عدم ثبت بودن برنامه خواهد داشت و ليكن جهت حصول اطمينان بيشتر توجه شما رو به نكات زير جلب ميكنم :

تابع Initialize رو حداقل در دو رويداد متفاوت مورد بازخواني قرار بديد به طور مثال در دو رويداد On Load و On Activate . در انتخاب اين رويدادها به نكات زير توجه داشته باشيد :

رويداد مرتباً تكرار نشود ( مثل On Current )

در داخل رويدادهاي مورد نظر عملياتي ديگر نيز به انجام برسه تا در صورت حذف رويداد توسط كركر بخشي ديگر از برنامه نيز مختل بشه .

به طور مثال در داخل رويدار On Load علاوه بر فراخواني قفل عمليات انتساب Control Source رو هم به انجام برسونيد .

امكان فراخواني قفل در داخل رويدادهاي تكرار پذير نيز ميتونه ايده اي بسيار مناسب بوده باشه و ليكن جهت انجام اون نياز به انجام مرحله اي اضافه داريد تا در مجموع منجر به كاهش زمان سربار فراخواني تابع Initialize بشيد .

ادامه آموزش رو به جلسه بعد موكول ميكنم .

موفق باشيد