0

我正在维护的 LightSwitch 应用程序有一个有趣的问题,存在混淆的空间,因此将尝试详细解释并回答任何澄清问题。

我有一个 LightSwitch AddEdit 屏幕,使用表中布尔值的默认“翻转开关”控件,设置为是​​/否选项(因此显示是或否作为值,实际上保存 0 或 1),在创建新条目时,控件默认显示“否”。问题在于,根据用户拥有的权限,控件的行为会有所不同,或者:

1)预期/期望的行为:翻转开关默认设置为“否”,如果屏幕保存而不触摸它“否”被保存到数据库中(用户看到的和保存的内容是一致的,翻转switch 永远不会为 NULL)。

2) 意外行为:翻转开关看起来设置为“否”,但当用户尝试保存屏幕时,收到警告“错误:无法继续。页面上存在验证错误”,因为存在布尔值不允许 NULL (相关的翻转开关用“此字段是必需的”突出显示)用户可以将翻转开关控件切换为是并返回到否,此时屏幕将保存(触摸控件似乎设置它到 NULL 的值),但令人不安的是,其他允许 NULL 的翻转开关被保存为 NULL 而不是它们在屏幕上显示的“否”,这是令人困惑和有问题的,并且需要用户重新输入所有 NULL 条目一旦我修复了这个错误。

到目前为止我所做的故障排除表明,该行为取决于用户设置的 LightSwitch 访问控制权限,如果他们在一个组中(系统管理员),他们在另一个组(数据库操作员)中获得行为 1,他们获得 2。

如果将新行添加为 SystemAdministrator,则它似乎也取决于“添加”而不是“编辑”,数据将作为行为 1 添加。如果编辑现有条目,您将获得行为 2 作为两种权限。

我测试了注释掉过滤该表的数据源权限的 VB 代码(TableName_CanRead、TableName_CanWrite、TableName_CanInsert、TableName_CanUpdate、TableName_CanDelete、TableName_CanExecute、TableName_Filter),因为这似乎是一个可能的差异点,它并没有改变行为.

我希望更熟悉 LightSwitch 环境的人能够将我指向另一个可能出现此问题的地方,并提供一些关于在哪里查找或进一步故障排除步骤的提示。我目前看不到权限组如何显着影响翻转开关控制行为

4

1 回答 1

0

在我看来,您的方案的最佳实践如下:

在屏幕上创建的代码块上,为每个开关使用以下代码:

myapp.SCREENNAME.created = function (screen) {
    if (screen.TABLENAME.theFlipSwitchA == null) {
        screen.TABLENAME.theFlipSwitchA = false;
    }

    if (screen.TABLENAME.theFlipSwitchB == null) {
        screen.TABLENAME.theFlipSwitchB = true;
    }
}

这将确保在开始时将空值替换为正确的 TRUE 或 FALSE 值,并且只有在用户更改它们时才会更改。

此外

翻转开关有 2 个视图可用,即是/否和开/关,可以在所选翻转开关的属性中访问:

在此处输入图像描述

要确保的一件事是您使用Data Binding属性来指定值,而不是像通常在表单应用程序上那样使用 Name。

在此处输入图像描述

于 2017-04-04T16:41:22.213 回答