Автосохранение документа после удаления вложения в элементе управления загрузкой файлов?

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

Для элемента управления есть событие onclick, но оно не относится к удалению. Есть ли способ автоматически вызвать .save () после удаления вложения?


person Ryan Buening    schedule 27.10.2012    source источник


Ответы (2)


Вот фрагмент SSJS, который позволяет добавить действие к функции удаления элемента управления FileDownload.

<xp:this.beforeRenderResponse>
    <![CDATA[#{javascript:

    /***
     * adds an additional method to "delete action"
     * of a UIFileDownload control
     *  
     * @param UIFileDownload component
     * @author Sven Hasselbach
     * @category SSJS
     * @category UI
     * @version 0.3
     */
    function overrideFileDownloadAction( fDownload ){
        if( fDownload === null )
            return;
        rekOverrideFileDownloadAction( fDownload, fDownload );
    }

    function rekOverrideFileDownloadAction( component:javax.faces.component.UIOutput, fDownload:com.ibm.xsp.component.UIFileDownload  ){
        try{
            var children:java.util.List = component.getChildren();
            var it:java.util.Iterator = children.iterator();
            var curChild:javax.faces.component.UIOutput;

            while( it.hasNext() ){
                curChild = it.next();
                if( typeof( curChild ) === 'com.ibm.xsp.component.xp.XspEventHandler' ){

                    var group = new com.ibm.xsp.actions.ActionGroup();
                    var list = new java.util.ArrayList();
                    group.setComponent( fDownload );
                    list.add( curChild.getAction() );
                    list.add( mBinding );
                    group.setActions( list );
                    curChild.setAction(group);
                }
                rekOverrideFileDownloadAction( curChild , fDownload );
            }
        }catch(e){}    
    }

    var mBinding = facesContext.getApplication().createMethodBinding("#{javascript:document1.save()}", null );
    overrideFileDownloadAction( getComponent( 'fileDownload1' ) );
    }]]>
</xp:this.beforeRenderResponse>

Вам необходимо изменить код в MethodBinding mBinding и имя элемента управления FileDownLoad. Имейте в виду, что этот код сохранит документ только в том случае, если нет проблем с проверкой. Чтобы отключить обязательные поля, вы должны добавить следующую строку кода curChild.setDisableValidators (true); в блок if.

person Sven Hasselbach    schedule 30.10.2012
comment
Спасибо, Свен! Сработало отлично. - person Ryan Buening; 30.10.2012
comment
этот код не работает в Notes 9. Я получаю: com.ibm.xsp.actions.ActionGroup несовместим с com.ibm.xsp.actions.DeleteAttachmentsAction. Любые идеи? Что изменилось в новой версии? - person mike_x_; 09.09.2015
comment
@mike_x_: IBM изменила внутренние объекты элемента управления FileDownload. До ND9 действие было группой действий, поэтому его можно было перезаписать / добавить привязку к нему. Теперь это экземпляр DeleteAttachmentsAction, и его больше нельзя изменить таким образом. - person Sven Hasselbach; 09.09.2015
comment
Спасибо, Свен! Есть ли обходной путь для этого? Я ничего не нашел до сих пор ... - person mike_x_; 10.09.2015

Альтернативой является использование свойства enableModifiedFlag, чтобы гарантировать, что пользователю будет предложено покинуть страницу без сохранения.

Подробнее см. http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/topic/com.ibm.designer.domino.ui.doc/wpd_controls_pref_enablemodifiedflag.html

person Per Henrik Lausten    schedule 28.10.2012
comment
Я попытался включить это, но он не предлагает при выходе со страницы без сохранения после удаления вложения ... - person Ryan Buening; 29.10.2012
comment
Можно ли добавить событие CSJS, запускающее проверку isDirty? См. Этот ответ для кода CSJS: stackoverflow.com/a/10428881/785061 - person Per Henrik Lausten; 29.10.2012
comment
Ответ Свена выше работает, но спасибо за комментарий. Я могу использовать проверку isDirty и в других местах. - person Ryan Buening; 30.10.2012