我正在创建一个具有多种形式的 Libreoffice Base。Form1 链接到“项目”表,每个项目有多个任务,我可以在同一个 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 上工作呢?