通过URL打开文档中的第一个附件

时间:2013-05-08 12:45:43

标签: lotus-domino

我正在查看是否可以在不指定附件名称的情况下打开文档中的附件,因为每个文档只有1个附件。

所以f.x.而不是domain/view/documentKey/$FILE/attachmentName我希望有类似于domain/view/documentKey/$FILE/$firstAttachment

的内容

有可能吗?

5 个答案:

答案 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)

首先,您需要在表单上创建一个富文本字段。之后,打开“表单属性”对话框,然后单击“启动”选项卡(火箭)。

现在,您将有更多选项来启动第一个附件。

enter image description here

[edit] 如果附件是图片,则为URL解决方案。

创建“RichText Lite”字段。将其设置为“缩略图”,但不要调整其大小。在图像附件名称中,为其指定一个有意义的名称。例如。 “image.png”(图片显示了LAttachment)。

enter image description here

之后,您可以直接访问附件。

示例:

http://SERVER/DATABASE.nsf/DOC-UNID/$FILE/image.png

替换以下内容。

  • SERVER = Domino服务器。
  • DATABASE =文档所在的数据库。
  • DOC-UNID =文件UNID号码

如果您在浏览器中打开文档,您将获得更精确的网址结构。

答案 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 个)或以其他方式选择文件之一。运行一个代理可能会有一点额外的开销,但它非常灵活;如有必要,您可以添加点击记录并采取其他后台操作。