【问题标题】:Getting handle of attachment using getattachment method using LotusScript使用 LotusScript 的 getattachment 方法获取附件句柄
【发布时间】:2016-03-03 14:49:07
【问题描述】:

我正在编写一个从文档中提取附件的 Lotus 脚本代码。该代码工作正常,除了一些文档并引发错误: 错误代码:91 - 错误:未设置对象变量

下面是我用来提取的代码:

   If (doc.HasItem("$File")) Then
       attachments = Evaluate("@AttachmentNames", doc)                          
       Forall o In attachments      
            Set AttachmentName = doc.GetAttachment(o)
            Call AttachmentName.ExtractFile(Attachfoldername & "\" & AttachFileNames)                                   
       End Forall
   End If

在调试时,我发现 AttachmentName 变体没有设置,一旦我进入下一行,它只会显示 [NOTESEMBEDDEDOBJECT] 值。请参阅下面的屏幕打印: AttachmentName variable not set

您还可以从上图中看到附件名称包含某些垃圾字符。代码失败并返回相同错误的其他文档很少。所有这些附件的文件名都带有奇怪的字符(例如:“■ß■■1.jpg”、“AR Médipel faible teneur en capasaïcine.doc”)。

使用的表单中没有富文本字段,我无权查看表单的设计,但我可以在文档属性中看到 $FILE 字段。 我最初认为问题可能出在文件名上,因此为了对此进行测试,我将同名文件附加到测试文档的富文本字段中。这次代码成功地按预期提取了附件。所以现在我想知道实际的问题可能是什么。

我是 Lotus Script 的初学者,所以我不知道我是否遗漏了什么。

任何解决此问题的帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: lotus-notes lotusscript


    【解决方案1】:

    我会尝试使用 doc.EmbeddedOjbects() 而不是 Evaluate("@AttachmentNames")。这将返回一个 NotesEmbdeddedObject 数组,因此您不需要使用 doc.getAttachment()。

    我知道使用 Evaluate("@AttachmentNames") 是一种有用的技术,当您有富文本字段中的附件和不在富文本字段中的附件时,但您说没有富文本字段,所以我认为 using 方法应该可以找到您的附件,如果在公式和 LotusScript 之间的边界上的附件名称发生了一些有趣的事情,使用 doc.EmbeddedObjects 可能会避免这个问题。

    您的代码看起来像这样(未经测试!):

        If (doc.HasItem("$File")) Then
           attachments = doc.EmbeddedObjects()                          
           Forall o In attachments   
                if o.Type() = EMBED_ATTACHMENT then
                    Call o.ExtractFile(Attachfoldername & "\" & o.Name())
                endif                                   
           End Forall
       End If
    

    【讨论】:

    • 我尝试了您上面建议的代码,但又一次,附件变量没有在线设置任何值:附件 = doc.EmbeddedObjects() .. 它在下一行——Forall o 在附件中
    • 如果在Notes客户端打开文档,可以看到附件吗?
    • 它是否出现在文档底部的水平线下方?
    • 它实际上出现在文档的顶部,是文档中唯一存在的内容或数据。
    • 附件在文档中的样子如下:i.imgur.com/fswdsz3.jpg
    【解决方案2】:

    你已经非常接近你需要的东西了。 NotesDocument 的 EmbeddedObjects 数组不包括附件 - 因此您需要在 GetAttachment 方法中使用附件文件名列表。我将附件变量声明为变体 - 因此我在 GetAttachment 函数调用中强制使用字符串值以避免类型不匹配问题。

        attachments = Evaluate("@AttachmentNames", Doc)     
         For x = 0 To UBound(attachments)
            Set embedObj = Doc.GetAttachment(CStr(attachments(x)))
            filepath = tempDir + "\" + CStr(attachments(x))
            Call embedObj.Extractfile(filepath)
        Next
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多