我们回顾一下上一节的内容:我们对我们要生成的数据模板进行了分析,并生成了静态的部分,接下来我们就来对动态部分进行设置。
有时候我们需要用户提供的属性是特定的几种,比如endpoint 的状态只有STARTED, STOPPED, DISABLED三种,而除了这三种以外的都会引起T-SQL错误。如果这些信息都让用户手动输入的话又有可能输入错误的危险,向用户提供一选择菜单让他直接选择里面已经定义好的值就更为保险。而这就是枚举型属性。
为了建立枚举型属性,你需要定义供选择的值。首先点击CodeSmith Studio上方的菜单,选择Edit > Insert Content > Script Block.创建一种新的类型:
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>
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
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
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