為什麽 Action/ViewController/ProperttyEditor不可見或不可用?
英文版:https://documentation.devexpress.com/eXpressAppFramework/112818/Concepts/Extend-Functionality/Determine-Why-an-Action-Controller-or-Editor-is-Inactive
構建應用程序時,您可能需要確定Action或控制器在特定窗口中不可用(可見)的原因。可以由於各種原因停用或禁用操作:安全系統權限,當前視圖是只讀的,當前視圖的不方便對象類型以及其他特定參數。由於各種原因,當前視圖也可能是只讀的。可能需要進行徹底的調試以確定實際原因。為此,eXpressApp Framework
- 啟用DiagnosticInfo操作
- 分析DiagnosticInfo操作輸出
- DiagnosticInfo參考
- 有關Action的自定義診斷信息
啟用DiagnosticInfo操作
要將診斷信息操作添加到UI(WinForms或ASP.NET;不支持Mobile),請執行以下操作。
- 打開應用程序項目的配置文件。在WinForms應用程序項目中,它稱為
- 找到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>
- 如果Controller或Action元素的Active或Enabled屬性返回“False”,則研究嵌套的ActiveList和EnabledList元素下的每個單獨項。每個屬性的Key屬性很快描述了原因標識符。這些嵌套項的所有Value屬性的疊加形成父Action或其Controller 的結果Active或Enabled值。
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)。 |
控制器| 控制器| 行動| 行動 | 指定以下操作詳細信息。
|
控制器| 控制器| 行動| 行動| 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列表中項的鍵和值。 |
選擇“ 查看信息”項時,在調用窗口中顯示的信息包括以下內容:
部分 |
定義 |
---|---|
詳細視圖 | 描述當前視圖。寫入以下屬性的值。
|
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 | 屬性編輯器 | 描述屬性編輯器:
|
DetailView | PropertyEditors | PropertyEditor | AllowEditList | 允許您將PropertyEditor.AllowEdit集合項的狀態與預期狀態進行比較。 |
DetailView | PropertyEditors | PropertyEditor | AllowEditList | 項目 | 指定PropertyEditor.AllowEdit列表中項的鍵和值。 |
列表顯示 | 描述當前的列表視圖。寫入以下屬性的值:
|
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)。寫入以下屬性的值。
|
選擇“規則信息”項時調用的窗口中顯示的信息包括以下內容。
部分 |
定義 |
---|---|
規則 | 列出應用程序模型中註冊的所有驗證規則。 |
有關操作的自定義診斷信息
您可以提供有關操作的自定義診斷信息。為此,請使用ActionBase.DiagnosticInfo屬性。其值將分配給Controllers |中的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在主窗口激活被顯示在任務時和上述的診斷信息證實該行動當前停用。
為什麽 Action/ViewController/ProperttyEditor不可見或不可用?