In this adventure I was inspired by the following great articles:
Bob's view navigation
Ferdy's Domino XHTML Forms
[I managed to get and use the view navigation from Bob's site, I also tweaked it according to the requirements. I hope that when finished, I will upload my work back to the community, in an empty template. A future article will follow on this subject.]
The issue I was facing is that @NameLookup apparently does not return a list of values, when the item I'm looking for is multiple-values. It only returns the first value. Why the hack is this happening I cannot tell.
Let me explain:
I do have a computed for display field (can be also a simple computed text) with the following standard formula:
user := @Name([CN] ; @UserName);
lookup:= @NameLookup ([Exhaustive]; user ; "OfficeCountry");
lookup
No error checking as to keep it simple. As you see, I am trying to return the OfficeCountry Domino item. By default, this is a single value field in pubnames.ntf design. Ehh, so what, I've made it multiple values in my web form, also in $PersonInheritableSchema subform which is used to display the document in Notes.
I had no luck: even though values are displayed as list in the OfficeCountry field, only the first value is returned when I do the @NameLookup.
Feel free to drop me an email if this works for you, it didn't for me. And I don't have to worry about it because I managed to trick the damn thing.
Obviously I had to drop the idea of making OfficeCountry as multiple value field, instead I made a trick, described here. The idea through me off my chair due to its simplicity:
The HTML code in my web form is the following:
<select name="OfficeCountrySelect"> <option>Country1</option>
<option>Country2</option> <option>Country3</option></select><br/>
<input name="OfficeCountry" value="" type="hidden">
Then, just before doing the submit() so that changes are saved, we do some validation (Carefully read and understand Ferdy's article above, it explains it very well) and I simply take all options values and put them into the OfficeCountry hidden field, with a JS code some something like:
//validation function body
....
if (document.all) document.all.OfficeCountry.value = _
getOptionsFromSelect ('OfficeCountrySelect') ;
....
//validation function body
then comes the getOptionsFromSelect function:
function getOptionsFromSelect (strObj) {
selected = new Array();
var obj = document.getElementById (strObj) ;
for (var i = 0; i < obj.options.length; i++)
{
if (obj.options[ i ].selected) {
selected.push (obj.options[ i ].innerText);
}
}
return selected.toString ()
}
And here we go, the OfficeCountry will store a single value: Country1,Country2,Country3
Then, @NameLookup will return all values as a single string and I don't need to worry about it returning only single values.
Obviously, in other parts of the code, I need to @explode this string so that I can work with it.
No comments:
Post a Comment