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

时间:2016-06-16 20:27:03

标签: xpages xpages-ssjs

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

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

非常感谢任何帮助。

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

谢谢, MJ

2 个答案:

答案 0 :(得分:1)

可能还有其他方法可以实现这一目标,但这就是我通常所做的事情:

使用图像控件我需要知道计算资源URL在大多数情况下都是以数据库的相对路径作为数据库文件名结尾。因此,我必须添加的是

中的常用文件附件URL
/0/docUnid/$File/imageFileName

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

来完成
currentDocument.getAttachmentList(fieldName)

提供java.util.ListNotesEmbeddedObject个元素。使用.getName()之类的方法然后我可以找到您正在寻找的文件。

修改
快速示例使用重复显示多个图像sattached到单个richtext字段(可能有更好的解决方案,特别是关于过滤不需要的文件类型的方式;我使用文件扩展名,只允许.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>

希望这有帮助

答案 1 :(得分:0)

嗯,我想我已经弄清楚了。以下是现在可以使用的代码:

  

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

     

var filename = @AttachmentNames()

     

返回'/ 0 /'+ UID +'/ $ file /'+ filename

MJ