我正在创建一个包含多种形式的Libreoffice Base。 Form1链接到" Projects" table和每个Project都有多个任务,我可以在同一个Form1中将任务显示为子表单,但是,每个项目都有很多任务,每个任务也有子任务所以我想让任务以他们自己的形式,让我们调用Form2。
我在Form1中创建了一个按钮,它将打开Form2,但是,我不知道如何打开它,只显示与按下推送时显示的项目相关的任务按钮。
到目前为止,我能够做到这一点:
读取我要显示任务的projectID(它位于Form1中名为txtProjectID的文本框中):
Doc = StarDesktop.CurrentComponent
Form = Doc.DrawPage.Forms.GetByIndex(0)
ProjID = Form.getByName("txtProjectID").Text
要从Form2打开任务,我找到了两种方法:
Dim Args(1) As New com.sun.star.beans.PropertyValue
Args(0).Name = "ActiveConnection"
Args(0).Value = Form.ActiveConnection
Args(1).Name = "OpenMode"
Args(1).Value = "open"
oForm = thisComponent.Parent.getFormDocuments
oForm.loadComponentFromURL("Form2","_blank",0, Args())
和
oForm = ThisDatabaseDocument.FormDocuments.getByName("Form2")
oForm.Open
两者都可以打开任务表单,但我找不到传递projectID的方法,只能加载与该项目相关的记录。我也找不到Args()的好文档。
问题是,如何打开Form2并仅显示与Form1中的projectID相关的记录?我也希望能够在同一个projectID(而不仅仅是视图)下向Form2添加新记录。
更新
我能够使用以下代码应用过滤器:
odoc2 = thiscomponent
FormModel = odoc2.drawpage.forms.getbyindex(0)
FormModel.Filter =("Tasks.projectID = " & ProjID)
FormModel.ApplyFilter = True
FormModel.reload()
但是,由于我从打开Form2的同一个Sub运行它,因此它将应用于Form1(称为Sub)。我怎样才能让它在Form2上工作呢?
答案 0 :(得分:1)
您的问题提供了大部分答案,只需要对dbg_methods进行一些探索。以下示例中的对象变量FormModel2
就是您要查找的内容:
frm_container = ThisDatabaseDocument.FormDocuments.getByName("Form2")
frm_container.open
FormModel2 = frm_container.component.getDrawPage.getforms.getbyindex(0)
FormModel2.Filter [....]
从“Form1”运行时可以使用。
或者,您可以将应该作为过滤器主题的值永久存储在单独的表/行中。