In Tridion templating, double look-up refers to a technique of reading package values two or more times. This is probably most commonly used when reading TBB parameters.
For example, let's consider a TBB that takes a parameter called 'inputValue' of type String, which represents a TcmUri. In Template Builder, the template developer can specify a value for 'inputValue' in several ways:
Hard-Coded Value
The look-up in the package is direct:
var value = package.GetValue("inputValue");
Package Item Name
I need to first look-up the package item, and then take its value. This is a form of double look-up:
var paramInputValue = package.GetValue("inputValue");
Item valueItem = package.GetByName(paramInputValue); // double look-up
var value = valueItem.GetAsString();
Alternatively, the package item name look-up can be done using Dreamweaver Language Expressions, see next. The two are thus equivalent.
Dreamweaver Language Expressions
You can also use a double look-up, much like the package item name:
var paramInputValue = package.GetValue("inputValue");
var value = package.GetValue(paramInputValue);
Why Stop at Double Look-Up?
Why not have triple look-up, or better yet N-look-up? Well, probably not very likely to use these cases, but technically, they are definitely possible.
var value = package.GetValue("inputValue");
String aux = package.GetValue(value);
while (aux != null) {
value = aux;
aux = package.GetValue(value);
}
Putting it All Together
string imageTcmUri = m_Package.GetValue("ImageTcmUri"); // direct look-up
For example, let's consider a TBB that takes a parameter called 'inputValue' of type String, which represents a TcmUri. In Template Builder, the template developer can specify a value for 'inputValue' in several ways:
- hard-code an actual TcmUri, e.g. tcm:1-2;
- use a package item name - e.g. package item named MyVariable, whose value is the TcmUri;
- use a Dreamweaver Language Expression - e.g. Component.Fields.BannerImage that resolves to a TcmUri;
Hard-Coded Value
The look-up in the package is direct:
var value = package.GetValue("inputValue");
Package Item Name
I need to first look-up the package item, and then take its value. This is a form of double look-up:
var paramInputValue = package.GetValue("inputValue");
Item valueItem = package.GetByName(paramInputValue); // double look-up
var value = valueItem.GetAsString();
Alternatively, the package item name look-up can be done using Dreamweaver Language Expressions, see next. The two are thus equivalent.
Dreamweaver Language Expressions
You can also use a double look-up, much like the package item name:
var paramInputValue = package.GetValue("inputValue");
var value = package.GetValue(paramInputValue);
Why Stop at Double Look-Up?
Why not have triple look-up, or better yet N-look-up? Well, probably not very likely to use these cases, but technically, they are definitely possible.
var value = package.GetValue("inputValue");
String aux = package.GetValue(value);
while (aux != null) {
value = aux;
aux = package.GetValue(value);
}
Putting it All Together
string imageTcmUri = m_Package.GetValue("ImageTcmUri"); // direct look-up
if (String.IsNullOrEmpty(imageTcmUri))
{
throw new Exception("Mandatory
parameter ImageTcmUri cannot be empty");
}
else if (!TcmUri.IsValid(imageTcmUri)) // give second chance
{
imageTcmUri
= m_Package.GetValue(imageTcmUri); // double lookup
if (String.IsNullOrEmpty(imageTcmUri)
|| !TcmUri.IsValid(imageTcmUri)) // fail
{
throw new Exception("Invalid
parameter ImageTcmUri");
}
}
Comments