下面的代码是我的自定义控件上的图像控件的计算图像源。如果我像它一样运行它,它会放入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
答案 0 :(得分:1)
可能还有其他方法可以实现这一目标,但这就是我通常所做的事情:
使用图像控件我需要知道计算资源URL在大多数情况下都是以数据库的相对路径作为数据库文件名结尾。因此,我必须添加的是
中的常用文件附件URL/0/docUnid/$File/imageFileName
如果您的文档中有多个文件附加,我需要找出哪一个是我希望显示的文件。这可以通过循环
来完成currentDocument.getAttachmentList(fieldName)
提供java.util.List
个NotesEmbeddedObject
个元素。使用.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