适配器的自定义配置架构示例
本节提供以下示例,介绍如何为适配器自定义配置架构:
示例 1 显示了使用 baf:designer 和 baf:description 扩展表示适配器属性页的完整自定义 XSD 架构文件。
示例 2 还使用 baf:designer 和 baf:description 扩展来演示如何为 BatchSize 属性创建自定义属性值窗口,该窗口仅接受介于 1 和 99 之间的值(包括 1 到 99)。
示例 3 演示如何将 baf:Password 限制为 8 个字符。 默认情况下,它允许 22 个字符。
示例 4 演示如何对属性值实现模式匹配约束,因为 XSD 模式不受支持。
示例 1
该示例说明了一个完整的自定义 XSD 架构。 它使用 baf:designer 和 baf:description 扩展表示一个适配器属性页。
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
elementFormDefault="qualified" xmlns="http://tempuri.org/XMLSchema.xsd"
xmlns:baf="BiztalkAdapterFramework.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:import namespace="BiztalkAdapterFramework.xsd" />
<xs:element name="Send">
<xs:complexType>
<xs:sequence>
<xs:element name="directory" type="xs:string" />
<xs:annotation>
<xs:appinfo>
<baf:designer>
<baf:description>Enter the directory that will receive sent files..
</baf:description>
</baf:designer>
</xs:appinfo>
</xs:annotation>
</xs:element>
<xs:element name="fileName" type="" />
<xs:element name="sendBatchSize" type="xs:int" />
<xs:element name="fileCopyMode" type="CopyMode" />
<xs:element name="uri" type="xs:string" >
<xs:annotation>
<xs:appinfo>
<baf:designer>
<baf:browsable show="false" />
</baf:designer>
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="CopyMode">
<xs:restriction base="xs:string">
<xs:enumeration value="Append">
<xs:annotation>
<xs:documentation>= 0</xs:documentation>
</xs:annotation>
<xs:enumeration value="Create">
<xs:annotation>
<xs:documentation>= 1</xs:documentation>
</xs:annotation>
<xs:enumeration value="CreateNew">
<xs:annotation>
<xs:documentation>= 2</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:schema>
示例 2
此示例使用 baf:designer 和 baf:description 扩展显示如何为 BatchSize 属性创建自定义属性值窗口,该窗口只接受介于 1 和 99 之间的值(包括 1 到 99)。
<xs:element name="BatchSize">
<xs:simpleType>
<xs:annotation>
<xs:appinfo>
<baf:designer>
<baf:displayname>Batch Size</baf:displayname>
<baf:description>Enter the batch size (1-99)</baf:description>
</baf:designer>
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:int">
<xs:minInclusive value="1" />
<xs:maxInclusive value="99" />
</xs:restriction>
</xs:simpleType>
</xs:element>
示例 3
该示例说明如何将 baf:Password 限制为 8 个字符。 默认情况下,它允许 22 个字符。
<xs:element name="AdapterPassword">
<xs:simpleType>
<xs:annotation>
<xs:appinfo>
<baf:designer>
<baf:displayname>Adapter Password</baf:displayname>
<baf:description>Enter the password (up to 8 characters)</baf:description>
<baf:editor assembly="%BTSROOT%\\Developer Tools\\Microsoft.BizTalk.Adapter.Framework.dll">Microsoft.BizTalk.Adapter.Framework.ComponentModel.PasswordUITypeEditor</baf:editor>
<baf:converter assembly="%BTSROOT%\\Developer Tools\\Microsoft.BizTalk.Adapter.Framework.dll">Microsoft.BizTalk.Adapter.Framework.ComponentModel.PasswordTypeConverter</baf:converter>
</baf:designer>
</xs:appinfo>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:maxLength value="8" />
</xs:restriction>
</xs:simpleType>
</xs:element>
示例 4
此示例说明如何对属性值实现模式匹配约束,因为不支持 XSD 模式。
ClientIdentifier 等字段始终由三个字符组成的数字字符串。 属性值 10 无效,而 010 有效。 以下配置架构片段定义 ClientIdentifier 属性。 在适配器程序集中实现的 ClientIdentifierConverter 类实现模式匹配。 在这个例子中,自定义类型转换器将值限制为恰好 3 位的字符串(000 到 999)。 在配置架构中,请确保 baf:converter 节点正确设置了程序集和类型全名。 如果用户尝试输入无效值,在属性页中发生验证错误时,将会弹出一个异常消息。
您可以在适配器属性页配置架构中使用以下代码。
<xs:element name="ClientIdentifier" type="xs:string">
<xs:annotation>
<xs:appinfo>
<baf:designer>
<baf:displayname>Adapter Client</baf:displayname>
<baf:description>Enter the Adapter Client (3 digit string)</baf:description>
<baf:converter assembly="%BTSROOT%\\Developer Tools\\Microsoft.BizTalk.TestAdapter.dll">Microsoft.BizTalk.TestAdapter.ClientIdentifierConverter</baf:converter>
</baf:designer>
</xs:appinfo>
</xs:annotation>
</xs:element>
可在适配器程序集中放置以下代码。
using System;
using System.ComponentModel;
using System.Globalization;
using System.Text.RegularExpressions;
namespace Microsoft.BizTalk.TestAdapter
{
/// <summary>
/// Summary description for ClientIdentifierConverter.
/// </summary>
public class ClientIdentifierConverter : System.ComponentModel.StringConverter
{
private void Validate(string value)
{
Regex regex = new Regex(@"^\d{3}$"); // ^=begin, \d=digit, {3}=exactly 3 occurrences, $=end
Match match = regex.Match((string)value);
if (!match.Success)
{
throw new ApplicationException("Value does not match pattern \"" + regex.ToString() + "\".");
}
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
if (value is string)
{
this.Validate((string)value);
}
return base.ConvertFrom(context, culture, value);
}
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
{
if (typeof(string) == destinationType && value is string)
{
this.Validate((string)value);
}
return base.ConvertTo(context, culture, value, destinationType);
}
}
}