我有一个cfldap查询,它返回与用户关联的distinguishedName。在用户distinguishedName中,有一个OU标识用户区域,我使用该区域作为变量,填充包含该区域中我们设施名称的选择框。
现在我正在做
<cfif distinguishedName = A>
<cfset region = A>
<cfelseif distinguishedName = B>
<cfset region = B>
等。等。
对于所有7个地区,虽然有效,但我认为必须有更好的方法来实现这一目标。
任何建议都将不胜感激。
答案 0 :(得分:3)
我猜你的例子很糟糕,而你实际上并没有这样做:
<cfif distinguishedName eq A>
<cfset region = A>
<cfelseif distinguishedName eq B>
<cfset region = B>
(等),因为这没有多大意义。正如亚伯兰建议的那样,如果你 这样做,那么就简单地说:
<cfset region = distinguishedName>
我猜你为region
设置的值是而不是与DN相同。
我认为Matt在正确的轨道上有点建议将DN
映射到region
的结构,但我会改为使用RegionMapper CFC,在内部保存映射的结构,并提供getRegionForDn()
方法(我没有以该名称出售,但你知道我的意思),如果存在映射则返回适当的区域,如果没有匹配则返回默认或合理的异常。
答案 1 :(得分:1)
如果您知道专有名称将始终只返回“OU = Foo”,那么您可以执行ListLast()并完成。
Region = ListLast(distinguishedName,"=");
您可能没有此问题,但如果distinguishedName曾经是完整DN的一部分,如
CN=John Doe,OU=Oahu,DC=foo,DC=bar
您需要多做一些才能获得OU值。您可以使用一些内置的List函数,如ListToArray(),然后找到该值。你需要知道OU中的逗号,但是喜欢“OU = foo \,bar”。
DN = "CN=John Doe,OU=Oahu,DC=foo,DC=bar";
rdnsArray = ListToArray(DN,",");
pos = ArrayContainsNoCase(rdnsArray,"OU=");
Region = ListLast(rdnsArray[pos],"=");
另一种选择,可能有点过分就是使用Java来获取它。
LDAPName = CreateObject("java","javax.naming.ldap.LdapName").init(JavaCast("string",distinguishedName));
RDNS = LDAPName.getRdns();
for(rdn in RDNS){
if(rdn.getType() == "OU"){
Region = rdn.GetValue();
break; //breaks when found
}
}
我第二个亚当的建议是把它放在一个函数中
答案 2 :(得分:0)
首先,正如马特所说,你可以做一些这样的事情,作为一个例子。
<cfset LangNames = {CF = "Cold Fusion", PHP = "Personal Home Page", ASP = "Active Server Pages"}>
<cfif structKeyExists(LangNames,inputName)> // where inputname is a variable with the value cf, php, html*, etc
<cfset LangFullName = LangNames[inputName]>
<cfelse>
Key doesn't exist, can use this section to report an error.
</cfif>
* You'll notice html isn't in the list, so it would fail this check.
这是最简单的方法。关于冷融合键的好处是它们不必只是字母数字。如果需要,可以使用名为<b>
的结构键。
<cfset tagPurposes = {"<b>" = "Bolds text", "<i>" = "Italicizes text"}>
<cfoutput>#htmleditformat(structkeylist(tagpurposes))# #tagpurposes["<b>"]#</cfoutput>
我不建议你过分使用变量名。我倾向于坚持使用字母数字,但这是一个例子,因为有些时候,像你一样,开发人员喜欢采用你正在寻找的方法。