徽章

Ninext 通过在某些标签页上添加徽章来增强 Ninox 界面,从而突出显示重要信息。

  • 在“文件”标签页上,蓝色徽章显示添加到该记录的附件数量。
  • 在“评论”标签页上,红色徽章表示有新消息,灰色徽章则表示已有较早的评论。
  • 在自定义标签页上,您可以修改外观(颜色、标题)并添加徽章,以引起对关键信息的注意。

这些徽章让您无需逐个打开标签页,就能快速发现新信息。

徽章以及下文介绍的标签页自定义,可以在 Ninext 设置的“界面增强”部分中停用:文件和评论上的徽章(默认启用)。

“文件”和“评论”标签页上的徽章

文件标签页

  • 蓝色徽章:当存在未关联到任何“文件”字段的文件时出现,即可以在附件标签页下找到的文件。所显示的数字对应这些独立附件的数量。
  • 无徽章:未检测到任何独立附件。

评论标签页

  • 红色徽章:显示新评论的数量,即发布不足 24 小时的评论。
  • 灰色徽章:当没有任何评论发布不足 24 小时时,显示评论总数。
  • 无徽章:该记录没有任何评论。

图片.png

徽章会在相应图标下告知您已有的条目:

在这个例子中,蓝色的 1 表示该记录保存了一个附件,灰色的 1 表示该记录有一条评论。

自定义徽章

在每个标签页的“Display field only, if”公式中,您可以声明一个 onUpdate 函数,它返回一个描述标签页及其徽章的 JSON 对象。下面的示例来自示例数据库中的“Badges”表:其中的 Caption、Color、'badge.caption'……都是该表的字段。

Ninox
function onUpdate(event : any) do
 debug(formatJSON(event));
 {
  caption: Caption,
  color: Color,
  backgroundColor: BackgroundColor,
  tooltip: Tooltip,
  badge: {
   caption: 'badge.caption',
   color: 'badge.color',
   backgroundColor: 'badge.backgroundColor'
  }
 }
end;
true

使用 Ninext 自定义标签页

图片.png

借助 Ninext,您可以通过在标签页的“Display field only, if”公式中定义一个名为 onUpdate 的函数,来修改 Ninox 中用户自定义标签页的外观。该函数返回一个对象,告知 Ninext 需要更改哪些视觉元素。您可以:

  • 调整标签页标题(caption)和工具提示。
  • 更改文字颜色和背景颜色(普通状态或选中状态)。
  • 设置关联表单的背景颜色。
  • 在标签页上显示徽章,以突出重要信息。

JSON 属性速览

属性说明示例 / 用法
caption标签页上显示的标题。"To Invoice" / "View Invoice"
tooltip鼠标悬停在标签页上时显示的文字。"Click to view details"
color标签页未选中时的文字颜色。"#333333"
backgroundColor标签页未选中时的背景颜色。"#ededed"
formBackgroundColor标签页处于激活状态时表单(编辑器)的背景颜色。"#fafafa"
selected.color标签页选中时的文字颜色。"#ffffff"
selected.backgroundColor标签页选中时的背景颜色。"#4970ff"
badge.caption徽章中显示的文字、数字或符号。它始终是文本:请用 text() 转换数字。空文本会隐藏徽章。"3"(表示 3 位新客户)或 "!"(警示)
badge.color徽章的文字颜色(默认为白色)。"#ffffff"
badge.backgroundColor徽章的背景颜色(默认为红色)。"#4970ff"

总体流程

  • 定义 onUpdate 函数
    在标签页的“Display field only, if”公式中,创建一个名为 onUpdate 的函数。该函数必须返回一个对象(类似 JSON),用于描述要修改哪些显示元素。它的参数是上一次调用时它所返回的对象(第一次调用时为空对象)。
  • 返回一个布尔值以决定可见性
    “Display field only, if”公式必须以返回 true 或 false 结束,以指明该标签页是否应当显示。
  • Ninext 应用这些修改
    每当用户打开或刷新记录时,Ninext 都会运行 onUpdate 函数,读取返回的对象,并动态地将外观更改应用到标签页上。

实现示例

完整示例(多个属性)

Ninox
"Declaration of the onUpdate function";
function onUpdate(tabValues : any) do
    let nb := this.NumberTest;
    {
        caption: if nb > 0 then "To Invoice" else "View Invoice" end,
        tooltip: "Click to view details",
        color: "#333333",
        backgroundColor: "#ededed",
        formBackgroundColor: "#fafafa",
        selected: {
            color: "#ffffff",
            backgroundColor: "#4970ff"
        },
        badge: {
            caption: if nb = 3 then "3" else if nb = -1 then "!" else "" end,
            color: "#ffffff",
            backgroundColor: if nb = 3 then "#4970ff" else if nb = -1 then "#ff0000" else "#cccccc" end
        }
    }
end;

"Determine whether the tab is displayed: shown if NumberTest > 0";
if this.NumberTest > 0 then
    true
else
    false
end

说明:

  • 该函数不包含 return:Ninox 的语言中没有这个关键字。它返回最后一个表达式的值,这里就是该对象。
  • caption 根据 NumberTest 更改标签页标题。
  • tooltip 在鼠标悬停时显示一段文字信息。
  • color 和 backgroundColor 定义未选中状态下的颜色。
  • selected 包含标签页激活状态下的颜色。
  • badge 添加一个指示标记(数字或感叹号)以示强调;其他情况下,其标签为空,徽章不会出现。

最简示例(仅徽章)

Ninox
"Declaration of the onUpdate function";
function onUpdate(tabValues : any) do
 let newClients := this.NewClients;
 {
  badge: {
   caption: if newClients > 0 then text(newClients) else "" end,
   color: "#ffffff",
   backgroundColor: "#4970ff"
  }
 }
end;
"The tab is always displayed";
true

说明:

  • 仅返回 badge 属性。
  • 如果 NewClients 大于 0,则显示其值,并由 text() 转换为文本;否则标签为空,徽章不会出现。
  • 该徽章为蓝色背景上的白色文字。

要点

  • 最后必须返回布尔值
    如果末尾不返回 true 或 false,标签页将不可见。
  • 徽章标签始终是文本
    只有当 badge.caption 是非空文本时,Ninext 才会显示徽章。数字(3 而不是 "3")会让徽章保持隐藏:请使用 text()。
  • 单独求值的函数
    Ninext 只从公式中提取 onUpdate 函数,然后在记录的上下文中单独对它求值。因此,它看不到“Display field only, if”中其他地方声明的变量或其他函数:请在 onUpdate 内部声明它所需要的一切。它可以读取记录的字段(this.NumberTest),也可以调用数据库的全局函数。