[daisy] Help setting multivalue link field
Derek Coffman
Derek.Coffman at noaa.gov
Mon Jan 21 12:24:27 CST 2008
Thanks! That worked like a charm.
Cheers,
Derek
Bruno Dumon wrote:
> On Sun, 2008-01-20 at 23:53 -0800, Derek Coffman wrote:
>> Hi,
>>
>> I am writing an "wizard" type extension to allow users to create and
>> "InstrumentDefinition" document. The document contains a multivalue link
>> field of "InstrumentTypes" (i.e., a list of documents of type
>> "InstrumentType"). In the wizard, the user is presented with a
>> double-listbox multivalue field and required to select at least one
>> type. The types are show as the name of the InstrumentType. Once the
>> user submits the completed form, I am trying to use getValue() of that
>> widget which should return an array of Strings if I understand
>> correctly. In order to set the multivalue link field, I need to turn
>> those names into an array of VariantKey...correct?
>>
>> My question: what is the best way to do this in javascript? Here's one
>> iteration I've tried...
>>
>> var types = form.getChild("def_inst_types").getValue();
>>
>> var ids = new Array();
>>
>> for (i=1; i<types.length; i++) {
>> var type_str = types[i].toString();
>>
>> searchresults = queryManager.performQuery("select id where
>> documentType='InstrumentType' and name='"+type_str+"'",locale.getDefault());
>>
>> rows =
>> searchresults.getSearchResult().getRows().getRowArray();
>>
>> var typeid = rows[0].getValueArray(0);
>>
>> var typedoc =
>> daisy.getRepository().getDocument(typeid,false);
>> ids[i] = typedoc.getVariantKey();
>>
>> }
>>
>> var repository2 = daisy.getRepository();
>> var document = repository2.createDocument(title.toString(),
>> "InstrumentDefinition");
>> document.setField("InstrumentTypes",ids);
>>
>>
>> Am I completely off track here? When I run this, I get an error that says:
>>
>> Wrapped org.outerj.daisy.repository.DocumentTypeInconsistencyException:
>> The value for the multivalue-field "InstrumentTypes" should be an array.
>> (file:/home/web/acglocal/daisy/acgwikidata/sites/cocoon/instrument/instrument.js#566)
>> The value for the multivalue-field "InstrumentTypes" should be an array.
>>
>>
>
> You need to supply a Java array instead of a Javascript array. The
> javascript engine (rhino) doesn't automatically convert this.
>
> See "Creating Java arrays" on this page:
> http://www.mozilla.org/rhino/ScriptingJava.html
>
> About the VariantKey's: this is a concrete class, you can immediately
> instantiate it yourself. Doing repository.getDocument() is much more
> expensive. So you can do:
>
> new VariantKey(typeid, 1, 1)
>
--
_________________________________________________________
Derek Coffman derek.coffman at noaa.gov
NOAA/PMEL phone: 206-526-6574
7600 Sand Point Way NE 206-526-6790
Seattle, WA 98115 fax: 206-526-6744
http://saga.pmel.noaa.gov
_________________________________________________________
More information about the daisy
mailing list