EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

确定按钮、控制器或编辑器为什么处于禁用状态

在构建应用程序时,您可能需要确定为什么某个ActionController在特定Window中不处于活动状态(可见)。可能由于各种原因而停用或禁用操作:安全系统权限,当前视图为只读,当前视图的对象类型不便以及其他特定参数。由于不同的原因,当前视图也可能被设为只读。可能需要进行彻底的调试以确定实际原因。为此,eXpressApp框架提供了“诊断信息操作”。该操作将显示一个窗口,其中包含加载到控制器上的所有控制器和操作的基本信息。当前视图上的应用程序模型,以及应用于该视图的验证规则。此信息将帮助您发现问题并解决问题。本主题详细介绍如何将Diagnostic Info Action添加到您的应用程序并使用它来获取所需的信息。

启用DiagnosticInfo操作

要将诊断信息操作添加到UI(WinForms或ASP.NET;不支持Mobile),请执行以下操作。

  • 打开应用程序项目的配置文件。在WinForms应用程序项目中,它称为App.config;在ASP.NET项目中,它称为Web.config
  • 找到appSettings部分的EnableDiagnosticActions键。默认情况下,此键的值为False。这就是为什么“诊断信息操作”未添加到“应用程序模型”的原因。
  • EnableDiagnosticActions键的值设置为True。这会将“诊断信息”操作添加到应用程序模型,并且该操作将添加到UI。
<add key="EnableDiagnosticActions" value="True" />

诊断信息的行动是在实施DevExpress.ExpressApp.SystemModule.DiagnosticInfoController并包含在诊断行动容器。下图演示了各种模板上Diagnostic Info Action的位置。

WinForms:

DiagnosticInfo_Action

ASP.NET:

DiagnosticInfo_Action_Web

诊断信息的行动是一个SingleChoiceAction。单击此操作的项目时,将调用带有DiagnosticInfoObject_DetailView详细视图的对话框窗口。该DiagnosticInfoObject.AsText属性包含XML格式的信息。

DiagnosticInfo_Window

分析DiagnosticInfo操作输出

以下是确定为何禁用操作的必需步骤。

  • 确定要调试的动作的标识符。如果在代码中实现了Action,则采用ActionBase.Id值。否则,请参考“确定操作的控制器和标识符”主题以查看如何获取内置或第三方操作的标识符。
  • 单击诊断| 动作信息,并在输出XML中搜索动作标识符。
  • 研究找到的专用于目标Action及其控制器的XML元素。例如:

    <Controller Name="OpenObjectController" FullName="DevExpress.ExpressApp.Win.SystemModule.OpenObjectController" Active="True">
      <ActiveList>
        <Item Key="View is assigned" Value="True" />
        <Item Key="View type is ObjectView" Value="True" />
        <Item Key="PropertyEditor has ObjectSpace" Value="True" />
      </ActiveList>
      <Actions>
        <Action ID="OpenObject" Caption="Open Related Record" TypeName="SimpleAction" Category="OpenObject" Active="False" Enabled="True" AdditionalInfo="">
          <ActiveList>
            <Item Key="Controller active" Value="True" />
            <Item Key="HasReadPermissionToTargetType" Value="True" />
            <Item Key="DataViewMode" Value="False" />
          </ActiveList>
        </Action>
      </Actions>
    </Controller>
    
  • 如果Controller或Action元素的ActiveEnabled属性返回“ False”,请研究嵌套的ActiveList和EnabledList元素下的每个单独项目。每个属性的Key属性都简短地描述了原因标识符。这些嵌套项目的所有Value属性的叠加形成父Action或其Controller的结果Active或Enabled值。

DiagnosticInfo参考

选择“动作信息”项目时在调用的窗口中显示的信息包括以下内容。

部分

定义

模板

指定当前窗口的上下文名称和模板的类型名称。

范本| DefaultActionContainer

指定当前模板的默认操作容器的名称(请参阅 IFrameTemplate.DefaultContainer)。

范本| DefaultActionContainer | 动作

列出在默认操作容器中注册的操作(请参阅IActionContainer.Actions)。

范本| DefaultActionContainer | 动作| 行动

指定操作的ID(请参阅ActionBase.Id)。

范本| 动作容器

列出当前模板的动作容器。

范本| ActionContainers | 容器

指定操作容器的名称。

范本| ActionContainers | 货柜| 动作

列出在当前操作容器中注册的操作(请参阅IActionContainer.Actions)。

范本| ActionContainers | 货柜| 动作| 行动

指定操作的ID(请参阅ActionBase.Id)。

控制器

列出所有加载到应用程序模型的控制器。

控制器| 控制器

指定控制器的名称和Active状态(请参阅Controller.Active)。

控制器| 控制器| 活动清单

允许您将Controller.Active收集项的状态与预期状态进行比较。

控制器| 控制器| ActiveList | 物品

指定Controller.Active列表中项目的键和值。

控制器| 控制器| 动作

列出当前Controller中包含的Action(请参阅Controller.Actions)。

控制器| 控制器| 动作| 行动

指定以下操作详细信息。

控制器| 控制器| 动作| 动作| 活动清单

允许您将ActionBase.Active集合项的状态与预期状态进行比较。

控制器| 控制器| 动作| 动作| ActiveList | 物品

指定ActionBase.Active列表中项目的键和值。

控制器| 控制器| 动作| 动作| 启用清单

允许您将ActionBase.Enabled收集项目的状态与预期状态进行比较。

控制器| 控制器| 动作| 动作| EnabledList | 物品

ActionBase.Enabled列表中指定项目的键和值。

控制器| 控制器| 动作| 动作| 项(对于SingleChoiceAction类型的Action )

列出ChoiceActionItem.Items集合中包含的项目。

控制器| 控制器| 动作| 动作| 物品| 项目(用于SingleChoiceAction类型的操作)

描述一个项目:其标题,活动和已启用状态。如果该项目具有嵌套项目的集合(请参见ChoiceActionItem.Items),则还将列出并描述它们。

控制器| 控制器| 动作| 动作| 物品| 项目| ActiveList(用于SingleChoiceAction类型的Action )

使您可以将ChoiceActionItem.Active收集项状态与预期状态进行比较。

控制器| 控制器| 动作| 动作| 物品| 项目| ActiveList | 项目(用于SingleChoiceAction类型的操作)

ChoiceActionItem.Active列表中指定项目的键和值。

控制器| 控制器| 动作| 动作| 物品| 项目| EnabledList(用于SingleChoiceAction类型的Action )

使您可以将ChoiceActionItem.Enabled收集项目的状态与预期状态进行比较。

控制器| 控制器| 动作| 动作| 物品| 项目| EnabledList | 项目(用于SingleChoiceAction类型的操作)

ChoiceActionItem.Enabled列表中指定项目的键和值。

选择“查看信息”项时在调用的窗口中显示的信息包括以下内容:

部分

定义

详细视图

描述当前视图。写入以下属性的值。

DetailView | AllowNewList

使您可以将View.AllowNew集合项的状态与预期状态进行比较。

DetailView | AllowNewList | 物品

View.AllowNew列表中指定项目的键和值。

DetailView | 允许编辑列表

使您可以将View.AllowEdit集合项的状态与预期状态进行比较。

DetailView | AllowEditList | 物品

View.AllowEdit列表中指定项目的键和值。

DetailView | AllowDeleteList

允许您将View.AllowDelete集合项的状态与预期状态进行比较。

DetailView | AllowDeleteList | 物品

View.AllowDelete列表中指定项目的键和值。

DetailView | 属性编辑器

列出当前视图中包含的属性编辑器。

DetailView | 属性编辑器| 属性编辑器

描述属性编辑器:

DetailView | 属性编辑器| PropertyEditor | 允许编辑列表

允许您将PropertyEditor.AllowEdit集合项的状态与预期状态进行比较。

DetailView | 属性编辑器| PropertyEditor | AllowEditList | 物品

PropertyEditor.AllowEdit列表中指定项目的键和值。

列表显示

描述当前的列表视图。写入以下属性的值:

ListView | AllowNewList

使您可以将View.AllowNew集合项的状态与预期状态进行比较。

ListView | AllowNewList | 物品

View.AllowNew列表中指定项目的键和值。

ListView | 允许编辑列表

使您可以将View.AllowEdit集合项的状态与预期状态进行比较。

ListView | AllowEditList | 物品

View.AllowEdit列表中指定项目的键和值。

ListView | AllowDeleteList

允许您将View.AllowDelete集合项的状态与预期状态进行比较。

ListView | AllowDeleteList | 物品

View.AllowDelete列表中指定项目的键和值。

ListView | 列表编辑器

描述当前的列表视图的编辑器(请参见ListEditor)。写入以下属性的值。

选择“规则信息”项目时在调用的窗口中显示的信息包括以下内容。

部分 定义
规则 列出在应用程序模型中注册的所有验证规则。

有关操作的自定义诊断信息

您可以在操作上提供自定义诊断信息。为此,请使用ActionBase.DiagnosticInfo属性。它的值将被分配给AdditionalInfo项目控制器内| 控制器| 动作| 动作部分。在以下代码中,从SetProprityController中为SetPriorityAction指定了DiagnosticInfo属性,该属性在MainDemo中实现(请参阅使用选项选择添加动作):

public partial class SetPriorityController : ViewController {
   //...
   private void SetPriorityController_AfterConstruction(object sender, EventArgs e) {
      SetPriorityAction.DiagnosticInfo  = "\r\n"   "Hello!";
   }
   // ...
}

下面的诊断信息摘要演示了在主窗口中显示联系人时SetPriorityController及其SetPriorityAction的状态。

<Controller Name="SetPriorityController" 
            FullName="MainDemo.Module.SetPriorityController" Active="True">
  <ActiveList>
    <Item Key="View is assigned" Value="True" />
    <Item Key="Activating is allowed" Value="True" />
    <Item Key="!ViewChanging.Cancel" Value="True" />
  </ActiveList>
  <Actions>
    <Action ID="SetPriorityAction" TypeName="SingleChoiceAction" 
         Category="RecordEdit" Active="False" Enabled="True" AdditionalInfo="Hello!">
      <ActiveList>
        <Item Key="EmptyItems" Value="True" />
        <Item Key="Controller active" Value="True" />
        <Item Key="ObjectType" Value="False" />
        <Item Key="HideActionsViewController" Value="True" />
      </ActiveList>
      <EnabledList>
        <Item Key="EmptyItems" Value="True" />
        <Item Key="ByContext_RequireMultipleObjects" Value="True" />
      </EnabledList>
    </Action>
  </Actions>
</Controller>

SetPriorityAction在当显示任务的主窗口和上述确认的诊断信息,这行动当前停用激活。

转载保留此链接,注明出处