0

Notes アプリでドキュメントを作成した後、そのドキュメントから postgres データベースに情報を移動しています。データを postgres に転送するエージェントは、ドキュメント内のフィールドをキー フィールドとして使用します。

次の問題が発生しています。
- ノーツ クライアント経由でドキュメントを作成すると、転送は問題なく行われます。- エージェント (受信メールを処理し、有効なキー フィールド値を生成するエージェント) からドキュメントを作成すると、null キー エラーで転送が失敗します。ドキュメントを開いて保存すると、転送は成功します。

ただし、キー フィールドの値は null ではありません。ビュー、ドキュメント、およびドキュメントのプロパティで確認できます。

どうすればこれを理解できるかについての考えをいただければ幸いです。ありがとう!クレム

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

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 を介して、ドキュメントから 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

メモからレコードを作成しますか? イベント内のコードで問題を解決し、DECS を構成します。ドキュメントを確実に作成します。

于 2013-10-14T15:48:48.170 に答える