Lotus notes 代理创建的文档与gui QuerySave创建的文档之间的差异无法允许ODBC传输

Lotus notes 代理创建的文档与gui QuerySave创建的文档之间的差异无法允许ODBC传输,lotus-notes,Lotus Notes,在Notes应用程序中创建文档后,我将信息从该文档移动到postgres db。 将数据传输到postgres的代理使用文档中的一个字段作为关键字段 我遇到了以下问题: -如果我通过Notes客户端创建文档,则传输不会出现问题。 -如果我从代理创建文档(该代理处理传入的电子邮件并生成有效的密钥字段值),传输将失败,并出现空密钥错误。如果我随后打开并保存该单据,则传输成功 但是,I键字段值不为null。我可以在视图、文档和文档属性中看到它 如果您能想到我该如何解决这个问题,我将不胜感激。 谢谢 克

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

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

但是,I键字段值不为null。我可以在视图、文档和文档属性中看到它

如果您能想到我该如何解决这个问题,我将不胜感激。 谢谢 克莱姆

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

谢谢托尔斯滕的回复。我很感激。嗯,代码没有太多,真的。这是它的一部分。“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将一些数据从文档传输到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.

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

您是从Notes创建记录的吗?在事件和配置DEC中使用代码省去了麻烦。它可以可靠地为您创建文档。

您创建的文档中的项目很可能没有“摘要”属性集。这使得它们在某些函数/子函数中“不可见”

请提供一些有关如何创建项目的代码。如果您像
Set item=New item(doc,“Name”,“Value”)
那样操作,则该项将不会被汇总。然后需要调用
item.issummary=true

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

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


后台LotusScript对表单一无所知,因此不遵守数据类型或格式。。。您必须自己处理。

在Notes客户端中,在QuerySave事件中创建文档的方式与代理创建文档的方式相同吗?因此,文档/表单未在Notes客户端中打开?文档已在Notes客户端中打开。键字段填充在PostOpen事件中。用户填写一些字段并保存文档。我在QuerySave事件中所做的唯一一件事就是标记要传输的文档。当它通过电子邮件创建时,密钥字段在电子邮件处理代理中生成,其他字段由电子邮件内容填充。我知道你说你在视图中看到它,但NotesPeek仍然是IMHO的最终权限。我将使用NotesPeek来比较代理创建的消息和手动创建的消息。并确保检查项目类型是否符合您的预期。如果NotesPeek中的所有内容看起来仍然正确,那么我认为我们需要查看代码才能找到其他建议。嘿,Rich。我检查了NotesPeek,通过电子邮件创建的文档的键字段设置正确,但仍然生成错误。然后我打开并保存了它,它按预期运行。看起来您需要发布创建文档(尤其是关键项)的代码和读取文档的代码。嗨,帕努。实际上,我最初在代码中有一个computeWithForm并将其取出。为了以防万一,我把它加了回去,这没有什么区别。我得再做一些测试。谢谢你的建议。注意:“我可以在视图中看到它”。好的。。。那么它实际上就是总结。。。谢谢澄清,谢谢你的想法!仍然不起作用。我甚至设置了isSummary标志。这种行为仍然存在:如果我从代理创建文档,它将生成错误“lognumber”列中的null值违反了notnull约束”。如果我随后进入文档并保存它,则传输成功。我将尝试创建一个简化版的传输代理,以便发布代码。谢谢奇怪的是,我昨天发布了这个,但没有看到它。
选择fldlst.LogNumber=docWithTransferID.stid(0)
count=Notes\LCConnection.Select(选择fldlst,1,Notes\LCFieldList)
当通过Notes创建文档时,count=1(它会找到Notes文档)。如果是通过代理创建的,则计数=0(未找到文档)。如果我编辑/保存代理创建的文档,count=1(找到的文档)Hi Torsten。我接受了你编辑我文章的想法,这样我就可以使用下降编辑器了。所以,我用更多的代码更新了我的初始条目。谢谢你的想法。我是这样开始的,但是postgres没有连接器,有标准的ODBC。所以第一步是有一个工作的ODBC连接。。。是的,我就是这么做的。我会发布更多的代码。