现在的位置: 首页 > 综合 > 正文

最新版CodeSmith3.2(.net2.0)教程之六:SQL2005数据模板(下)

2013年09月12日 ⁄ 综合 ⁄ 共 2850字 ⁄ 字号 评论关闭
我们回顾一下上一节的内容:我们对我们要生成的数据模板进行了分析,并生成了静态的部分,接下来我们就来对动态部分进行设置。

1.建立枚举型属性


    有时候我们需要用户提供的属性是特定的几种,比如endpoint 的状态只有STARTED, STOPPED, DISABLED三种,而除了这三种以外的都会引起T-SQL错误。如果这些信息都让用户手动输入的话又有可能输入错误的危险,向用户提供一选择菜单让他直接选择里面已经定义好的值就更为保险。而这就是枚举型属性。

    为了建立枚举型属性,你需要定义供选择的值。首先点击CodeSmith Studio上方的菜单,选择Edit > Insert Content > Script Block.创建一种新的类型:

1<script runat="template">
2Public Enum StateEnum
3    STARTED
4    STOPPED
5    DISABLED
6End Enum</script>

现在你就可以使用CodeSmith 直接定义一种属性使用这种新的类型了:

<%@ Property Name="InitialState" Type="StateEnum" Category="Options" Default="STARTED" Description="The initial state of the Web service." %>

另外你还需要添加一段代码。因为在后台,.net会把枚举型变量作为整数型来处理,而你准备插入的是字符串。为了完成这个转换,你需要在代码段中添加辅助函数:

 1Public Function GetState (ByVal State As StateEnum) As String
 2    Select Case State
 3        Case StateEnum.STARTED
 4            GetState = "STARTED"
 5        Case StateEnum.STOPPED
 6            GetState = "STOPPED"
 7        Case StateEnum.DISABLED
 8            GetState = "DISABLED"
 9    End Select
10End Function
11

做完这个以后,就可以实现在用户对InitialState 属性进行选择是实现字符串相应,通过在模板中插入 <%= GetState(InitialState) %>实现插入相应选择字符串。接下来你自己完成authentication和port属性的辅助函数,下面是我们的完整模板:

 1<%@ CodeTemplate Language="VB" TargetLanguage="T-SQL" Description="Create an HTTP Endpoint." %>
 2<%@ Property Name="InitialState" Type="StateEnum" Category="Options" Default="STARTED" Description="The initial state of the Web service." %>
 3<%@ Property Name="Authentication" Type="AuthenticationEnum" Category="Options" Default="INTEGRATED" Description="Authentication method." %>
 4<%@ Property Name="Port" Type="PortsEnum" Category="Options" Default="CLEAR" Description="Port to use." %>
 5CREATE PROC dbo.PersonAddressTypeProc
 6AS
 7    SELECT 
 8    AddressTypeID, 
 9    Name, 
10    rowguid, 
11    ModifiedDate
12    FROM
13    Person.AddressType
14GO
15CREATE ENDPOINT GetAddressType
16    STATE = <%= GetState(InitialState) %>
17AS HTTP
18(
19    PATH = '/AddressType',
20    AUTHENTICATION = (<%= GetAuthentication(Authentication) %>),
21    PORTS = (<%= GetPort(Port) %>),
22    SITE = 'localhost'
23)
24FOR SOAP
25(
26    WEBMETHOD 'AddressTypeList'
27        (NAME='AdventureWorks.dbo.PersonAddressTypeProc'),
28    BATCHES = DISABLED,
29    WSDL = DEFAULT,
30    DATABASE = 'AdventureWorks',
31    NAMESPACE = 'http://AdventureWorks/AddressType'
32)
33GO
34<script runat="template">
35Public Enum StateEnum
36    STARTED
37    STOPPED
38    DISABLED
39End Enum 
40
41Public Enum AuthenticationEnum
42    BASIC
43    DIGEST
44    NTLM
45    KERBEROS
46    INTEGRATED
47End Enum 
48
49Public Enum PortsEnum
50    CLEAR
51    SSL
52End Enum 
53
54Public Function GetState (ByVal State As StateEnum) As String
55    Select Case State
56        Case StateEnum.STARTED
57            GetState = "STARTED"
58        Case StateEnum.STOPPED
59            GetState = "STOPPED"
60        Case StateEnum.DISABLED
61            GetState = "DISABLED"
62    End Select
63End Function 
64

抱歉!评论已关闭.