تهیه گزارشات Crosstab به کمک LINQ
تهیه گزارشات Crosstab به کمک LINQ - قسمت دوم
در دنیای واقعی، تهیه گزارشات به سادگی که در اکثر نرم افزارهای گزارش ساز موجود پیش بینی شده است، نیست. در این نوع نرم افزارها، بر اساس یک طراح بصری، تعدادی ستون مشخص، ایجاد شده، منبع دادهای به این ستونها متصل و نهایتا گزارش تهیه میشود. اما اگر همین گزارش دارای تعداد ستونهای متغیری باشد، اغلب این برنامهها ناکارآمد خواهند بود. برای مثال لیست حضور و غیاب دانش آموزان را درنظر بگیرید.
اگر معلمی بخواهد سه روز در هفته را گزارش بگیرد، گزارش نیاز به سه ستون خواهد داشت. اگر 20 روز قبل مد نظر باشد، 20 ستون و همینطور الی آخر.
یا نمونهی دیگری از این دست، گزارش حضور و غیاب پرسنل است. در اینجا بر اساس تعداد باری که شخص کارت میزند، ورود و خروج او محاسبه میشود. این مورد هم تعداد ثابتی نیست. ممکن است یک نفر 8 بار در طول روز کارت بزند، یک نفر فقط دو بار. به علاوه جمع ساعات هم اینجا دیگر عددی نیست و نیاز به فرمول خاصی دارد.
روش حل این نوع مسایل را در PdfReport در مثالهای جدید ذیل میتوانید مشاهده کنید:
1) DynamicCrosstab (یک گزارش Crosstab با تعداد ستون متغیر)
2) WorkedHours (یک گزارش Crosstab با تعداد ستون متغیر به علاوه تابع تجمعی سفارشی محاسبه جمع ساعات اشخاص)
3) ExtraHeadingCells (یک گزارش Crosstab به همراه ردیفهای header اضافی و نحوه تعریف آن)
4) ExpensesCrosstab (یک گزارش Crosstab کلاسیک)
5) PdfA (یک گزارش Crosstab که به صورت استاندارد PdfA تهیه شده است. PdfA حالت خاصی از استاندارد PDF است که برای مستند سازی عموما مورد استفاده قرار میگیرد. رمزنگاری اطلاعات در آن ممنوع است. تصاویر بکارگرفته شده نباید شفاف باشند. قلمهای مورد استفاده حتما باید در فایل مدفون شوند و مواردی از این دست)
برای جستجو در بین Documents ، Task ، Web Pages و .... نیاز است که در ابتدا Index شوند تا بتوان به آنها دسترسی داشت که این کار توسط پردازه Crawler انجام میگیرد . در این پست نحوه تنظیم زمانبندی برای Crawler و از نوع incremental بیان شده است .
برای این منظور با نقش مدیر وارد Central Administration شده و به روش زیر عمل میکنیم :
ابتدا روی Manage Service Application کلیک میکنیم
سپس در صفحه باز شده که سرویسها را در خود نگه میدارد ، روی Search Service Applicarion کلیک میکنیم
در قسمت چپ صفحه روی Content Sources کلیک میکنیم تا صفحه مربوط به منابع جستجو باز شود
در این قسمت روی Local Search Sites که به صورت پیش فرض وجود دارد کلی میکنیم
سپس صفحه را به سمت پایین Scroll میکنیم تا به قسمت Crawl Schedules برسیم
(نکته : در قسمت Start Addresses به تنظیمات آن دست نزنید مگر آنکه از آنها مطمئن باشید . چرا که ممکن است indexing به خوبی کار نکند . معمولا به صورت پیش فرض نام sps3://srv1 وجود دارد که فرض میکند نام سرور شما srv1است . این لینکها به تمام منابع که قرار است index شوند ، اشاره میکند )
همانطور که در بالا مشاهده میکنید ، هیچ زمانبندی تنظیم نشده است و باید یک مورد جدید ایجاد کرد . (اگر قبلا تنظیم کرده باشید ، به جای Create واژه Edit نمایان میشد )
در پنجره باز شده ، تنظیمات را به این صورت (مانند شکل زیر ) انجام دهید :
Daily
Check the Repeat Within the Day
Every : 10 Min
اکنون تغییرات به صور زیر قابل مشاهده است
دلیل اینکه Indexing را به صورت Full تنظیم نکردیم این است که زمانی که شما چند صد گیگابایت اطلاعات دارید ، crawler زمان بسیار زیادی را (چندین روز یا حتی هفته) صرف کامل کردن indexing میکند . در صورتی که شما به indexing به صورت کامل نیاز دارید ، گزینه Start Full Crawl را علامت یزنید
زیرنویسهای فارسی قسمت دوم «Building Windows 8 Metro Apps in C# and XAML» را از اینجا و یا اینجا میتونید دریافت کنید.
لیست سرفصلهای قسمت دوم به شرح زیر است:
Layout 00:46:16
C# Metro applications have access to numerous XAML layout features.
This module describes those services, and shows how to use them to support Windows 8 features such as display orientation, and snap.
Introduction
Layout System
Size Properties
Alignment
Margin
Demo: Margin and Alignment
Padding
Panels
Demo: Canvas
Demo: Grid and Snap
Data-Oriented Panels
ScrollViewer
Metro Layout Conventions
Layout Change Events
Summary
در کل این قسمت هم آنچنان کاری به برنامه نویسی ندارد و به بررسی و معرفی امکانات طرحبندی XAML میپردازد؛ به علاوه یک سری قراردادهای خاص مترو و همچنین نحوهی کنار آمدن با حالت snapping ویژه ویندوز 8.
قسمت سوم مروری دارد بر کنترلهای XAML که حدودا یک هفته دیگر زیرنویسهای آن تمام خواهد شد.
لطفا اگر پس از مشاهده این سری آماده شده، اصلاحی را انجام دادید، اون رو برای اعمال در اینجا ارسال کنید. از این برنامه هم جهت ویرایش فایلها میتوان استفاده کرد.
SFDown
چند روز قبل جهت دریافت فایلهای تنظیم سطح دوم کش NHibernate به سایت سورس فورج مراجعه کردم و ... آه از نهادم برخاست! نه از این جهت که این سایت مدت مدیدی است ما رو تحریم کرده، به این دلیل که سورس فورج حتی با IP غیر ایرانی تونسته بود موقعیت من رو شناسایی کنه. شبیه به همین مورد مدتی است توسط گوگل نیز بکارگرفته میشه. به نظر میرسه این وسط جایی نشتی وجود داره. برای مثال در فایرفاکس امکان گزارش Geo Location به صورت پیش فرض فعال است. هر چند در مستندات آن صراحتا عنوان شده که ... خیر ... ما این اطلاعات را بدون تائید شما بروز نمیدهیم؛ ولی سؤال اینجا است که چطور تونستند از روی IP غیرایرانی، موقعیت من رو تشخیص دهند؟!
غیر فعال کردن این مورد هم ساده است. مطابق تصویر زیر عمل کنید:
به عبارتی در نوار آدرس فایرفاکس عبارت about:config را تایپ کرده، سپس عبارت geo.enabled را یافته و غیرفعال کنید. اکنون نیاز است یکبار مرورگر را بسته و باز کنید.
و ... IP ایی که سوخت ... تا یکی دو هفته عمل نخواهند کرد و بعد از لیست سیاه پاک خواهد شد.
برای رفع این نقیصه و سادهتر کردن دریافت فایلها از سورج فورج، برنامهی کوچکی را تهیه کردهام که با گرفتن آدرس یک پروژه سورس فورج، لینک مستقیم قابل دریافت فایلهای آنرا در اختیار شما قرار میدهد. این برنامه بر اساس Mirror های سورس فورج عمل میکند و به صورت خودکار تمام آنها را بررسی کرده و مورد قابل استفاده را گزارش خواهد داد. یا میتوانید توسط خود برنامه فایل نهایی را دریافت کنید یا امکان کپی کردن یا ذخیره کردن لینکهای مستقیم نهایی یافت شده، در برنامه پیش بینی شده است (جهت دریافت توسط برنامه download manager مورد علاقه شما).
JQuery 1.3 ارائه شد
روز قبل، نگارش رسمی و نهایی jQuery 1.3 ارائه شد و بلافاصله هم فایل مخصوص آن جهت بکارگیری intellisense ویژوال استودیو، توسط علاقمندان تهیه و عرضه گردید.
تازههای این نگارش:
- Sizzle : یک موتور CSS selector قدرتمند (400 درصد بهبود سرعت نسبت به عملکرد کتابخانه قبلی در این مورد)
- بازنگری در نحوه مدیریت رخدادها
- موتور تزریق HTML بسیار سریع (تا 15 برابر سریعتر نسبت به کتابخانه قبلی)
- موتور بسیار سریع موقعیت یابی
- تشخیص نوع مرورگر در آن متوقف شده و بجای آن از تشخیص ویژگیها برای ماندگاری بیشتر این کتابخانه در سالهای آتی استفاده گردیده است. (بجای بررسی userAgent ، از باگهای شناخته شده یا ویژگیهای خاص، جهت تشخیص مرورگر استفاده میشود تا بازه وسیعی از محصولات مشابه را بتوانند پوشش دهند)
- جهت مشاهده و آزمایش بهبود کارآیی این کتابخانه لطفا به این صفحه مراجعه کنید. (لیست کامل این آزمایشات در انتهای صفحه لیست تغییرات، قابل دسترسی است)
مانند همیشه این کتابخانه در دو نگارش فشرده شده (جهت استفاده در سایتها) و نگارش عادی و حجیمتر (جهت برنامه نویسی و دیباگ کردن کدها) ارائه شده است. چون کدها در Google code هاست شده احتمالا دسترسی به آن مشکل خواهد بود. این مجموعه را از این آدرس میتوانید دریافت کنید.
توصیه میشود از سرورهای سریع گوگل بعنوان هاست کتابخانه جیکوئری سایتهای خود استفاده کنید. برای این منظور از آدرس زیر میتوان استفاده کرد:
در کشورهایی که فرهنگ راهاندازی استارتاپها جا افتاده است، سرمایهگذاران در جستجوی ایدههای ناب و تیمهای موفق هستند تا با سرمایهگذاری بر روی آنها در اندک زمانی سرمایهشان را چند برابر کنند. اما معمولا روند این کار برعکس است، به این معنی که معمولا شخصی که ایده دارد در جستجوی سرمایهگذار به دفتر او (که معمولا در طبقات بالایی برجهای بلند هستند) رفته و سعی در ارائه ایدهاش به سرمایهگذار میکند. مشخصا پیدا کردن و گرفتن زمان از یک سرمایهگذار بسیار دشوار است، لذا تنها فرصتی که صاحبان ایده دارند زمانی است که سرمایهگذار وارد ساختمان شده، از آسانسور بالا رفته و وارد دفترش میشود. این زمان فرصتی کوتاه است که صاحب ایده، خودش، ایدهاش، نقاط قوت ایدهاش، طرح تجاری و دلایل سودآوری آن را به سرمایهگذار توضیح دهد. و همه اینها بصورت میانگین مفهومی به عنوان ارائههای آسانسوری (Elevator Presentation / Pitch) را برای همه نهادینه کرده. نهایتا در انتهای این یک دقیقه در صورتی که سرمایهگذار طرح را پذیرفت برای توضیحات بیشتر یک وقت دیگر برای توضیحات تکمیلی به صاحب ایده میدهد که این وقت مجدد معمولا فقط پنج دقیقه است. نهایتا تعداد این جلسات و زمان آنها بیشتر شده تا سرمایهگذار بپذیرد که روی ایده سرمایهگذاری کند.
اما هیچکدام از اتفاقات بالا، در ایران قابل لمس نیست چراکه ما هنوز در ابتدای راه هستیم و مفهوم استارتاپها تازه در حال شکلگیری است، سرمایهگذاران هنوز بطور جدی به این طرحها نگاه نمیکنند. اما اگر بخواهیم همین روند بالا را بومی کنیم. باید به این موارد دقت کنیم.
- زمان لازم برای ارائه اولیه (ارائه آسانسوری) در ایران چقدر باید باشد؟
- زمان ارائه دوم چقدر باید باشد؟
- چه نکاتی در ارائه اول و دوم باید گنجانده شود؟
دفتر سرمایهگذاران ما معمولا در طبقات بالایی یک برج نیست. سرمایهگذاران ما معمولا یک ساختمان جداگانه برای خودشان دارند که در آن مستقر هستند حالا ممکن است این ساختمان چند طبقه باشد اما کل این مکان متعلق به شرکتی است که او اداره میکند و او در یک طبقه خاص مستقر است. فرهنگ ما به ما اجازه نمیدهد تا بدون وقت قبلی و با سرمایهگذار (که در اکثر مواقع شخص اصلی شرکت است) وارد شرکت شویم. وقتهای ارائه معمولا بصورت رابطهای و در صورتی که شخصی یک صاحب ایده را به سرمایهگذار معرفی کرده باشد تعیین خواهند شد. که متاسفانه زمان این جلسات به نسبت جدی بودن سرمایهگذار در سرمایهگذاری و توسط خود او تعیین میشود و شخص ارائه دهنده از قبل هیچ اطلاعی از اینکه چه زمانی را برای ارائه ایدهاش در اختیار دارد، ندارد.
لذا با توجه به این موارد، ما در ایران جلسه اول و دوم را، معمولا یکی میکنیم. و متاسفانه بجای تاکید بر روی ایده و استارتاپ، در جلسه اول معمولا بیشتر بر روی خود روابط تاکید میشود تا یک اطمینان در هر دو طرف ایجاد شود. صاحبان ایده همیشه از این میترسند که سرمایهگذار پس از شنیدن ایده بدون خود آنها اقدام به پیادهسازی آن کند، لذا در جلسات اول صرفا هر دو طرف اقدام به براندازی همدیگر کرده و با جملات نامفهوم از ایده اصلی سعی در به تعویق انداختن مباحث فنی کرده و صرفا سعی کنند از طرف مقابل مطمئن شوند.
اما آیا واقعا ما به ارائههای آسانسوری نیازی نداریم؟ جواب این سوال منفی است. چراکه گرچه با توجه به ساختار سرمایهگذاری در کشور ما نمیتوانیم اقدام به برپایی ارائه آسانسوری با یک سرمایهگذار کنیم، اما اگر نتوانیم تمام مواردی که در مفهوم ارائه اسانسوری نهفته است را، در یک دقیقه به هر شخصی ارائه کنیم نشاندهنده این است که طرح ما واقعا برای سرمایهگذاری مناسب نیست. بهتر است برای خودتان و دوستانتان و اعضای تیمتان اقدام به برپایی این ارائهها کنید تا نقاط مبهم برای خود شما مشخص شود. شاید واقعا باید بپذیرید که استارتاپ شما محکوم به شکست است.
نکته دیگری که در بومیسازی باید توجه داشت دقیقا همین مورد است. که همه چیز را نباید و نمیتوان بومی کرد. ساختارهای کشور ما و آنچه ما با آنها درگیر هستیم تعیین کننده آن است که ایا باید چیزی را بومی کرد یا خیر. نظر شخص من این است که با توجه به فرهنگ کاریمان در ایران، در واقعیت، ما هیچگاه نخواهیم توانست به سمت ارائههای آسانسوری واقعی حرکت کنیم. لذا باید آنها را برای خودمان تمرین کنیم تا خودمان از شکست یا احتما پیروزی طرحمان اطمینان کسب کنیم.
نظر شما چیست؟
قابلیتی است در سیستم عاملهای مبتنی بر یونیکس که وظیفه اجرای وظایف در زمانبندیهای خاص را بر عهده دارد، و به کاربران این امکان را میدهد که وظایف را زمانبندی کرده و در دورههای مشخص اجرا کنند.
اطلاعات بیشتر
در حقیقت رشته هایی هستند که از هفت قسمت تشکیل شده اند که هر قسمت مشخص کننده اعمال مربوط به زمانبندی میباشد مثلا انجام اعمالی :
- اجرای وظیفه ایی خاص هر روز ساعت 8 صبح
- اجرای وظیفه ایی خاص هر جمعه آخر ماه
- و...
این هفت قسمت توسط فاصله از همدیگر جدا میشوند :
عبارات cron خیلی قدرتمتد هستند و در عین حال مقداری پیچیده، هدف از ارائه این مطلب آشنایی با این نوع از عبارات و استفاده از آنها در Quartz.NET میباشد.
قبل از هر چیز ایتدا باید با فرمت این عبارات آشنا شویم :
پس عبارات cron در سادهترین حالت میتوانند به صورت :
* * * * ? *
0/5 14,18,3-39,52 * ? JAN,MAR,SEP MON-FRI 2002-2010
- * به معنی "تمام حالات" میباشد به عنوان مثال در فیلد "دقیقه" به معنی هر دقیقه میباشد.
- ؟ به معنی "نگذاشتن مقداری خاص" میباشد، به عنوان مثال میخواهیم کار ما در یک روز خاص از ماه اتفاق بیفتد اما مهم نیست چه روزی از هفته باشد.
- - جهت تعیین یک رنج خاص (محدوده ایی خاص) به عنوان مثال "12-10" در فیلد ساعت به معنی "ساعت هایی 10، 11 و 12" میباشد.
- , جهت تعیین مقادیر اضافی برای مثال "MON,WED,FRI" در فیلد day-of-week به معنای "روزههای دوشنبه، چهارشنبه و جمعه" میباشد.
- / جهت اعمالی increment(کاهشی) استفاده میشود به طور مثال "0/15" در فیلد seconds به معنای "ثانیههای 0 ، 15 ، 30 ، 45" میباشد، "5/15" نیز به معنای "ثانیههای 5 ، 20 ، 35 ، 50" میباشد، به صورت سادهتر به طور مثال اگر مقدار "0/15" را در فیلد "minutes" قرار دهیم به معنی "هر 15 دقیقه است و از دقیقه 0 آغاز میشود" با مثلا "3/20"به معنی "هر 20 دقیقه میباشد و از دقیقه سوم آغاز میشود".
- L "آخرین (Last)" همانطور که از شکل بالا مشخص است تنها در فیلدهایی Day of month و Day of week قابل استفاده میباشد به طور مثال اگر در فیلد Day of month استفاده شود به معنای "آخرین روز ماه" میباشد.
- W "روز هفته(Weekday)"
- # جهت تعیین Xامین روز ماه به طور مثال مقدار "3#6" به "معنای سومین جمعه ماه" میباشد، در واقع مقدار 6 روز و مقدار 3# سومین در ماه میباشد.
تعدای مثال :
تولید عبارات cron گاهی اوقات به نظر پیچیده میآید(به نظر من که اینطور نیست!) اما برای تولید آسان این عبارات میتوانید از این سرویس آنلاین استفاده نمائید.
حال یک مثال در این رابطه :
می خواهیم یک کار را هر شب ساعت 11 شب برای انجام زمانبندی کنیم:
public class HelloSchedule : ISchedule { public void Run() { IJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity("job1") .Build(); ITrigger trigger = TriggerBuilder.Create() .ForJob(job) .WithIdentity("trigger1") .StartNow() .WithCronSchedule("0 0 23 ? * MON-FRI *") .Build(); ISchedulerFactory sf = new StdSchedulerFactory(); IScheduler sc = sf.GetScheduler(); sc.ScheduleJob(job, trigger); sc.Start(); }
public class Product { public int ProductId { get; set; } public string ProductName { get; set; } public long ProductPrice { get; set; } }
public class ProductMetadata : MetadataClass<Product> { public ProductMetadata () { this.Validation(x => x.ProductName).Required("عنوان محصول وارد نشده است"); this.Validation(x => x.ProductPrice).Range(1000,100000,"قیمت محصول باید بین هزار تومان تا صدهزار تومان باشد"); } }
public class FluentMetadataConfiguration : IFluentMetadataConfiguration { public void OnTypeCreation(MetadataContainer metadataContainer) { metadataContainer.Add(new ProductMetadata()); } }
[EnableClientAccess()] [FluentMetadata(typeof(FluentMetadataConfiguration))] public class FluentMetadataTestDomainService : DomainService { ... }
خواندنیهای 2 مرداد
اس کیوال سرور
الگوهای طراحی برنامه نویسی شیءگرا
امنیت
توسعه وب
دات نت فریم ورک
دبلیو اف
سی و مشتقات
کتابهای رایگان
لینوکس
متفرقه
محیطهای مجتمع توسعه
مسایل انسانی، اجتماعی و مدیریتی برنامه نویسی
ویندوز