为什么 Action/ViewController/ProperttyEditor不可见或不可用?

英文版:https://documentation.devexpress.com/eXpressAppFramework/112818/Concepts/Extend-Functionality/Determine-Why-an-Action-Controller-or-Editor-is-Inactive

构建应用程序时,您可能需要确定Action控制器在特定窗口中不可用(可见)的原因可以由于各种原因停用或禁用操作:安全系统权限,当前视图是只读的,当前视图的不方便对象类型以及其他特定参数。由于各种原因,当前视图也可能是只读的。可能需要进行彻底的调试以确定实际原因。为此,eXpressApp Framework提供了诊断信息操作。此操作显示一个窗口,其中包含有关加载到的所有控制器和操作的基本信息应用程序模型在当前View上,以及应用于View的验证规则此信息将帮助您查找问题并修复问题。本主题详细介绍了如何将诊断信息操作添加到应用程序并使用它来获取所需信息。

  • 启用DiagnosticInfo操作
  • 分析DiagnosticInfo操作输出
  • DiagnosticInfo参考
  • 有关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并包含在诊断行动容器。下图显示了各种模板上诊断信息操作位置。

的WinForms:

ASP.NET:

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

 

 

扩展 分析DiagnosticInfo操作输出

 

 

以下是确定禁用操作的原因所需的步骤。

  • 确定要调试的Action的标识符。如果在代码中实现了Action,请使用ActionBase.Id值。否则,请参阅确定操作的控制器和标识符主题,以了解如何获取内置或第三方操作的标识符
  • 单击诊断 | 操作信息并在输出XML中搜索操作标识符。
  • 研究专门针对目标Action及其Controller的找到的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>

 

  • 如果ControllerAction元素ActiveEnabled属性返回“False”,则研究嵌套的ActiveListEnabledList元素下的每个单独项每个属性Key属性很快描述了原因标识符。这些嵌套项的所有Value属性的叠加形成父Action或其Controller 的结果ActiveEnabled值。

 

 

扩展 DiagnosticInfo参考

 

 

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

部分

定义

模板 指定当前Window的上下文名称和Template的类型名称。
模板| DefaultActionContainer 指定当前模板的默认操作容器的名称(请参阅 IFrameTemplate.DefaultContainer)。
模板| DefaultActionContainer | 操作 列出在默认操作容器中注册的操作(请参阅IActionContainer.Actions)。
模板| DefaultActionContainer | 行动| 行动 指定Action的ID(请参阅ActionBase.Id)。
模板| ActionContainers 列出当前模板的Action Containers。
模板| ActionContainers | 容器 指定操作容器的名称。
模板| ActionContainers | 容器| 操作 列出在当前操作容器中注册的操作(请参阅IActionContainer.Actions)。
模板| ActionContainers | 容器| 行动| 行动 指定Action的ID(请参阅ActionBase.Id)。
控制器 列出加载到应用程序模型的所有控制器。
控制器| 调节器 指定Controller的名称和活动状态(请参阅Controller.Active)。
控制器| 控制器| ActiveList 允许您将Controller.Active集合项的状态与预期状态进行比较。
控制器| 控制器| ActiveList | 项目 指定Controller.Active列表中项的键和值
控制器| 控制器| 操作 列出当前Controller中包含的Actions(请参阅Controller.Actions)。
控制器| 控制器| 行动| 行动 指定以下操作详细信息。
  • ID(ActionBase.Id
  • 标题(ActionBase.Caption
  • 类型名
  • 类别(请参阅ActionBase.Category
  • 活动状态(参见ActionBase.Active
  • 启用状态(请参阅ActionBase.Enabled
  • Action的ActionBase.DiagnosticInfo属性指定的附加信息(见下文)
控制器| 控制器| 行动| 行动| ActiveList 允许您将ActionBase.Active集合项的状态与预期状态进行比较。
控制器| 控制器| 行动| 行动| ActiveList | 项目 指定ActionBase.Active列表中项的键和值
控制器| 控制器| 行动| 行动| EnabledList 允许您将ActionBase.Enabled集合项的状态与预期状态进行比较。
控制器| 控制器| 行动| 行动| EnabledList | 项目 指定ActionBase.Enabled列表中项的键和值
控制器| 控制器| 行动| 行动| 项目(对于SingleChoiceAction类型的操作 列出ChoiceActionItem.Items集合中包含的项目
控制器| 控制器| 行动| 行动| 项目| Item(对于SingleChoiceAction类型的Actions  描述一个项目:其标题,活动和启用状态。如果该项具有嵌套项的集合(请参阅ChoiceActionItem.Items),则还会列出并描述它们。
控制器| 控制器| 行动| 行动| 项目| 项目| ActiveList(用于SingleChoiceAction类型的Actions  允许您将ChoiceActionItem.Active集合项状态与预期状态进行比较。
控制器| 控制器| 行动| 行动| 项目| 项目| ActiveList | Item(对于SingleChoiceAction类型的Actions  指定ChoiceActionItem.Active列表中项的键和值
控制器| 控制器| 行动| 行动| 项目| 项目| EnabledList(用于SingleChoiceAction类型的Actions  允许您将ChoiceActionItem.Enabled集合项的状态与预期状态进行比较。
控制器| 控制器| 行动| 行动| 项目| 项目| EnabledList | Item(对于SingleChoiceAction类型的Actions 指定ChoiceActionItem.Enabled列表中项的键和值

 

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

部分

定义

详细视图 描述当前视图。写入以下属性的值。
  • View.Id
  • View.IsRoot
  • View.AllowNew
  • View.AllowEdit
  • View.AllowDelete
  • DetailView.ViewEditMode
DetailView | AllowNewList 允许您将View.AllowNew集合项的状态与预期状态进行比较。
DetailView | AllowNewList | 项目 指定View.AllowNew列表中项的键和值
DetailView | AllowEditList 允许您将View.AllowEdit集合项的状态与预期状态进行比较。
DetailView | AllowEditList | 项目 指定View.AllowEdit列表中项的键和值
DetailView | AllowDeleteList 允许您将View.AllowDelete集合项的状态与预期状态进行比较。
DetailView | AllowDeleteList | 项目 View.AllowDelete列表中指定项的键和值
DetailView | 属性编辑器 列出当前视图中包含的属性编辑器。
DetailView | PropertyEditors | 属性编辑器 描述属性编辑器:
  • 类型
  • PropertyEditor.Caption
  • DetailView.ViewEditMode
  • PropertyEditor.PropertyName
  • PropertyEditor.AllowEdit
DetailView | PropertyEditors | PropertyEditor | AllowEditList 允许您将PropertyEditor.AllowEdit集合项的状态与预期状态进行比较。
DetailView | PropertyEditors | PropertyEditor | AllowEditList | 项目 指定PropertyEditor.AllowEdit列表中项的键和值
列表显示 描述当前的列表视图。写入以下属性的值:
  • View.Id
  • View.IsRoot
  • View.AllowNew
  • View.AllowEdit
  • View.AllowDelete
ListView | AllowNewList 允许您将View.AllowNew集合项的状态与预期状态进行比较。
ListView | AllowNewList | 项目 指定View.AllowNew列表中项的键和值
ListView | AllowEditList 允许您将View.AllowEdit集合项的状态与预期状态进行比较。
ListView | AllowEditList | 项目 指定View.AllowEdit列表中项的键和值
ListView | AllowDeleteList 允许您将View.AllowDelete集合项的状态与预期状态进行比较。
ListView | AllowDeleteList | 项目 View.AllowDelete列表中指定项的键和值
ListView | ListEditor 描述当前列表视图的编辑器(请参阅ListEditor)。写入以下属性的值。
  • 类型
  • ListEditor.Name
  • ListEditor.AllowEdit

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

部分

定义

规则 列出应用程序模型中注册的所有验证规则。

 

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

 

 

您可以提供有关操作的自定义诊断信息。为此,请使用ActionBase.DiagnosticInfo属性。其值将分配给Controllers |中AdditionalInfo项 控制器| 行动| 行动部分。在以下代码中,SetProprityControllerSetPriorityAction指定DiagnosticInfo属性,该属性MainDemo中实现(请参阅使用选项选择添加操作)):

C#
VB
 
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在主窗口激活被显示在任务时和上述的诊断信息证实该行动当前停用。

 
 

你可能感兴趣的:(为什么 Action/ViewController/ProperttyEditor不可见或不可用?)