0

シンプルなフォルムとボディフィールドがあります。ユーザーが添付ファイルをアップロードするときに、ドキュメントの本文フィールドに既にある添付ファイルを削除したいと思います。保存ボタンでこれを行うにはどうすればよいですか。

fileUploadコントロールのプロパティを設定して、ファイル名を常に同じ名前に変更しようとしましたが、これはファイルを置き換えません。代わりに、新しいファイルを追加し、それに新しい連番を追加します。

<xp:fileUpload id="fileUpload1" value="#{userdoc.Body}" filename="profile"     seUploadname="false"></xp:fileUpload>

また、保存する前にbodyフィールドに埋め込まれたすべての添付ファイルをループしようとしましたが、すべての添付ファイルが削除されましたが、新しい添付ファイルは追加されません。

4

2 に答える 2

7

少し遅れましたが、私が Google 経由で行ったように、誰かがここに来たら...

別のオプションもあります。NotesXSPDocument.getAttachmentList("ritem") は、文書内の添付ファイルのリストを返します。各エントリの型はDominoDocument.AttachmentValueHolderで、ファイルが文書内に既に存在するか、追加されたばかりかを返す getState() プロパティを持っています。ドキュメントに既に存在するファイルを削除するには、次の SSJS コードを保存ボタンに追加します (「ファイル」がファイルを保持するリッチテキスト アイテムの名前であると仮定します)。

var attList = docFile.getAttachmentList("files");

for(var i=0; i<attList.size(); i++) {
  var att = attList.get(i);

  if (att.getState()==0) {      //STATE_INDOCUMENT: this is the 'old' file: remove it
    docFile.removeAttachment("files", att.getName() );
  } else if (att.getState()==1) {       //STATE_ADDED: this is the new file
           //leave it           
  } 
}
于 2012-08-13T19:32:52.017 に答える
3

これを行うには、最初にすべての添付ファイルを削除し (NotesXSPDocument オブジェクトの removeAllAttachments 関数を使用)、次にアップロードされたファイルをリッチテキスト アイテムに手動で添付します。

この SSJS コードは、XPage / カスタム コントロールの beforeRenderResponse-event に追加する必要があります。

var con = facesContext.getExternalContext();
var request:com.sun.faces.context.MyHttpServletRequestWrapper = con.getRequest();
var map:java.util.Map = request.getParameterMap();
var fileDataName = getClientId('fileUpload1') ;
var fileData:com.ibm.xsp.http.UploadedFile = map.get( fileDataName );
if( fileData == null ){
    return;
}

var tempFile:java.io.File = fileData.getServerFile();
var correctedFile = new java.io.File( tempFile.getParentFile().getAbsolutePath() + 
    java.io.File.separator + fileData.getClientFileName() ); 

var success = tempFile.renameTo(correctedFile);
try{
    document1.removeAllAttachments("Body");
}catch(e){}

var rtFiles:NotesRichTextItem = null;
if(!(document1.getDocument().hasItem("Body"))){
    rtFiles = document1.getDocument().createRichTextItem("Body")
}else{
    rtFiles = document1.getDocument().getFirstItem("Body");
} 
rtFiles.embedObject(lotus.domino.local.EmbeddedObject.EMBED_ATTACHMENT, "",
    correctedFile.getAbsolutePath(), null); 
correctedFile.renameTo(tempFile);

document1.save();

ファイルが格納されるリッチテキスト アイテムは「Body」、データソースの名前は「document1」です。Fileupload コントロールは「fileUpload1」です。

次の 2 つの制限があります。

  1. これを保存ボタンで使用することはできません。完全に更新する通常のボタン/リンクを使用する必要があります(Serdar Basegmezが上で書いたものを参照してください)
  2. アップロード後にもう一度ページを更新する必要があります。そうしないと、アップロードされたファイルがファイル ダウンロード コントロールに表示されません (このコントロールの部分的な更新が機能する可能性があります)。

編集:

申し訳ありませんが、私のせいです。ドキュメントを保存する送信ボタンで上記のコードを使用できます。その後、ページを手動で更新する必要はありません!

于 2012-03-29T13:41:12.797 に答える