Проверить содержимое вложенного файла

garrick

garrick

Lotus team
26.10.2009
1 024
81
Можно ли проверить содержимое вложенного файла и выдать пользователю сообщение об ошибке, если таковая обнаружится? Интересует следующий алгоритм действий.
  1. пользователь прикрепляет файл на форме XPages;
  2. сразу при прикреплении или по Submit запускается Java агент, который проверяет содержимое файла;
  3. если содержимое файла не то, пользователю выводится сообщение с подтверждением дальнейших действия (продолжить работу или отметить)
  4. если пользователь говорит "Отменить", документ с аттачментом удаляется из базы (или не сохраняется), на этом работа завершена;
  5. если пользователь говорит "Продолжить" запускается другой Java агент и обрабатывает документ с аттачментом (сохраняет в базе и т.п.).
Возник затык с реализацией п.2 и п.3 Может быть наставите на путь истинный?
 
R

romych2004

Примерно так, только на result=0 надо показывать диалог и в диалоге выполнять то, что я выполнил внутри блока if

XPages:
Код:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:this.data>
        <xp:dominoDocument var="document1" formName="test"></xp:dominoDocument>
    </xp:this.data>
    <xp:div id="refresh">
        <xp:fileUpload id="fileUpload1" value="#{document1.Body}">
            <xp:eventHandler event="onchange" submit="true" refreshMode="partial" execMode="partial"
                execId="refresh" onComplete="dojo.byId('#{id:fileUpload1}').value = ''" refreshId="refresh">
                <xp:this.action><![CDATA[#{javascript:var doc = document1.getDocument(true);
database.getAgent('test').runWithDocumentContext(doc);
var result = doc.getItemValueString('result');
if(result == '0') {
    view.postScript('alert("wtf?");');
    var list = document1.getAttachmentList('Body');
    document1.removeAttachment('Body', list.get(list.size() - 1).getName());
} else {
    view.postScript('alert("' + result + '");');
}}]]></xp:this.action>
            </xp:eventHandler>
        </xp:fileUpload>
        <xp:fileDownload rows="30" id="fileDownload1" displayLastModified="false"
            value="#{document1.Body}"></xp:fileDownload>
    </xp:div>
</xp:view>
Agent
Код:
Option Public
Option Declare

Sub Initialize
    Dim session As New NotesSession
    Dim doc As NotesDocument
 
    Set doc = session.Documentcontext
    Dim body As NotesRichTextItem
 
    Set body = doc.Getfirstitem("Body")
 
    Dim eos
    eos = body.Embeddedobjects
    'case 1
    doc.replaceItemValue("result", eos(UBound(eos)).Name).Savetodisk = False 
 
    'Case 2
    'doc.Replaceitemvalue("result", "0").Savetodisk = False 
End Sub
Если где-то подробнее описать - скажи где
 
Последнее редактирование модератором:
  • Нравится
Реакции: garrick
garrick

garrick

Lotus team
26.10.2009
1 024
81
@romych2004, спасибо, проверка работает. Но появилась другая проблема - поле с аттачментом обязательное, а после обработки агентом сам аттачмент перемещается в xp:fileDownload и при попытке закрыть страницу срабатывает проверка наличия аттачмента - говорит, что его нету. Сделать поле необязательным и проверять наличие аттачмента каким-нибудь другим альтернативным способом? или что-то можно сделать, что бы аттачмент оставался в xp:fileUpload?
 
R

romych2004

@garrick, варианты:
1) Убери onComplete свойство. Тогда в файлАпплоад значение останется, но при каждом пост-запросе файл будет загружаться на сервер(и скорее всего дублироваться в аттачи, не помню уже точно)

2) Сделать обязательным другое поле, например такое:
Код:
<xp:inputHidden id="inputHidden1" value="#{javascript: document1.getAttachmentList('Body').size()}"
            required="true" showReadonlyAsDisabled="true">
            <xp:this.converter>
                <xp:convertNumber type="number"></xp:convertNumber>
            </xp:this.converter>
            <xp:this.validators>
                <xp:validateLongRange minimum="1"></xp:validateLongRange>
            </xp:this.validators>
        </xp:inputHidden>
 
garrick

garrick

Lotus team
26.10.2009
1 024
81
А можно запретить FileUpload Control прикреплять более одного файла?
 
R

romych2004

Код:
rendered="#{javascript:document1.getAttachmentList('Body').size() == 0}"
 
  • Нравится
Реакции: garrick
garrick

garrick

Lotus team
26.10.2009
1 024
81
Всё легко разруливается с помощью Java Bean Validator.
 
Мы в соцсетях:  ТелеграмВконтактеДзенФейсбукТвиттерЮтуб