public override OutputData DoAction(IInputData input)
        {
            PageStyle style = input.Style.Style;
            if (input.IsPost)
            {
                BasePostObject obj = input.PostObject.Convert<BasePostObject>();

                using (ReportDataResolver resolver = new ReportDataResolver(this))
                {
                    UpdateKind kind = style == PageStyle.Insert ? UpdateKind.Insert : UpdateKind.Update;
                    DataRow row = resolver.UpdateRow(obj, kind);
                    return OutputData.CreateToolkitObject(new KeyData("Company", row["Company"].ToString()));
                }
            }
            else
            {
                ReportObjectData obj = null;
                switch (style)
                {
                    case PageStyle.Insert:
                        obj = new ReportObjectData(input.QueryString["Company"], input.QueryString["ReportName"]);
                        break;
                    case PageStyle.Update:
                        using (ReportDataResolver resolver = new ReportDataResolver(this))
                        {
                            obj = resolver.ReadRow(input);
                        }
                        break;
                }
                input.CallerInfo.AddInfo(obj.CallerInfo);

                return OutputData.CreateObject(obj);
            }
        }
        public ReportObjectData ReadRow(IInputData input)
        {
            DataRow row = Query(input.QueryString);
            string type = row["ReportName"].ToString();
            Object obj = null;
            switch (type)
            {
                case "BalanceSheet":
                    obj = new BalanceSheet();
                    break;
                case "CashFlowStatement":
                    obj = new CashFlowStatement();
                    break;
                //case "ProfitAppropriation":
                //    obj = new IncomeStatement();
                //    break;
                case "IncomeStatement":
                    obj = new IncomeStatement();
                    break;
            }
            ReportObjectData result = new ReportObjectData(row, obj);

            return result;
        }