我正在寻找是否可以在不指定附件名称的情况下从文档中打开附件,因为每个文档只有 1 个附件。
所以 fx 而不是domain/view/documentKey/$FILE/attachmentName
我想要类似的东西domain/view/documentKey/$FILE/$firstAttachment
可能吗?
我正在寻找是否可以在不指定附件名称的情况下从文档中打开附件,因为每个文档只有 1 个附件。
所以 fx 而不是domain/view/documentKey/$FILE/attachmentName
我想要类似的东西domain/view/documentKey/$FILE/$firstAttachment
可能吗?
这是使用 XPage 打开文档的第一个附件的解决方案。
打开附件的网址是这样的
http://Server/Database.nsf/openAttachment.xsp?id=8f29ad7c7e86d3edc1257b65005ab815
参数id=
具有包含附件的文档的 DocumentUniqueID。XPages“openAttachment”有这个代码
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.beforePageLoad><![CDATA[#{javascript:
var docId = context.getUrlParameter('id');
var att = session.evaluate("@AttachmentNames", database.getDocumentByUNID(docId));
if (att[0] != "") {
var url = context.getUrl().toString().split(view.getPageName())[0] + "/0/" + docId + "/$FILE/" + att[0];
facesContext.getExternalContext().redirect(url)
}}]]>
</xp:this.beforePageLoad>
Sorry, document has no attachments
</xp:view>
如果文档有附件,则第一个附件会在浏览器窗口中打开或提供下载。如果文档没有附件,它会显示“抱歉,文档没有附件”。
我不认为它确实存在“开箱即用”的 URL。但是你为什么不扩展你自己的代码Rewriting URL in Domino using DSAPI and replace in URL "$firstAttachment" with the first attachment name of document (我知道,找到文档需要一些努力)?
首先,您需要在表单上创建一个富文本字段。之后,打开表单属性对话框并单击启动选项卡(火箭)。
您现在将有额外的选项来启动第一个附件。
[编辑]如果附件是图像,则 URL 解决方案。
创建一个“RichText Lite”字段。将其设置为“缩略图”,但不要调整其大小。在图像附件名称中给它一个有意义的名称。例如。“image.png”(图像显示 LAttachment)。
之后,您可以直接访问附件。
例子:
http://SERVER/DATABASE.nsf/DOC-UNID/$FILE/image.png
替换以下内容。
如果您在浏览器中打开文档,您将获得更准确的 URL 结构。
我建议您创建自己的虚拟对象url parameter
,如下所示:
http://dummy.url.com/database.nsf/0/documentunid?opendocument&dummyurlparameter=yes
然后通过像这样的计算文本通过javascript将代码添加到您的表单中
"window.location.replace(\"/" + @WebDbName + "/0/" + @Text(@DocumentUniqueID) +
"/$file/" + @URLEncode("Domino";@Subset(@AttachmentNames;1)) + "\")"
然后,您可以将此代码放在 @If 中,也可以根据以下内容在此文本上使用隐藏公式
@URLQueryString("urlparameter") != "yes"
结果将是,如果您传递一个普通的文档打开 url,它会打开记录,如果您包含新参数,它会打开第一个附件。
或者,根据打开文档的 url 的位置(例如,如果它在视图中),您可以使用与上面 JS 代码中相同的技巧直接生成打开附件的 url。
使用 LotusScript 代理也很容易做到。使用参数调用代理以识别附件的位置,UNID 或文档“密钥”。代理名称和参数可以放在可点击的链接/锚标记中。当代理运行时,找到带有附件的文档,识别“第一个”附件,然后重定向以打开它。这与其他答案中概述的 XPage 方法相似。
<a href="file?open&UnidOrKey">Open attachment</a>
其中 'file' 是代理的名称,然后在代理代码中:
Sub Initialize
'open first attachment
'outline
'find first attach
'redirect to open it by name
Dim s As New NotesSession
Dim db As NotesDatabase
Dim ctx As NotesDocument
Dim doc As NotesDocument
Dim qs As String
Dim unid As String
Dim files as variant
Set db = s.Currentdatabase
Set ctx = s.Documentcontext
qs = ctx.Query_String_Decoded(0)
unid = StrRight(qs, "&")
Set doc = vw.Getdocumentby(unid)
If doc Is Nothing Then
Print "Not found"
Else
'code to get filelist
files = Eval(@AttachmentNames, doc)
'Also possible to get attached files with eval!
If isempty(Files) Then
Print "No files found"
Else
Print "[0/" & unid & "/$file/" & files(0) & "]"
'Alternative redirect:
'Print "location: 0/" & unid & "/$file/" & files(0)
End If
End If
End Sub
也可以传入文档标题字符串并使用任何键在视图中查找它,并添加其他参数以选择任何附件,或者按位置(获取第 N 个)或以其他方式选择文件之一。运行代理可能会产生一些额外的开销,但它非常灵活;您可以添加点击记录并在必要时采取其他后台操作。