许多cfif / cfelseif标签的替代品

时间:2015-03-05 01:23:53

标签: coldfusion

我有一个cfldap查询,它返回与用户关联的distinguishedName。在用户distinguishedName中,有一个OU标识用户区域,我使用该区域作为变量,填充包含该区域中我们设施名称的选择框。

现在我正在做

<cfif distinguishedName = A>
  <cfset region = A>
<cfelseif distinguishedName = B>
  <cfset region = B> 

等。等。

对于所有7个地区,虽然有效,但我认为必须有更好的方法来实现这一目标。

任何建议都将不胜感激。

3 个答案:

答案 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>

我不建议你过分使用变量名。我倾向于坚持使用字母数字,但这是一个例子,因为有些时候,像你一样,开发人员喜欢采用你正在寻找的方法。