Bir yazılım firmasının müşterileri için yapabileceği en kayda değer işlerden bir tanesi uygulamalarına scripting desteği eklemesi ve onlara sabit bir uygulamadan öte, uyarlanabilir bir altyapı sunmasıdır. Scripting desteği, müşterinin uygulamanın sınırlarını zorlamasını ve uygulamaya değer katmasını sağlar. Hatta yazılımsal buglarda ufak script kodları tampon görevi görür. Gerçek çözüm ve bu çözümle derlenen yeni versiyon çıkıncaya kadar müşterinin hayatına devam etmesini sağlar.
.NET uygulamalarında scripting desteği sağlayabilmek amacıyla çeşitli yöntemlere başvurmak mümkündür. Kullanılabilecek bu yöntemler aşağıdaki gibidir; - “On the fly code compilation” yöntemi(Reflection.Emit); CodeCompiler kullanılarak çalışma-zamanında .NET kodu yaratılır, derlenir ve çalıştırılır. En yaygın yöntem olarak gösterilse de kullanımı, değiştirilmesi ve debug edilmesi en zor olan yöntemdir.
- “Micsosoft.VisualBasic.Vsa” ad alanı içerisindeki sınıfların ve kütüphanelerin kullanılması; Kolaylığı itibari ile tercih edilebilecek bir yöntemdir. Fakat Vsa ad alanı içerisindeki kütüphanenin kendine ait bir nesne tasarım modeli ve kullanım kuralı olduğu için anlaşılması zor olabilir.
- “Microsoft ScriptControl” COM sınıfının kullanılması; En basit yöntemdir. Yazımızda bu yöntem üzerinde odaklanacağız. Yapısı basit fakat işlevselliği yüksek olan Microsoft Scripting COM sınıfının kullanımını temel alır. COM teknolojisi ile yazılan bu sınıfın kullanılabilmesi için ilk olarak .NET IDE’si “Add Reference” kısmından “COM” tabına gelinmeli ve bileşen seçilmelidir.
MSScriptControl COM Sınıfının Kullanımı
Uygulamaya COM referansı eklendikten sonra, ilk olarak MSScriptControl.ScriptControlClass sınıfı kullanılarak yeni bir scripting nesnesi yaratılır. Sonrasında script dili seçilir. Tercihe göre vbscript veya javascript dili seçilebilir. Dinamik script bloğu içerisinde eğer bir sınıf kullanılmak isteniyorsa ilgili sınıf yaratılır ve yaratılan nesne değişkeni script kontekstine eklenir. Daha sonra çalıştırılacak sciprt kod bloğu eklenir ve son olarak kod bloğu çalıştırılır.
Uygulamaya COM referansı eklendikten sonra, ilk olarak MSScriptControl.ScriptControlClass sınıfı kullanılarak yeni bir scripting nesnesi yaratılır. Sonrasında script dili seçilir. Tercihe göre vbscript veya javascript dili seçilebilir. Dinamik script bloğu içerisinde eğer bir sınıf kullanılmak isteniyorsa ilgili sınıf yaratılır ve yaratılan nesne değişkeni script kontekstine eklenir. Daha sonra çalıştırılacak sciprt kod bloğu eklenir ve son olarak kod bloğu çalıştırılır.
Dim objScript As New MSScriptControl.ScriptControlClass objScript.Language = "vbscript" objScript.AddObject("objCls", objCls) objScript.AddCode(txtCode.Text) objScript.Run("DoJob", "Param" ) |
Örnek Uygulama
Uygulama ASP.NET 2.0 ile geliştirilmiştir. Uygualamada server-side yaratılan 2 tane nesnenin DoJob isimli basit bir vbscipt fonksiyonun kontekstine operation ve msg isimleri ile geçirilip, propertylerinin ve methodlarının kullanım şekli gösterilmiştir. Buradaki uygulamanın ASP.NET tabanlı olması önemli değildir, aynı şekilde windows uygulaması da olabilir.
Uygulama ASP.NET 2.0 ile geliştirilmiştir. Uygualamada server-side yaratılan 2 tane nesnenin DoJob isimli basit bir vbscipt fonksiyonun kontekstine operation ve msg isimleri ile geçirilip, propertylerinin ve methodlarının kullanım şekli gösterilmiştir. Buradaki uygulamanın ASP.NET tabanlı olması önemli değildir, aynı şekilde windows uygulaması da olabilir.
Public Class OperationReturnMessage Public Type As String Public Desc As String End Class Public Class Operation Public Sub New() End Sub Public Prop1 As Integer Public Prop2 As Integer Protected Friend PropRes As Integer Public Sub DoOp() If Prop1 = 0 Or Prop2 = 0 Then Throw New Exception Else PropRes = Prop1 + Prop2 End If End Sub End Class |
Tablo1. Operation ve OperationReturnMessage sınıfları |
Tablo 1’de uygulamada kullanılan Operation ve OperationReturnMessage sınıfları ve onlara ait sınıf üyeleri gösterilmiştir. Operation sınıfındaki DoOp fonksiyonu, bir nevi toplama işlevi görür. Prop1 ve Prop2’nin değerlerini kontrol ederek, toplar ve bu değeri PropRes’e atar.
Function DoJob(param) if operation.Prop1=0 then operation.Prop1 = 1 end if operation.DoOp() msg.Type = "S" msg.Desc = "Operation Success" DoJob = msg.Type End Function |
Tablo2. vbscript ile yazılan DoJob fonksiyonu |
…. Dim objMsg As New OperationReturnMessage Dim objOp As Operation = OperationOnTheForm() Dim result As Object objScript.AddObject("operation", objOp) objScript.AddObject("msg", objMsg) objScript.AddCode(txtCode.Text) result = objScript.Run("DoJob", "param") …. |
Tablo3. operation ve msg nesnelerinin script kontekstine geçirilmesi |
Deniz KILINÇ
Yorumlar
Yorum Gönder