public abstract class _DotNetScriptTemplate
{
protected ZeusTemplateContext context;
protected ZeusInput input;
protected ZeusOutput output;
protected Hashtable objects;
public _DotNetScriptTemplate(ZeusTemplateContext context)
{
this.input = context.Input;
this.objects = context.Objects;
this.output = context.Output;
}
public abstract void Render();
}
public abstract class DotNetScriptTemplate : _DotNetScriptTemplate
{
protected Zeus.UserInterface.GuiController ui;
protected MyMeta.dbRoot MyMeta;
protected Dnp.Utils.Utils DnpUtils;
public DotNetScriptTemplate(IZeusContext context) : base(context)
{
this.ui = context.Objects["ui"] as Zeus.UserInterface.GuiController;
this.MyMeta = context.Objects["MyMeta"] as MyMeta.dbRoot;
this.DnpUtils = context.Objects["DnpUtils"] as Dnp.Utils.Utils;
}
}
上面兩個類的可繼承變量可以說是整個模板編寫的基礎。以下是重要API的介紹:
MyMeta Namespace:
dbRoot類屬性 public IDatabases Databases{get;}
//取得數據庫集合
dbRoot類屬性 public IDatabase DefaultDatabase{get;}
//缺省數據庫,也就是在連接字符串中定義的數據庫
IDatabase接口,數據庫的抽象。其中重要的屬性有Name(數據庫名),Alias(別名),Tables(數據庫內表集合),Views(數據庫內視圖集合)
ITable接口,數據表的抽象。重要屬性有Name(表名),Alias(別名),Columns(數據列集合),ForeignKeys(外鍵集合),PrimaryKeys(主鍵集合),Indexes(索引集合),Database(所在數據庫)
IColumn接口,數據列抽象。列的屬性字段都比較重要
Zeus Namespace:(注Zeus是在PluginInterfaces.dll這個程序集裏)
ZenusInput類,是一個類似hashtable的數據窗口,主要用於獲取用戶界面輸入。如獲取控件TextBox的值input["textBoxID"],這裏的input定義在_DotNetScriptTemplate類中protected ZeusInput input;
同時還存儲了一些應用程序變量如input["defaultOutputPath"]缺省輸出路徑,其他請請看API。
ZeusOutput類,是一個輸出緩存區,所有的不在<%%>內的字符,write()方法都是輸出到這個緩存區。重要方法:
write(String str) 輸出字符串,writeln(String str)輸出字符串並換行;
autoTab(String str) 輸出字符串前面自動加上製表符tab,該tab個數由屬性tabLevel決定。autoTabLn(String str) ;
save(String path,Object action) 保存緩存區裏的內容到文件,參數action可選值有 "d"如果文件不存在則保存,“o”保存文件如果已存在則覆蓋
,“b”保存文件如果已存在則備份後再覆蓋,“a”保存文件如果已存在則追加到文件;
saveEnc(String path,Object action,Object encoding) 同上方法,只是多加了個編碼參數;
append(String path) 相當於save(String path,"a");
clear() 清除緩存區裏的內容;
ZeusOutpu類只有兩個屬性,tabLevel表示當前製表符的個數, output.tabLevel++即製表符加一,text設置或者取得緩存區的字符串。
Zeus.UserInterface Namespace:
該命令空間內封裝了基礎的winform控件,如GuiButton,GuiCheckBox,GuiTextBox等。這裏不一一介紹了。
GuiControlller類,定義了一系統添加控件的方法,如AddButton,AddTextBox等。
瞭解了這些API,再去看上面兩個類代碼,能更深入的瞭解模板的編寫。
我們再來看看MyGeneration指令吧
<%#FILE codeInclude.cs%> 包含指令;
<%#REFERENCE MyCustomAssembly.dll,System.Windows.Forms.dll%> 引用指令,就是要引用的程序集dll文件,dll文件可以是與Mygeneration.exe在一個目錄或者放在GAC裏;
<%#NAMESPACE System.IO,System.Text%> 引入命名空間,也就是C#裏的using了;
<%#DEBUG%> 調試指令,放在模板的第一行而且必須是<%#DEBUG%><%
這樣的不能有空格,再在Render方法裏調用System.Diagnostics.Debugger.Launch()