Как использовать результаты @DbLookup для заполнения поля «Читатели» в xpages?

db = new Array("myserver", "myfolder\\mydb.nsf") 
dir = getComponent("Dir").value; 
div = getComponent("Div").value; 
lu = @DbLookup(db, "ManagerAccess", dir + "PP" + div, "DTManagers"); 
var a = []; 
a.push(lu); 
var item:NotesItem = docBackEnd.replaceItemValue('FormReaders', @Unique(a)); 
item.setReaders(true);

Этот код находится в ssjs querySaveDocument. Результат, который я получаю от @DbLookup (когда я ввожу вычисляемое поле), выглядит так: Педро Мартинес, Мэнни Рамирес, Дэвид Ортис, Терри Франкона.

Я пробовал использовать на нем функцию @Explode (@Implode), но, похоже, это не сработало. Ошибка, которую я получаю в браузере, просто говорит мне, что строка replaceItemValue не работает. Чтобы проверить это, я вставлял несколько строк по одной, и он работал правильно, заполняя мое поле FormReaders несколькими записями.

Что я делаю неправильно?


person m benway    schedule 15.01.2014    source источник
comment
Вы помещаете массив в массив. Попробуйте вместо этого использовать concat (). Или используйте lu непосредственно в методе replaceItemValue.   -  person Sven Hasselbach    schedule 15.01.2014


Ответы (1)


Я вижу здесь несколько проблем:

A. В описанных вами случаях @Dblookup фактически вернет массив. Если вы поместите массив в простой элемент управления computedField, он будет выглядеть точно так, как вы написали:

value1, value2, ..., valueN

ComputedField ничего не знает о нескольких значениях и т. Д., Он просто может отображать строки или данные, которые можно преобразовать в строки.

Если вы хотите проверить возвращаемое значение, вы можете попробовать вернуть что-то вроде lu[0]; тогда вы должны получить 1-й элемент массива или ошибку времени выполнения, если lu НЕ является массивом. Или вы можете запросить размер массива, используя lu.length. Это возвращает количество элементов массива или количество символов, если это просто обычная строка.

B. ваш код содержит эти две строки:

var a = [];
a.push(lu);

Таким образом вы создаете пустой массив, а затем нажимаете lu[] на первый элемент a[]. Результат примерно такой:

a[0] = [value1, value2, ..., valueN],

т.е. a - это массив, в котором первый элемент содержит другой массив. Поскольку вы этого не хотите, просто используйте @Unique(lu) в своем методе replaceItemValue.

В. Я не понимаю, почему replaceItemValue выдает здесь ошибку, кроме того, что я написал в теме Б. Попробуйте, написав lu непосредственно в элемент (сначала без @Unique). Это должно сработать.

D. Для полноты: в первой строке вы использовали «новый массив». Намного лучший способ определить ваши параметры db -

var db = ["myserver", "myfolder/mydb.nsf"];

(см. комментарий Тима Трипконя в своем недавнем вопросе или его запись в блоге по адресу http://www.timtripcony.com/blog.nsf/d6plinks/TTRY-9AN5ZK)

person Lothar Mueller    schedule 15.01.2014
comment
A. Я пишу в редактируемые Читатели имя поля FormReaders. Я упомянул вычисляемое поле только для того, чтобы продемонстрировать, что я проверил поиск и нашел желаемые результаты. D. Спасибо. Я продолжаю это делать! - person m benway; 15.01.2014
comment
Да, у меня так получилось; Думаю, большинство из нас использует computedFields для быстрой отладки. Я хотел сказать, что то, что вы получаете в поле отладки, совершенно правильно. - вопрос: работает ли replaceItemValue при прямой передаче lu? - person Lothar Mueller; 15.01.2014