自定义目录同步

 

上一次修改主题: 2006-09-14

Exchange - Lotus Notes 连接器提供一个组件,用于将一个或多个 Domino 目录与 Active Directory® 目录服务同步。同步是双向的,并且可以包括自定义收件人和邮箱。可以同步通讯组列表(Notes“组”)的名称和地址;但是,在卷影条目中不使用 DL 或组的成员身份,并且所有的邮件路由必须在维护通讯组列表或组的系统上进行。

传递时,产品会同步这两个目录支持的许多属性中有用的一部分属性。本主题说明如何同步属性,以及如何自定义过程以满足本地要求。通过自定义,可以完成下列任意一项任务:

  • 通过添加或删除属性,更改 Domino 和 Exchange Server 2003 之间同步的属性列表。
  • 更改属性在系统间映射的方式。

同步过程使用四个控制文件,这些文件位于连接器根目录的两个子目录中。Notes Connector 连接器根目录的 UNC 为:

   \\<servername>\connect$\exchconn

note注意:
如果使用记事本或其他文本编辑器编辑这些文件,请确保保存原始文件的备份副本。此外,进行更改时不要使用 Tab 键。所有空白字符必须使用空格键输入。并且,在编辑这些文件之前,请确保目录同步未处于活动状态(例如,关闭 Notes 连接器)。如果向已同步的架构添加属性,或更改现有属性的任何映射规则,则很可能需要在一个或同时在两个目录中完全重新加载目录。

架构定义文件确定同步的本机目录架构的子集。文件中不为空或注释的每一行定义一个属性。第一列是映射规则中使用的目录属性的简短名称或标记(请参阅以下内容)。第二列具有用于目录同步的最大字段长度。所有字段的总长度不能超过大约 9500。第三列包含目录中属性的内部名称。Lotus Domino Directory 的架构定义还包括第四列,此列应当显示,但不会被连接器使用。

添加和删除属性

若要从 AMAP.TBL 中删除某个属性,只须在行开头添加一个分号,将该属性变为注释即可。例如,将 Notes AMAP.TBL 中的 LastName 变为注释:

;LASTNAME 64 LastName NULL

note注意:
不要从文件中删除属性。删除这些属性会改变目录条目的唯一性,从而导致目录拒绝这些条目。

若要添加属性,则必须使用正确的信息填写各列。对于 Exchange AMAP.TBL,填写的信息有友好名称、长度、Exchange 公用名和键属性等字段。对于 Notes AMAP.TBL,填写的信息有友好名称、长度、Notes 字段名和键属性等字段。但是,AMAP.TBL 文件中有多个属性已变为注释。只要删除分号,就可添加这些属性。

添加到 AMAP.TBL 文件的属性通过连接器读取;但是,在两个架构间创建了适当的映射规则之前,这些属性不会被激活。

Active Directory 架构(在 Dxamex\amap.tbl 中定义):

ACCOUNT 32 Assoc-NT-Account

COMPANY 64 Company

DEPARTMENT 64 Department

FULLNAME 128 Display-Name

FIRSTNAME 64 Given-Name

ALIAS 64 Mail-nickname

Physical-Delivery-Office-Name

LASTNAME 64 Surname

NOTESADDR 128 Proxy-Addresses(NOTES:)

USNCreated 12 USN-Created

Initials 5 Initials

Title 32 Title

Phone 20 Telephone-Office1

MobilePhn 20 Telephone-Mobile

Fax 20 Telephone-Fax

Lotus Domino Directory 架构(在 Dxanotes\amap.tbl 中定义):

FULLNAME 220 FullName 1

MAILDOMAIN 31 MailDomain 2

COMPANY 64 CompanyName NULL

DEPARTMENT64 Department NULL

FIRSTNAME 64 FirstName NULL

LASTNAME 64 LastName NULL

LOCATION 128 Location NULL

SHORTNAME 8 ShortName NULL

Initials 5 MiddleInitial NULL

Title 32 JobTitle NULL

Phone 20 OfficePhoneNumber NULL

MobilePhn 20 CellPhoneNumber NULL

Fax 20 OfficeFAXPhoneNumber NULL

; 不要更改下列定义

UNID 64 $$UNID NULL

DN 256 $$DN NULL

USNCreated 16 $$USN NULL

映射规则文件定义一个架构中的属性如何与其他架构中的属性映射。每个非空白的非注释行都是一条规则,可为目标目录某个条目中的一个属性赋值。规则的右侧是字符串表达式,由字符串常量、数字常量、对源目录中属性的引用以及内置字符串操作函数组成。

下列规则用于将 Domino 属性映射到 Active Directory 属性,是 Dxamex\mapnotes.tbl 中一开始就有的:

Alias = ISEQUAL( ShortName, "", SUBSTR( FullName, 1, 64 ), ShortName )

FullName = X500( FullName, "CN" )

FirstName = FirstName

LastName = LastName

Company = Company

Department = Department

Office = Location

Initials = Initials

; 务必慎重更改以下规则 TA = "NOTES:"Strip( FullName, ";", "L", "R" ) "@" MailDomain

; 不要更改以下规则 DN = UNID

请注意,DN 和 TA 属性未在 Exchange 架构中显式定义。这些属性是目录同步所必需的,并且始终同步。TA(目标地址)属性是 Notes 用户的电子邮件地址,在 Exchange 目录内部必须是唯一的。尽管 Notes 并不强制规定该名称的唯一性,但在所有实际应用中,该名称必须具有唯一性,以便 Notes 路由器能将邮件可靠地传递到正确的邮箱。DN(可分辨名称)映射规则实际仅提供一部分最终完整 DN,这些 DN 是为 Exchange 中的 Notes 条目创建的。完整 DN 是通过将存放 Notes 自定义收件人条目的导入容器的 DN 与影射规则创建的 DN 片段连接而成的。

TA 规则提供了一个字符串表达式作用原理的良好示例。例如,如果 Notes 用户的全名和邮件域为“Denise Graham/Sales/Acme Corp; Denise Graham; Graham”和“Acme-HQ”,则此规则将产生一个包含“NOTES:Denise Graham/Sales/Acme Corp@Acme-HQ”的 Exchange TA 字段。有关可用的内置映射函数的完整描述,请参阅以下内容。

下列规则用于将 Exchange 属性映射到 Notes 属性,是 Dxanotes\mapmex.tbl 中一开始就有的:

FullName = Trim( Strip( NotesAddr, "@", "R" ), "B" )

MailDomain = Trim( Strip( NotesAddr, "@", "L" ), "B" )

ShortName = Alias

LastName = ISEQUAL( LastName, "", FullName, LastName )

FirstName = FirstName

Company = Company

Department = Department

Location = Office

Initials = Initials

; 不要更改以下规则 UNID = "00000000-00000000-00000000-00000000"

USN = USNCreated

DN = DN

映射规则使用了简单宏语言,可以定义在不同目录系统中创建条目的方式。这种宏语言的一个重要部分就是映射函数,这些函数可对提供的一系列参数进行操作,并以字符串形式返回结果。映射规则可将此结果与其他常量字符串和函数调用组合,以生成规则的整体结果。

映射函数可对字符串和数字常量进行操作。字符串可以是源目录中的属性标记(架构定义文件中定义的简短名称),也可以是字符串文字。字符串文字是括在引号中的实际字符序列,例如“Star Mart”、“.”,甚至是“ ”(三个空格)。请注意,映射规则中不能使用实际的内部属性名。必须使用架构定义文件中定义的属性标记。

FUNCTION_NAME( arguments )

例如:

LEFT (Fullname, 4)

如果此函数在映射规则中进行了编码,则将返回源目录中“全名”字段内容最左侧的四个字符。

函数可以相互组合或与字符串文字组合,以便创建任意复杂的结果字符串。规则及其返回的结果字符串最长可为 2048 个字符。

下面的列表列出了所有内置映射函数;更完整的说明和示例在本文档后面提供。

AND()

返回两个非空字符串的串联形式;如果指定的两个字符串中有一个为空,则返回空字符串。

CFGPARM()

返回连接器 INI 文件中的值。

ISEQUAL()

返回一个可配置值,具体取决于两个表达式是否相等。

LEFT()

返回表达式左侧的 n 个字符(如有必要,在右侧进行填充)。

LOWER()

将字段转换为小写字符。

NAMEF()

返回预格式化的字符串中人的名字或首字母。

NAMEL()

返回预格式化的字符串中人的姓氏或首字母。

NAMEM()

返回预格式化的字符串中人的中间名或首字母。

POS()

确定属性中特定字符串的位置。

PROPER()

将名称字段转换为固有名称格式。

REPLACE()

将名称字段转换为固有名称格式。

RIGHT()

返回表达式右侧的 n 个字符(如有必要,在左侧进行填充)。

SUBSTR()

返回字符串的指定子字符串(如有必要,使用额外字符填充)。

STRIP()

找到其他字符串中最左侧或最右侧出现的某个字符串,并删除字符。

TRIM()

返回删除了前导和(或)尾随空白的字段。

UPPER()

将字段转换为大写字符。

WORD()

从字符串中返回指定的字数。

X500()

从 X.500 样式的分层地址中提取属性。

映射函数:详细描述

符号转换:

大写类型

用于函数名

[ ]

用于指示可选参数。如果省略了可选参数,则假定为其默认值。

在示例中,每个调用示例后面都跟的是该调用生成的结果。尽管这些示例仅使用字符串文字作为参数,但是请记住,每个参数自身可以是任意复杂的字符串表达式(包括嵌套函数调用)。

语法:

AND(exp1,exp2)

描述:

返回两个非空字符串的串联形式;如果其中任一字符串为空,则返回空字符串。

示例:

AND("A", "B" ) "AB"

AND ("", "B") ""

AND("A", "") ""

语法:

CFGPARM( exp1[,exp2] )

描述:

CFGPARM 返回 Exchconn.ini 文件中某个参数的值。exp1 指定要返回其值的参数;exp2 指定 INI 文件内的节。如果不指定节,则使用 DXA 的主节。如果节和参数均找不到,则结果为空字符串。

示例:

CFGPARM( "executable") "lsdxamex.exe"

CFGPARM( "locale", "dxm") "English"

语法:

ISEQUAL( exp1, exp2, val1, val2 )

描述:

如果 exp1 等于 exp2,则 ISEQUAL 返回 val1 的值,否则返回 val2 的值。ISEQUAL 不区分大小写。

示例:

ISEQUAL( "remote", "remote", "R", "L") "R"

ISEQUAL( "remote", "local", "R", "L") "L"

ISEQUAL( "remote", "REMOTE", "R", "L") "R"

语法:

LEFT ( field, length, [, pad] )

描述:

LEFT 返回字段最左侧指定长度的字符。如果字段字符数少于指定长度的字符,则使用填充字符填充结果的右侧。默认填充字符为空白。

示例:

LEFT ( "416-555-0123", "3" ) "416"

LEFT ( "triple", "9" ) "triple "

LEFT ( "triple", "9", "x" ) "triplexxx"

语法:

LOWER ( field )

描述:

LOWER 返回字段的值,并将所有大写字母转换为小写字母。

示例:

LOWER ( "Contoso" ) "contoso"

LOWER ( "Bonnie" ) "bonnie"

语法:

NAMEF ( field, [, style] )

描述:

如果字段包含指定格式的人名,则 NAMEF 将返回此人的姓名或首字母。支持下列两种样式:

  • 姓名的形式为“名 中间名 姓”。
  • 姓名形式为“姓, 名 中间名”。

如果字段不包含逗号,则默认样式为 1;如果包含逗号,则默认样式为 2。

首字母或首字母字符串均视为名或中间名。如果姓名仅有一个部分,则无论什么样式,均同时视为姓和名。

示例:

NAMEF ( "Shirleen H. Travers" ) "Shirleen"

NAMEF ( "S. H. Travers" ) "S."

NAMEF ( "SH Travers" ) "SH"

NAMEF ( "Travers, Shirleen H.", "2" ) "Shirleen"

NAMEF ( "Shirleen", "2" ) "Shirleen"

语法:

NAMEL ( field, [, style] )

描述:

如果字段包含指定格式的人名,则 NAMEL 返回此人的姓。支持下列两种样式:

  • 姓名的形式为“名 中间名 姓”。
  • 姓名的形式为“姓, 名 中间名”。

如果字段不包含逗号,则默认样式为 1;如果包含逗号,则默认样式为 2。

首字母或首字母字符串均视为名或中间名。如果姓名仅有一个部分,则无论什么样式,均同时视为姓和名。

示例:

NAMEL ( "Shirleen H. Travers" ) "Travers"

NAMEL ( "S. H. Travers" ) "Travers"

NAMEL ( "Shirleen Travers" ) "Travers"

NAMEL ( "Travers, Shirleen H.", "2" ) "Travers"

NAMEL ( "Shirleen") "Shirleen"

语法:

NAMEM ( field, [, style] )

描述:

如果字段包含指定格式的人名,则 NAMEM 将返回此人的中间名或首字母。支持下列两种样式:

  • 姓名的形式为“名 中间名 姓”。
  • 姓名的形式为“姓, 名 中间名”。

如果字段不包含逗号,则默认样式为 1;如果包含逗号,则默认样式为 2。

首字母或首字母字符串均视为名或中间名。如果姓名仅有一个部分,则无论什么样式,均同时视为姓和名。未标识为姓或名的任何部分均视为中间名。

示例:

NAMEM ( "Shirleen H. Travers" ) "H."

NAMEM ( "S. H. Travers" ) "H. "

NAMEM ( "Travers, Shirleen H." ) "H. "

NAMEM ( "Travers, Shirleen", "2" ) ""

NAMEM ( "Travers, Shirleen H.", "2" ) "H."

语法:

POS ( field, target )

描述:

POS 返回字段内目标字符串的位置。如果目标不在字段内,则 POS 返回零。

示例:

POS ( "Title:President", "Ti" ) "1"

POS ( "Title:President", ":" ) "6"

POS ( "Title:President", "Manager" ) "0"

语法:

PROPER ( field )

描述:

PROPER 返回字段的值,并将小写和大写字母转换为混合大小写字母,即将该字段视为固有名称。

示例:

PROPER ( "contoso" ) "Contoso"

PROPER ( "robert") "Robert"

PROPER ( "o'hara" ) "O'Hara"

语法:

REPLACE ( field, what [,with] )

描述:

通过此映射函数,可以删除 ID 中的特定字符,或将选择的字符替换为代入字符。该函数扫描字段以查找 what 字符串中的任何字符,然后使用 with 字符串中的对应字符替换它们。如果 with 字符串较短或未提供(表示 what 中有一个或多个字符在 with 中没有对应字符),则从字段中省略(删除)这些字符。

示例:

REPLACE ("James Hendergart"," ","_") "James_Hendergart"

REPLACE ("Sales & Marketing E-mail Group"," ",".")"Sales.&.Marketing.E-mail.Group"

语法:

RIGHT ( field, length [,pad] )

描述:

RIGHT 返回字段最右侧指定长度的字符。如果字段字符数少于指定长度的字符,则使用填充字符填充结果的左侧。默认的填充字符为空白。

示例:

RIGHT ( "416-555-0123", "7" ) "55-0123"

RIGHT ( "416-555-0123", "8" ) "555-0123"

RIGHT ( "node", "5", "@" ) "@node"

语法:

STRIP ( string1, string2, [scan-from-direction] , [strip-toward- direction]),

其中

[scan-from-direction] = "L" | "R"

[strip-toward-direction] = "L" | "R"

描述:

STRIP 找到 string1 中最左侧或最右侧出现的 string2,然后从右侧或左侧删除包括 string2 在内的字符。scan-from-direction 的值确定 STRIP 是查找 string1 中最左侧还是最右侧出现的 string2;strip-toward-direction 的值确定是从 string2 开头的左侧还是右侧删除字符。

如果省略 scan-from-direction 或 strip-toward-direction 参数,则缺少的参数值假定为与指定的参数值相同。如果同时省略这两个参数,则两者的默认值均假定为“R”(右侧)。

示例:

STRIP ( "Senior Vice President", "Vice", "L" ) " President"(请注意前导空白)

STRIP ( "Senior Vice President", "Vice", "R" ) "Senior "(请注意尾随空白)

STRIP ( "Senior Vice President", " " , "L") "Vice President"

STRIP ( "Senior Vice President", " ", "R" ) "Senior Vice"

STRIP ( "Senior Vice President", " ", "R", "L" ) "President"

语法:

SUBSTR ( field, start [,length [, pad] ] )

描述:

SUBSTR 返回从 start 位置开始,指定长度的字段部分(如有必要,使用填充字符填充)。

长度的默认值为(字符串长度 - start + 1)。默认填充字符为空白。

示例:

SUBSTR( "Vice-President", "6" ) "President"

SUBSTR( "Vice-President", "2", "3" ) "ice"

SUBSTR( "Vice-President", "7", "9", "s" ) "residents"

SUBSTR( "Vice-President", "11", "4" ) "dent"

语法:

TRIM ( field [,option] )

描述:

TRIM 返回删除了前导或尾随空白的字段。Option 指定是删除前导空白 (L)、尾随空白 (R),还是两者 (B) 都删除。

示例:

TRIM ( " Title ", "B" ) "Title"

TRIM ( " Title ", "L" ) "Title "

TRIM ( " Title ", "R" ) " Title"

语法

UPPER ( field )

描述:

LOWER 返回字段的值,并将所有小写字母转换为大写字母。

示例:

UPPER ( "Contoso" ) "CONTOSO"

UPPER ( "Bonnie" ) "BONNIE"

语法:

WORD ( field, n [, m] )

描述:

WORD 返回从字段中第 n 个单词开始的 m 个以空白分隔的单词。如果字段包含的单词少于 n 个,则 WORD 返回空字符串。m 的默认值为 1。

示例:

WORD ( "one of a kind", "1" ) "one"

WORD ( "one of a kind", "1", "2" ) "one of"

WORD ( "one of a kind", "3", "2" ) "a kind"

WORD ( "one of a kind", "5" ) ""

WORD ( "Shirleen H. Travers", "3" ) "Travers"

语法:

X500 ( address, field name [,index] )

描述:

X500 返回指定地址的命名字段的内容。如果地址有两个或多个组成部分具有相同字段名,则使用索引值指定正确的组成部分。

支持下列 X.500 类型的地址:

  • Microsoft Exchange 规范(例如,/o=org/ou=site[/cn=container])
  • Lotus Notes 规范(例如,cn=name/ou=site./o=org/c=country)
  • Lotus Notes 简写规范(例如,name/site/org/country)

例如,假设 DN 字段的值为以下 X500 地址示例中提供的值:

/o=Contoso/ou=Sales Office/cn=Recipients/cn=Notes_Users

函数将提供以下结果:

X500 ( DN, "ou") "Sales Office" X500 ( DN, "o") "Contoso" X500 ( DN, "cn", 2) "Notes_Users"

有关详细信息,请参阅 如何确定目录属性的内部名称

 
显示: