2

我正在创建一个具有多种形式的 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 上工作呢?

4

1 回答 1

1

您的问题提供了大部分答案,只需要使用 dbg_methods 进行一些探索。下面示例中的对象变量FormModel2就是您要查找的内容:

frm_container = ThisDatabaseDocument.FormDocuments.getByName("Form2")
frm_container.open
FormModel2 = frm_container.component.getDrawPage.getforms.getbyindex(0)
FormModel2.Filter [....]

这在从“Form1”运行时有效。

或者,您可以将应该作为过滤器主题的值永久存储在单独的表/行中。

于 2015-01-30T05:07:45.630 回答