0

在 Notes 应用程序中创建文档后,我正在将信息从该文档移动到 postgres 数据库。将数据传输到 postgres 的代理使用 doc 中的字段作为关键字段。

我遇到了以下问题:
- 如果我通过 Notes 客户端创建文档,则传输不会出现问题。- 如果我从代理(处理传入的电子邮件并生成有效的键字段值)创建文档,则传输失败并出现空键错误。如果我然后打开并保存文档,则传输成功。

然而,我的关键字段值不为空。我可以在视图、文档和文档属性中看到它。

任何关于我如何能够解决这个问题的想法都将不胜感激。谢谢!克莱姆

==============================

感谢 Torsten 的回复。我很感激。好吧,代码并不多,真的。这是其中的一部分。“x.LogNumber”返回一个字符串。格式类似于 T1234CP。我最终添加了 computeWithForm 并设置了 IsSummary,但我认为没有必要。

atdoc.logNumber = x.LogNumber

Call atdoc.computeWithForm(false, false)
Dim lnItem As NotesItem
Set lnItem = atDoc.getfirstitem("logNumber")
lnItem.IsSummary=True       
Call atdoc.save(True, False)

======================================== 一旦创建了文档,代理就会运行传输通过 odbc 从 doc 到 postgres db 的一些数据:

'.. define the 'key field' to be use in the connection.select call 
Dim selectFldLst As New LCFieldList
'.. add the key field name to the LCfieldList object.
Call selectFldLst.Append(NotesKeyFieldName, LCTYPE_TEXT)
'.. set this field to be the key field.
selectFldLst.Getfield(1).flags = LCFIELDF_KEY       

Set Notes_LCFieldList = New LCFieldList ' flSrc
Set odbcDB_LCfieldList = New LCFieldList ' flDest
'.. get the key of the doc to transfer.     
Set docWithTransferID = docsToTransferViewEntry.Document            
selectFldLst.LogNumber = Trim(docWithTransferID.stid(0)) 
count = Notes_LCConnection.Select(selectFldLst, 1, Notes_LCFieldList)
                        ^--- This selects the fields from the Notes document.  This is where it fails.  It returns 0 for 'count'.  It should return 1.  If I save the document manually, it works.
4

3 回答 3

1

听起来你的表单正在做某事。作为一个快速而肮脏的修复,您可以doc.computeWithForm()在保存之前尝试在您的代理中。

于 2013-10-10T18:53:11.693 回答
0

您创建的文档中的项目很可能没有设置“摘要”属性。这使得它们对于某些功能/潜艇“不可见”......

请提供一些有关如何创建项目的代码。如果您这样做,Set item = New Item(doc, "Name", "Value")那么该项目将不是摘要。然后你需要调用一个item.issummary = true

考虑到我猜想的最后一条评论,代理使用错误的数据类型设置了项目。同样:代理的代码将有助于识别这一点。例如,如果文档中的字段是文本类型,并且代理编写了类似的 docWithTransferID.stid = 1内容,那么一切“似乎”都正常,因为该字段在视图和表单中正确显示。但在文档的属性中,它将显示为数字。保存文档后,表单的设计将强制它成为文本。

反之亦然。如果代理从文本文件(例如)中读取数据并执行类似的操作docWithTransferID.stid = "1",则该项目将是文本,无论它在表单中如何定义。一旦您保存文档 -> 瞧,它将再次成为一个数字。

背景 LotusScript 对表单一无所知,因此不遵守数据类型或格式……您必须自己注意这一点。

于 2013-10-14T16:46:03.340 回答
0

您从 Notes 创建记录?省去事件中代码的麻烦并配置 DECS。它为您可靠地创建文档。

于 2013-10-14T15:48:48.170 回答