【问题标题】:IBM Notes editable fields getting data from parent formIBM Notes 可编辑字段从父表单获取数据
【发布时间】:2016-12-01 07:38:30
【问题描述】:

在 Notes 中,我有一个表单(订单),其中有一个按钮“创建新订单行”,它创建了一个新表单(订单行)。 Order 文档在设计上有一个嵌入式视图,用于获取 orderlines 文档。每个订单行文档都包含一个带有订单文档 ID 的隐藏字段,以便您知道哪个订单行与哪个订单相关联。 Orderline 也是如此,它有一个带有价格的嵌入式视图。

在订单表单中,我有 2 个可编辑的文本字段:AdministrationNumber 和 DebtorNumber。

在 OrderlineForm 中我只得到了 deborNumber

在价格中,我有一个名为“费用”的可编辑数字字段。

所以我以各种方式做到了这一点:

在表单价格的 postOpen 中,我放了这个 LotusScript 代码:

If( (Source.FieldGetText( "AdministrationNumber" ) = "1" ) And   (Source.FieldGetText( "DebtorNumber" ) = "2") ) Then
    Call Source.FieldSetText("FeePercentage",  "4.235")
    Call Source.Refresh()
End If

但是没有用。

在费用的默认值中我也尝试了这个公式代码:

@If((AdministrationNumber="1") & (DebtorNumber= "2");
    "4,235";
        "0"
)

但也没有用..

是否可以根据条件语句打开子表单时设置可编辑字段,其中包含父表单中的数据?

编辑

2种解决方法:

1.

当单击订单表单上的“添加新订单行”按钮时,我将调用脚本库中的一个函数,在该函数中我获取 debnr 和 admnr 的值,然后执行条件语句。如果为 true,则设置 FeePercentage

2.

在名为 admnr 的 orderlline 上添加了新的隐藏字段,当单击 New Orderline 按钮时,它会获取 administratorNr 字段数据。该字段是通过脚本库中的函数设置的。

最终在价格子窗体的 postOpen 中起作用:

Dim doc As NotesDocument
Set doc = Source.Document
If doc.admnra(0) = "1" And doc.debnr(0) = "2" Then
    doc.FeePercentage = 4.235
End If

【问题讨论】:

    标签: formula lotus-domino lotusscript


    【解决方案1】:

    改为使用后端类:

    Dim doc as NotesDocument
    Set doc = Source.Document
    If doc.AdministrationNumber(0) = "1" And doc.DebtorNumber(0) = "2" Then
        doc.FeePercentage = 4.235
    End If
    

    它使您可以轻松访问文档中的所有字段。

    【讨论】:

    • 您是在谈论包含在“订单”表单中的子表单还是不同的表单?
    • 那是一个不同的故事......您有单独的订单文件(表单订单)和订单行(表单订单行,包括子表单价格)。获取 Orderline 的父订单文档并在此处访问字段 AdministrationNumber 和 DebtorNumber。
    • 记住文档(=data)和表单(=design)的区别
    • 如果您在 Orderline 文档中设置字段 AdministrationNumber 和 DebtorNumber 并使用订单文档中的值,然后在 PostOpen 事件中,那么我上面的代码在 Orderline 或 Price 的 PostOpen 事件中有效。
    • 编辑模式无关紧要。
    【解决方案2】:

    您说“子表单”在 Notes 设计中具有特殊含义,但听起来您拥有的是一个名为“Order”的表单、一个名为“OrderLine”的表单和一个 OrderLine 表单使用的名为“Prices”的子表单?

    在这种情况下,请确保 OrderLine 的“公式从选定文档继承值”表单属性被选中。

    如果按钮位于父表单上(而不是查看订单表单嵌入),那么您的默认公式应该会这样做。

    附:您可能希望将默认公式更改为

    @If(
      (AdministrationNumber="1") & (DebtorNumber= "2"); 4235;
      0
    )
    

    以便它返回一个数字而不是看起来像数字的文本。

    【讨论】:

    • 除了开启继承之外,他还应该在他的 OrderLine 表单上放置隐藏的 AdministrationNumber 和 DebtorNumber 字段。
    • 嗯...没有它也可以工作,所以除非出于其他原因它有用...?虽然,也许,如果 OrderLine 文档是响应,那么他应该计算显示 AdministrationNumber 和 DebtorNumber 字段,每个字段都有一个@GetDocField(@Text($REF);@ThisName) 的公式,这将允许现有 orderline 文档的向后兼容性以及更新(当 OrderLine doc刷新)如果 Order 文档的 AdministrationNumber 和 DebtorNumber 字段在 OrderLine 文档首次保存后发生更改。不过,这会使他的状态稍微慢一些。
    • 我相信你是对的。很久很久以前,我一直认为只有在子文档的表单上有一个具有相同名称的实际字段时,继承才有效。我敢肯定,我已经多次被告知这不是真的 - 但很难忘记那些早期的第一印象。
    • 哎呀,我按回车键,但不允许使用多行 cmets。对不起。无论如何... @bboni,当通过在 UI 中编写(即打开)新文档来创建新文档时,并且如果表单启用了“公式从选定文档继承值”属性,那么简要加载文档的时间,并且如果您有一个引用变量的公式,并且该变量不是临时变量,也不是文档上已定义的字段,它将从所选文档中获取值(如果存在) . (在下一条评论中继续)
    • @bboni 所以...它只会查看选定的文档。如果即使您对主文档的响应有响应,也总是想从主文档中获取一个字段,我会隐藏,当组合“OrderDUID”字段时计算,这些字段是订单表单上的@Text(@DocumentUniqueID),并且@ 987654324@ 在所有其他文档上,然后我可以使用 @GetDocField(OrderDUID, "AdministrationNumber") 获取订单上的字段
    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多