2013-07-23 55 views
0

我有一個問題,最近讓我感到頭疼。我希望我能在你的幫助下找到解決辦法。Lotus Notes 7 - 從可編輯視圖自動計算一列 - InViewEdit事件

我有一個視圖:嵌入在窗體上的「vwTest」。這是一個可編輯的觀點。該視圖有3列:數量,成本,差異。所有3列的默認值都存在一個名爲「fmTest」的窗體上,字段名稱爲:Number,Cost,Difference。

在主窗體(其中包含視圖)有一個字段(計算)稱爲:TotalValue。

該視圖有2個操作:AddLine和DeleteLine。

我想要做的是:

讓我們說總價值= 5000

  • 用戶完成視圖的第一行:

號碼|成本|差異


1 | 50 | 4950 =>被自動作爲差5000(總價值)和50(第2列的值)之間所計算的第3列的值

  • 用戶完成視圖的第二行:

2 | 60 | 4890 =>第三列值自動計算爲視圖中最後第三列值與60(第二列當前值)之差

我認爲這就像遞歸算法。

TotalValue的值存在,它是一個Number類型字段。

希望找到解決方案並解決此問題!我非常感謝你的幫助和時間!

+0

那你試試這麼遠嗎?請顯示您已經開發的代碼。 –

+0

我試過這樣的:smtth '調用uidoc.FieldSetText(「差異」,uidoc.FieldGetText(「TotalValue」) - uidoc。FieldGetText(「Cost」)) –

+0

你真的需要單獨文檔中的行嗎?如果沒有,那麼有更簡單的方法來實現這一點。 –

回答

0

每次保存後,您必須通過屬於「this」主文檔的所有條目並重新計算總計。我認爲,該「行」的響應 - 文件到主文檔和嵌入視圖是由主文檔的UNID分類...

Dim ses as New NotesSession 
Dim db as NotesDatabase 
Dim viewEmbedded as NotesView 
Dim viwNav as NotesViewNavigator 
Dim ve as NotesViewEntry 
Dim docLine as NotesDocument 
Dim docMain as NotesDocument 

Dim dblTotal as Double 

Set db = ses.CurrentDatabase 
Set docMain = ... 'somehow get the main document, therefor I would need your current code 
dblTotal = docMain.TotalValue(0) 
Set viewEmbedded = db.Getview("vwTest") 
viewEmbedded.AutoUpdate = False 
Set viwNav = viwEmbedded.CreateViewNavFromCategory(docMain.UniversalID) 
Set ve = viwNav.getFirst() 
While Not ve is Nothing 
    Set docLine = ve.Document 
    dblTotal = dblTotal - docLine.Cost(0) 
    If dblTotal <> docLine.Difference(0) then 
    docLine.Difference = dblTotal 
    Call docLine.Save(true, true) 
    End If 
    Set ve = viwNav.getnextDocument(ve) 
Wend 

爲什麼循環?如果有人在第二個和第三個創建後修改第一行,該怎麼辦?那麼2,3和所有後續行的總數必須改變。

此代碼未在Designer中鍵入,可能包含拼寫錯誤。它不包含任何錯誤處理,並且能夠產生複製/ Save-衝突如果不小心使用..

希望幫助

+0

謝謝Tode爲您提供幫助!那麼,我應該通過將其放入表單的哪個事件來驗證此代碼?我猜它不屬於視圖的InViewEdit?再次感謝! –

+0

我假設你已經有了你的inviewedit事件的代碼。在這種情況下,您在完成自己的計算後會調用代碼。注意事項:只要編輯列就不會做任何事情......如果需要,您必須編寫代碼以獲取您輸入的值返回到相應的後端文檔/創建新文檔 –

+0

我不'沒有用於InViewEdit計算的代碼,我會試一試,讓你知道 –