2014-09-15 2 views
0

от veCol = vw.getAllEntriesByKey (key, false), где ключ является значением из элемента управления в форме. Если счетчик в veCol равен нулю, я возвращаю сообщение о том, что поиск не удался, если счетчик равен 1 (один), я устанавливаю некоторые значения и перенаправляю страницу на страницу ввода, однако, если число больше одного, я хочу отобразите veCol для повторного управления. Я думал о настройке переменной viewScope для veCol, но я видел, что предупрежденные не сохраняют объект Notes в переменной Scope, потому что они не сериализованы. Итак, мой вопрос: «Есть ли способ передать мой veCol для повторного управления одним и тем же настраиваемым элементом управления?» На самом деле контроль - это диалог, но это не имеет значения.В кнопке SSJS у меня есть NotesViewEntryCollection

В другом экземпляре я взял коллекцию и превратил ее в массив UNID в переменную viewScope, а затем связал повторение с переменной. Это означает, что я должен снова получить каждый документ, используя UNID, который работает, но veCol уже содержит все, что мне нужно, просто возможность пройти его будет более эффективной. Поэтому я знаю, что могу заставить его работать, но с небольшим количеством накладных расходов.

Код довольно прост в моей кнопке Я выполняю var veCol: NotesViewEntryCollection = vw.getAllEntriesByKey (key, false);

в том же диалоговом окне, которое содержит кнопку Я хочу повторить, используя значение, возвращаемое как veCol.

Любая помощь приветствуется.

ответ

1

Вы можете создать свой собственный ValueBinding и перезаписать выходы один из повтора:

<xp:button 
    value="Label" 
    id="button1"> 
    <xp:eventHandler 
     event="onclick" 
     submit="true" 
     refreshMode="partial" 
     refreshId="repeat1"> 
     <xp:this.action> 
      <![CDATA[#{javascript: 
       var valueExpr = "#{javascript:vw.getAllEntriesByKey(key, false);}"; 
       var value:javax.faces.el.ValueBinding = facesContext.getApplication().createValueBinding(valueExpr); 
       var veCol:NotesViewEntryCollection = value.getValue(facesContext); 

       if(veCol.getCount() > 0){ 
        var cmpRepeat:com.ibm.xsp.component.xp.XspDataIterator = getComponent('repeat1'); 
        cmpRepeat.setValueBinding("value", value); 
       }else{ 
        // do redirect 
       } 
     }]]></xp:this.action> 
    </xp:eventHandler> 
</xp:button> 

Или просто определить переменную SSJS в вашей кнопке, и испытание, если переменные существует:

<xp:repeat 
    id="repeat1" 
    rows="30" 
    var="doc"> 
    <xp:this.value> 
     <![CDATA[#{javascript: 
      if( typeof(veCol) != "undefined"){ 
       return veCol; 
      } 
     }]]> 
    </xp:this.value> 
    <xp:label 
     value="#{javascript:if(doc != null) doc.getUniversalID()}" 
     id="label1"> 
    </xp:label> 
</xp:repeat> 
+0

спасибо, что выглядит отлично, есть ли какие-либо существенные преимущества/недостатки для одного? –

+0

Каким будет код в кнопке, чтобы определить переменную veCol? –

+0

@BillF: В моих глазах нет никаких преимуществ или недостатков. Чтобы определить переменную, вам просто нужно определить ее с помощью * var veCol *, тогда она доступна для всего XPage. –

0

Хорошо, мне бы хотелось увидеть какой-то код или даже небольшую диаграмму потока.

Сначала вы можете передать элемент Viewentrycollection в элемент управления повтора. Я сам это задал. :) How do you pass a NotesDocument/NotesViewEntry Collection into a Custom Control via custom property?

Я согласен, что вы не хотите пытаться хранить свою коллекцию внутри viewScope. В Java-мире это относительно просто, я бы подумал, но давайте оставим его не-java, так как это то, о чем вы просите.

проверить этот вопрос из: How to pass variable parameters to an XPages SSJS function?

Скорее тогда ArrayList из UNIDs вашей коллекции вы можете создать JavaScript Object для каждого документа и поместить имена и значения полей внутри там ... Это вроде как JSON в путь ... наименее это то, как я думаю об этом. Теперь это «безопасно», поэтому вы можете поместить это в область видимости или вернуть это или что-то еще, если вы не хотите передавать объект домино самому самому управлению повторения ...

+0

Дэвид - Я ничего подобного не делал раньше. Чтобы работать с моим приложением, я передал UNID, потому что список возврата довольно маленький. Я увижу, что я могу сделать с созданием объекта JS, чтобы содержать нужную мне информацию. Вам придется перечитать две опубликованные вами ссылки. –

Смежные вопросы