我正在查看是否可以在不指定附件名称的情况下打开文档中的附件,因为每个文档只有1个附件。
所以f.x.而不是domain/view/documentKey/$FILE/attachmentName
我希望有类似于domain/view/documentKey/$FILE/$firstAttachment
有可能吗?
答案 0 :(得分:3)
这是使用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>
如果文档有附件,则第一个附件在浏览器窗口中打开或提供下载。如果文档没有附件,则显示“抱歉,文档没有附件”。
答案 1 :(得分:1)
我认为它不存在“开箱即用”的URL。 但是为什么不扩展自己的代码Rewriting URL in Domino using DSAPI并将URL“$ firstAttachment”替换为文档的第一个附件名称(我知道,查找文档需要花费一些精力)?
答案 2 :(得分:0)
首先,您需要在表单上创建一个富文本字段。之后,打开“表单属性”对话框,然后单击“启动”选项卡(火箭)。
现在,您将有更多选项来启动第一个附件。
[edit] 如果附件是图片,则为URL解决方案。
创建“RichText Lite”字段。将其设置为“缩略图”,但不要调整其大小。在图像附件名称中,为其指定一个有意义的名称。例如。 “image.png”(图片显示了LAttachment)。
之后,您可以直接访问附件。
示例:
http://SERVER/DATABASE.nsf/DOC-UNID/$FILE/image.png
替换以下内容。
如果您在浏览器中打开文档,您将获得更精确的网址结构。
答案 3 :(得分:0)
我建议您创建自己的虚拟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的位置(例如,如果它在视图中),您可以使用与上面的JS代码相同的技巧生成直接打开附件的URL。
答案 4 :(得分:0)
使用 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 个)或以其他方式选择文件之一。运行一个代理可能会有一点额外的开销,但它非常灵活;如有必要,您可以添加点击记录并采取其他后台操作。