1. 程式人生 > >為什麽 Action/ViewController/ProperttyEditor不可見或不可用?

為什麽 Action/ViewController/ProperttyEditor不可見或不可用?

leo after sin ons selection roo rules xtend expand

英文版: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不可見或不可用?