2

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

所以 fx 而不是domain/view/documentKey/$FILE/attachmentName我想要类似的东西domain/view/documentKey/$FILE/$firstAttachment

可能吗?

4

5 回答 5

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>

如果文档有附件,则第一个附件会在浏览器窗口中打开或提供下载。如果文档没有附件,它会显示“抱歉,文档没有附件”。

于 2013-05-09T09:45:40.280 回答
1

我不认为它确实存在“开箱即用”的 URL。但是你为什么不扩展你自己的代码Rewriting URL in Domino using DSAPI and replace in URL "$firstAttachment" with the first attachment name of document (我知道,找到文档需要一些努力)?

于 2013-05-08T16:06:28.513 回答
0

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

您现在将有额外的选项来启动第一个附件。

在此处输入图像描述

[编辑]如果附件是图像,则 URL 解决方案。

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

在此处输入图像描述

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

例子:

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

替换以下内容。

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

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

于 2013-05-08T15:37:18.627 回答
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,它会打开记录,如果您包含新参数,它会打开第一个附件。

或者,根据打开文档的 url 的位置(例如,如果它在视图中),您可以使用与上面 JS 代码中相同的技巧直接生成打开附件的 url。

于 2013-10-03T17:03:15.637 回答
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 个)或以其他方式选择文件之一。运行代理可能会产生一些额外的开销,但它非常灵活;您可以添加点击记录并在必要时采取其他后台操作。

于 2021-05-24T11:33:30.640 回答