• XAF 顯示 UnInplace Report(設置自定義條件顯示報表,不是根據選擇ListView記錄條件顯示報表)


    using System;
    using System.Collections.Generic;
    using System.Text;
    using DevExpress.ExpressApp;
    using DevExpress.ExpressApp.Actions;
    using DevExpress.ExpressApp.Reports;
    using DevExpress.Data.Filtering;
    using System.Collections;
    using DevExpress.Persistent.Base;
    using DevExpress.Utils;
    using DevExpress.ExpressApp.Utils;


    namespace Wise.Module.SystemModule.Report
    {
        
    public class MyInplaceReportCacheController : WindowController
        {
            
    private LightDictionary<Type, List<IReportData>> reportsCache = new LightDictionary<Type, List<IReportData>>();
            
    private Type reportDataType;
            
    protected virtual IObjectSpace CreateObjectSpace()
            {
                DevExpress.ExpressApp.Utils.Guard.ArgumentNotNull(Application, 
    "Application");
                
    return Application.CreateObjectSpace();
            }
            
    protected LightDictionary<Type, List<IReportData>> ReportsCache
            {
                
    get { return reportsCache; }
            }
            
    public MyInplaceReportCacheController()
            {
                TargetWindowType 
    = WindowType.Main;
            }
            
    public void ClearCache()
            {
                reportsCache.Clear();
            }
            
    public virtual List<IReportData> GetReportDataList(Type targetObjectType)
            {
                
    if (ReportDataType == null)
                {
                    
    return new List<IReportData>();
                }
                List
    <IReportData> cachedReports;
                
    if (reportsCache.TryGetValue(targetObjectType, out cachedReports))
                {
                    
    return cachedReports;
                }
                
    else
                {
                    
    using (IObjectSpace objectSpace = CreateObjectSpace())
                    {
                        List
    <string> targetObjectTypeNames = new List<string>();
                        Type currentType 
    = targetObjectType;
                        
    while ((currentType != typeof(Object)) && (currentType != null))
                        {
                            
    if (XafTypesInfo.Instance.FindTypeInfo(currentType).IsPersistent)
                            {
                                targetObjectTypeNames.Add(currentType.FullName);
                            }
                            currentType 
    = currentType.BaseType;
                        }
                        List
    <IReportData> result = new List<IReportData>();
                        
    if (targetObjectTypeNames.Count > 0)
                        {
                            IList reports 
    = objectSpace.CreateCollection(
                                ReportDataType,
                                
    new GroupOperator(new InOperator("DataTypeName", targetObjectTypeNames), new BinaryOperator(ReportData.IsInplaceReportMember, false)));
                            
    foreach (IReportData reportData in reports)
                            {
                                result.Add(reportData);
                            }
                        }
                        reportsCache.Add(targetObjectType, result);
                        
    return result;
                    }
                }
            }
            
    public Type ReportDataType
            {
                
    get
                {
                    
    if (reportDataType == null)
                    {
                        reportDataType 
    = ReportsModule.GetCurrentReportDataType(Application.Modules);
                    }
                    
    return reportDataType;
                }
                
    set { reportDataType = value; }
            }
            
    public static List<IReportData> GetReportDataList(Frame frame, Type targetObjectType)
            {
                
    if (frame != null)
                {
                    Frame cachFrame 
    = frame;
                    
    if (frame.Application != null && frame.Application.MainWindow != null)
                    {
                        cachFrame 
    = frame.Application.MainWindow;
                    }
                    MyInplaceReportCacheController cacheController 
    = cachFrame.GetController<MyInplaceReportCacheController>();
                    
    if (cacheController != null)
                    {
                        
    return cacheController.GetReportDataList(targetObjectType);
                    }
                }
                
    return new List<IReportData>();
            }
            [Obsolete(
    "Use 'GetReportDataList(Frame frame, Type targetObjectType)' instead.")]
            
    public static List<IReportData> GetReportDataList(XafApplication xafApplication, Type targetObjectType)
            {
                
    if (xafApplication != null)
                {
                    
    return GetReportDataList(xafApplication.MainWindow, targetObjectType);
                }
                
    return new List<IReportData>();
            }
        }
        
    /// <summary>
        
    /// UnInplaceReport
        
    /// </summary>
        public class MyPrintSelectionBaseController : ObjectViewController
        {

            
    public const string ActiveKeyObjectHasKeyMember = "ObjectHasKeyMember";
            
    public const string ActiveKeyDisableActionWhenThereAreChanges = "DisableActionWhenThereAreChanges";
            
    public const string ActiveKeyInplaceReportsAreEnabledInModule = "reportsModule.EnableInplaceReports";
            
    public const string ActiveKeyViewSupportsSelection = "ViewSupportsSelection";
            
    public const string ActiveKeyDisableForLookupListView = "DisableForLookupListView";
            
    public const string ActiveKeyControlsCreated = "ControlsCreated";
            
    private SingleChoiceAction showInReportAction;
            
    private void showInReportAction_Execute(object sender, SingleChoiceActionExecuteEventArgs e)
            {
                
    //if (e.SelectedObjects.Count == 0)
                
    //{
                
    //    return;
                
    //}
                ShowInReport(e, (IReportData)e.SelectedChoiceActionItem.Data);
            }
            
    private void ObjectSpace_ModifiedChanged(object sender, EventArgs e)
            {
                UpdateActionState();
            }
            
    private void View_SelectionTypeChanged(object sender, EventArgs e)
            {
                
    if (View != null)
                {
                    Active[ActiveKeyViewSupportsSelection] 
    = (View.SelectionType != SelectionType.None);
                }
            }
            
    private void View_ControlsCreated(object sender, EventArgs e)
            {
                View.ControlsCreated 
    -= new EventHandler(View_ControlsCreated);
                Initialize();
            }
            
    protected void Initialize()
            {
                showInReportAction.Active[ActiveKeyControlsCreated] 
    = true;
                List
    <IReportData> reportDataList = MyInplaceReportCacheController.GetReportDataList(Frame, ((ObjectView)View).ObjectTypeInfo.Type);
                List
    <ChoiceActionItem> items = new List<ChoiceActionItem>();
                
    foreach (IReportData reportData in reportDataList)
                {
                    ChoiceActionItem item 
    = new ChoiceActionItem(reportData.ReportName, reportData);
                    item.ImageName 
    = "Action_Report_Object_UnInplace_Preview";
                    items.Add(item);
                }
                items.Sort(SortByCaption);
                showInReportAction.Items.Clear();
                showInReportAction.Items.AddRange(items);
                View.ObjectSpace.ModifiedChanged 
    += new EventHandler(ObjectSpace_ModifiedChanged);
                UpdateActionState();
            }
            
    protected virtual void UpdateActionState()
            {
                ShowInReportAction.Enabled[PrintSelectionBaseController.ActiveKeyDisableActionWhenThereAreChanges] 
    = !View.ObjectSpace.IsModified;
            }
            
    protected virtual void ShowInReport(SingleChoiceActionExecuteEventArgs e, IReportData reportData)
            {
                ArrayList keys 
    = new ArrayList();
                
    foreach (object selectedObject in e.SelectedObjects)
                {
                    keys.Add(ObjectSpace.GetKeyValue(selectedObject));
                }
                
    //Frame.GetController<ReportServiceController>().ShowPreview(reportData, new InOperator(((ObjectView)View).ObjectTypeInfo.KeyMember.Name, keys));
                Frame.GetController<ReportServiceController>().ShowPreview(reportData);//, new InOperator(((ObjectView)View).ObjectTypeInfo.KeyMember.Name, keys));
            }
            
    private int SortByCaption(ChoiceActionItem left, ChoiceActionItem right)
            {
                
    return Comparer<string>.Default.Compare(left.Caption, right.Caption);
            }
            
    protected override void OnViewChanging(View view)
            {
                
    base.OnViewChanging(view);
                
    if (View != null)
                {
                    View.SelectionTypeChanged 
    -= new EventHandler(View_SelectionTypeChanged);
                }
                
    if (Application != null)
                {
                    ReportsModule reportsModule 
    = ReportsModule.FindReportsModule(Application.Modules);
                    
    if (reportsModule == null)
                    {
                        Active[
    "ReportsModule in Application.Modules"= false;
                    }
                    
    else
                    {
                        Active[ActiveKeyInplaceReportsAreEnabledInModule] 
    = reportsModule.EnableInplaceReports;
                    }
                }
                Active[ActiveKeyViewSupportsSelection] 
    = (view is ISelectionContext) && (((ISelectionContext)view).SelectionType != SelectionType.None);
                
    if ((view is ObjectView) && (((ObjectView)view).ObjectTypeInfo != null))
                {
                    Active[ActiveKeyObjectHasKeyMember] 
    = (((ObjectView)view).ObjectTypeInfo.KeyMember != null);
                }
                
    if (view != null)
                {
                    view.SelectionTypeChanged 
    += new EventHandler(View_SelectionTypeChanged);
                }
            }
            
    protected override void OnActivated()
            {
                
    base.OnActivated();
                showInReportAction.Active[ActiveKeyControlsCreated] 
    = false;
                
    if (View.IsControlCreated)
                {
                    Initialize();
                }
                
    else
                {
                    View.ControlsCreated 
    += new EventHandler(View_ControlsCreated);
                }
            }
            
    protected override void OnDeactivated()
            {
                View.ObjectSpace.ModifiedChanged 
    -= new EventHandler(ObjectSpace_ModifiedChanged);
                View.ControlsCreated 
    -= new EventHandler(View_ControlsCreated);
                
    base.OnDeactivated();
            }
            
    protected override void OnFrameAssigned()
            {
                
    base.OnFrameAssigned();
                
    if ((Frame != null&& ((Frame.Context == TemplateContext.LookupWindow) || (Frame.Context == TemplateContext.LookupControl)))
                {
                    
    this.Active.SetItemValue(ActiveKeyDisableForLookupListView, false);
                }
            }
            
    public MyPrintSelectionBaseController()
            {
                TypeOfView 
    = typeof(ObjectView);
                showInReportAction 
    = new SingleChoiceAction(this"MyShowInReport", PredefinedCategory.Reports);
                showInReportAction.Caption 
    = "My Show in Report";
                showInReportAction.ToolTip 
    = "Show selected records in a report";
                showInReportAction.Execute 
    += new SingleChoiceActionExecuteEventHandler(showInReportAction_Execute);
                showInReportAction.ItemType 
    = SingleChoiceActionItemType.ItemIsOperation;
                showInReportAction.SelectionDependencyType 
    = SelectionDependencyType.RequireMultipleObjects;
                showInReportAction.ImageName 
    = "Action_Report_Object_UnInplace_Preview";
            }
            
    public SingleChoiceAction ShowInReportAction
            {
                
    get { return showInReportAction; }
            }

        }
    }
  • 相关阅读:
    [20141124]sql server密码过期,通过SSMS修改策略报错
    [20141121]无法通过powershell读取sql server性能计数器问题
    深入解析Windows操作系统笔记——CH3系统机制
    深入解析Windows操作系统笔记——CH2系统结构
    [MySQL Reference Manual] 8 优化
    [20140928]创建连接到MySQL的连接服务器
    [20140829]spinlock导致cpu居高不下
    Percona XtraBackup User Manual 阅读笔记
    [MySQL Reference Manual] 7 备份和恢复
    [Linux 存储管理] LVM结构
  • 原文地址:https://www.cnblogs.com/Tonyyang/p/2152276.html
Copyright © 2020-2023  润新知