如何以编程方式获取文件名以用于此代码?

How do I get the filename programmatically to use with this code?

下面的代码是我的自定义控件上图像控件的计算图像源。如果我 运行 它就像它一样,它会放入 photo.jpg 并且工作正常。问题是我想以编程方式传递该值。我在自定义控件上也有一个上传控件 (fileUpload1) 和一个下载控件 (fileDownload1)。我试过 document1.photo 这是存储 jpg 文件的地方。我尝试了 currentdocument.getitemvalue、getitem、getattachments 的几种变体。但是,到目前为止,我还没有找到办法做到这一点。此外,我尝试将文件名的值设置为上传控件和下载控件的值,但均未成功。

我知道这可能很简单,但是,作为客户端开发人员,这对我来说并不简单。

如有任何帮助,我们将不胜感激。

var doc:NotesDocument = currentDocument.getDocument ();
var UID:string = doc.getUniversalID().toString();
var fp:string = database.getFilePath();
var filename = "photo.jpg"

return '/0/' + UID + '/$file/' + filename

谢谢, 乔丹

可能还有其他方法可以实现这一点,但我通常这样做:

对于图像控件,我需要注意计算资源 URL 在大多数情况下都以数据库的相对路径为前缀,该路径以数据库文件名结尾。所以我只需要添加通常的文件附件 URL,如

/0/docUnid/$File/imageFileName

如果您的文档可能附加了多个文件,我需要找出我希望显示的文件。这可以通过循环

来完成
currentDocument.getAttachmentList(fieldName)

提供 java.util.ListNotesEmbeddedObject 个元素。使用像 .getName() 这样的方法,我就可以找到你要找的那个文件。

编辑:
使用重复显示附加到单个富文本字段的多个图像的快速示例(可能有更好的解决方案,尤其是关于过滤不需要的文件类型的方法;我使用的文件扩展名,只允许 .jpg、.png 和 .gif) .图像显示为简单的 html 列表元素:

<ul>
    <xp:repeat id="repeat1" rows="30" var="pic">
        <xp:this.value><![CDATA[#{javascript:
    var att:java.util.List=docCar.getAttachmentList("Body");
    var it=att.listIterator();
    //new empty array, to be used as the repeater's datasource
    var arr=[]; 
    //build base path for each image file
    var unid=docCar.getDocument().getUniversalID();
    var p="/0/" + unid + "/$File/";
    while(it.hasNext()){
        var e:NotesEmbeddedObject=it.next();
        if(e.getName().endsWithIgnoreCase(".png") || 
            e.getName().endsWithIgnoreCase(".jpg") || 
            e.getName().endsWithIgnoreCase(".gif")){
            //push complete filepath + image filename to array
            arr.push(p + e.getName());
        }
    }
    return arr;}]]></xp:this.value>
        <li>
            <xp:image url="#{javascript:pic}" id="image1">
            </xp:image>
        </li>
    </xp:repeat>
</ul>

希望对您有所帮助

好吧,我想我已经弄明白了。这是现在有效的代码:

var doc:NotesDocument = currentDocument.getDocument (); var UID:string = doc.getUniversalID().toString(); var fp:string = database.getFilePath();

var filename = @AttachmentNames()

return '/0/' + UID + '/$file/' + filename

MJ