मेरी छात्र गतिविधि की प्रकृति से, मुझे अक्सर विभिन्न प्रयोगशाला और शब्द पत्र लिखने पड़ते हैं। इन कार्यों का एक अभिन्न अंग (जैसा कि 80% व्यापार प्रोग्रामिंग कार्यों में है) डेटाबेस में पाए जाने वाले तत्वों या लंबी और जटिल ऑपरेशन पर एक रिपोर्ट को संकलित करने के लिए कोड है। .NET फ्रेमवर्क के भीतर डेस्कटॉप प्रोग्रामिंग में, इस तरह की समस्याओं को हल करने के विभिन्न तरीके हैं:
- पुराने स्कूल: किसी ने भी आरटीएफ प्रारूप को रद्द नहीं किया है, लेकिन मैंने व्यक्तिगत रूप से अलग-अलग रंगों और लिंक के फोंट के साथ रंगीन पाठ की तुलना में अधिक कठिन कुछ भी बनाने का प्रबंधन नहीं किया है। विधि प्रभावी है, लेकिन मानक समझने में सबसे आसान नहीं है, यह नवीनतम संस्करण को देखने के लिए भी डरावना है
- सिल्वरलाइट / डब्ल्यूपीएफ के लिए - ऐसा करें- अपने आप को फ़्लोडोमेंसमेंट गठन। ऑब्जेक्ट मॉडल निश्चित रूप से पुराने प्रारूप को मैन्युअल रूप से बनाने की तुलना में अधिक सुविधाजनक है, लेकिन विकल्प केवल बोल्ड के लिए भी है
- क्रिस्टल रिपोर्ट जैसे तीसरे पक्ष के समाधान , शायद रिपोर्ट बनाने के लिए एक बहुत शक्तिशाली उपकरण है, लेकिन यह हमेशा आवश्यक नहीं है, इसके अलावा अतिरिक्त सॉफ्टवेयर उत्पादों के एक जोड़े को खींचना हमेशा संभव नहीं होता है 1
- Microsoft Office इंटरॉप का उपयोग करना। नहीं, यह एक मजाक है। नियंत्रित वातावरण में मेमोरी के साथ मैनुअल काम केवल खुशी का तूफान का कारण बनता है। काम के इस सिद्धांत को स्वीकार करने से पहले एक नौसिखिया प्रोग्रामर एक से अधिक पैकेज कॉफी पीएगा।
- HTML का गठन। हमारी खुशी के लिए, मानक आपको मध्यम प्रारूपण के दस्तावेज़ बनाने की अनुमति देता है, सीएसएस का उपयोग करके आप मन में ला सकते हैं। विपक्ष - सभी आवश्यकताओं के लिए एक दस्तावेज तैयार करना बेहद मुश्किल है। लेकिन अगर जरूरत है तो यही है। पेशेवरों: मानक की सादगी और सार्वभौमिक संक्रमण "बादलों और ब्राउज़रों के लिए" HTML के विकास को प्रोत्साहित करते हैं।
मैं बाद की बात करूंगा।
सबसे सरल और स्पष्ट विकल्प HTML स्ट्रिंग को मैन्युअल रूप से जनरेट करना है। जो लोग अभी मंच से परिचित हो रहे हैं, वे तुरंत स्ट्रिंग वस्तुओं को प्राप्त करना शुरू कर देंगे, और जो लोग दस्तावेज पढ़ते हैं, वे स्ट्रिंगबर्ल क्लास पर ध्यान देंगे। किसी भी मामले में, String.Format हमेशा रिपोर्ट उत्पन्न करने का सबसे सुविधाजनक तरीका नहीं है। लेकिन ASP.NET MVC का उपयोग करने वाले प्लेटफ़ॉर्म पर सहयोगियों को
रेज़र प्रस्तुति इंजन के लिए पर्याप्त नहीं मिल सकता है। और यहां यह सवाल उठता है: अपने स्वयं के प्रयोजनों के लिए ASP.NET रेजर की शक्ति का उपयोग क्यों नहीं किया जाता है?
सबसे पहले, आपको
System.Web.Razor विधानसभा को कनेक्ट करना होगा। इसकी आपूर्ति ASP.NET MVC द्वारा की जाती है, इसलिए यदि लक्ष्य कंप्यूटर में यह स्थापित नहीं है, तो आपको आवश्यक dll की स्थानीय प्रतिलिपि का ध्यान रखना चाहिए।
उस बेस क्लास को डिक्लेयर करें, जहां से हमारा व्यू विरासत में मिला होगा।
public abstract class TemplateBase { public StringBuilder Buffer { get; set; } public StringWriter Writer { get; set; } public TemplateBase() { Buffer = new StringBuilder(); Writer = new StringWriter(Buffer); } public abstract void Execute();
सबसे पहले, आपको इंजन को इनिशियलाइज़ करना होगा।
private RazorTemplateEngine SetupRazorEngine() {
जैसा कि आप जानते हैं, .NET मक्खी पर संकलन कोड का समर्थन करता है। इस सुविधा का उपयोग रेजर द्वारा किया जाता है। इसलिए, हमारे मामले में, हमें फ़ाइल को टेम्पलेट के साथ पढ़ना होगा और इसे अलग असेंबली में सहेजना होगा।
यदि सब कुछ ठीक रहा, तो उपयोग सरल है:
Assembly asm = Assembly.LoadFrom(outputAssemblyName); if (asm == null) { MessageBox.Show(" "); } else { Type typ = asm.GetType("RazorOutput.Template"); if (typ == null) { MessageBox.Show(" RazorOutput.Template {0}", asm.FullName); } else { TemplateBase newTemplate = Activator.CreateInstance(typ) as TemplateBase; if (newTemplate == null) { MessageBox.Show(" RazorOutput.Template TemplateBase"); } else {
बस इतना ही। वह सब बनी हुई है, जो प्रेजेंटेशन डेटा को निर्दिष्ट करने का प्रश्न है - टेम्प्लेटबेस के माध्यम से, या फॉर्म के रेजर सिंटैक्स के माध्यम से
@functions { public string CustomerName { get; set; } public string ResetLink { get; set; } }
बाद के मामले में, आपको टेम्पलेट्स की गतिशील पीढ़ी को छोड़ना होगा, लेकिन इस डेटा तक पहुंचना बहुत आसान है।
इसलिए, सरल आंदोलनों की मदद से, हमने एमएस से एक शक्तिशाली और सुविधाजनक टूल का उपयोग करके "एक और" टेम्पलेट इंजन लिखने के प्रलोभन से बचा लिया।
1 यह माना जाता है कि चूंकि आप .NET फ्रेमवर्क के तहत लिख रहे हैं, इसलिए इसे क्लाइंट पर इंस्टॉल किया गया है। लेकिन कार्यालय, क्रिस्टल रिपोर्ट, एसक्यूएल सर्वर, विजुअल स्टूडियो - जरूरी नहीं है