internal ScheduleSortGroupField AppendSortField(ViewSchedule _viewSchedule, ScheduleField field)
        {
            ScheduleSortGroupField _sortGroupField = new ScheduleSortGroupField(field.FieldId);

            _viewSchedule.Definition.AddSortGroupField(_sortGroupField);
            return(_sortGroupField);
        }
        internal ScheduleSortGroupField AppendGroupField(ViewSchedule _viewSchedule, ScheduleField field)
        {
            ScheduleSortGroupField _sortGroupField = new ScheduleSortGroupField(field.FieldId);

            _sortGroupField.ShowHeader    = false;
            _sortGroupField.SortOrder     = ScheduleSortOrder.Descending;
            _sortGroupField.ShowBlankLine = false;

            _viewSchedule.Definition.AddSortGroupField(_sortGroupField);
            return(_sortGroupField);
        }
        public static void CreateWallsSchedule(UIDocument uidoc)
        {
            Document doc = uidoc.Document;

            using (Transaction t = new Transaction(doc, "Create Schedule"))
            {
                t.Start();

                // Создание спецификации для стен
                ViewSchedule wallsSchedule =
                    ViewSchedule.CreateSchedule(doc,
                                                new ElementId(BuiltInCategory.OST_Walls));

                // Добавление полей в спецификацию
                foreach (SchedulableField schedulableFields
                         in GetSchedulableFields(doc))
                {
                    wallsSchedule.Definition.AddField(schedulableFields);
                }

                // Назначение стадии
                SetPhaseByName(wallsSchedule, "KR-3");

                // Для каждого экземпляра = false
                wallsSchedule.Definition.IsItemized = false;

                // Вычесление итогов
                wallsSchedule.Definition.GetField(0).DisplayType =
                    ScheduleFieldDisplayType.Totals;
                wallsSchedule.Definition.GetField(1).DisplayType =
                    ScheduleFieldDisplayType.Totals;

                // Назначение ширины столбцам
                wallsSchedule.Definition.GetField(0).GridColumnWidth = 30 * mmToft;
                wallsSchedule.Definition.GetField(1).GridColumnWidth = 30 * mmToft;
                wallsSchedule.Definition.GetField(2).GridColumnWidth = 55 * mmToft;

                // Назначение выравнивания
                wallsSchedule.Definition.GetField(1).HorizontalAlignment =
                    ScheduleHorizontalAlignment.Right;
                wallsSchedule.Definition.GetField(2).HorizontalAlignment =
                    ScheduleHorizontalAlignment.Center;

                // Установка сортировки/групировки
                ScheduleSortGroupField sortGroupField =
                    new ScheduleSortGroupField(
                        wallsSchedule.Definition.GetField(2).FieldId,
                        ScheduleSortOrder.Ascending);
                wallsSchedule.Definition.AddSortGroupField(sortGroupField);

                t.Commit();
                uidoc.ActiveView = wallsSchedule;
            }
        }
Пример #4
0
        public void createMaterialTakeOffSchedule(String name, ElementId elementId)
        {
            //Get UIDocument
            UIDocument uidoc = _cachedCmdData.Application.ActiveUIDocument;
            //Get Document
            Document doc = uidoc.Document;

            ViewSchedule schedule = new FilteredElementCollector(CachedDoc).OfClass(typeof(ViewSchedule)).Where(x => x.Name == name + " Schedule").FirstOrDefault() as ViewSchedule;

            if (schedule == null)
            {
                Transaction tSchedule = new Transaction(CachedDoc, "Create Schedule");
                tSchedule.Start();

                //Create an empty view schedule for doors.
                schedule      = ViewSchedule.CreateMaterialTakeoff(CachedDoc, elementId);
                schedule.Name = name + " Schedule";

                ElementId volumeId = new ElementId(BuiltInParameter.MATERIAL_VOLUME);
                ElementId areaId   = new ElementId(BuiltInParameter.MATERIAL_AREA);
                //Iterate all the schedulable fields gotten from the doors view schedule.
                foreach (SchedulableField schedulableField in schedule.Definition.GetSchedulableFields())
                {
                    //See if the FieldType is ScheduleFieldType.Instance.
                    if (schedulableField.ParameterId == volumeId || schedulableField.ParameterId == areaId || schedulableField.GetName(doc).Equals("Material: Keynote"))
                    {
                        //Get ParameterId of SchedulableField.
                        ElementId parameterId = schedulableField.ParameterId;

                        //Add a new schedule field to the view schedule by using the SchedulableField as argument of AddField method of Autodesk.Revit.DB.ScheduleDefinition class.
                        ScheduleField field = schedule.Definition.AddField(schedulableField);

                        //See if the parameterId is a BuiltInParameter.
                        if (Enum.IsDefined(typeof(BuiltInParameter), parameterId.IntegerValue))
                        {
                            BuiltInParameter bip = (BuiltInParameter)parameterId.IntegerValue;
                            //Get the StorageType of BuiltInParameter.
                            Autodesk.Revit.DB.StorageType st = CachedDoc.get_TypeOfStorage(bip);
                            //if StorageType is String or ElementId, set GridColumnWidth of schedule field to three times of current GridColumnWidth.
                            //And set HorizontalAlignment property to left.
                            if (st == Autodesk.Revit.DB.StorageType.String || st == Autodesk.Revit.DB.StorageType.ElementId)
                            {
                                field.GridColumnWidth     = 3 * field.GridColumnWidth;
                                field.HorizontalAlignment = ScheduleHorizontalAlignment.Left;
                            }
                            //For other StorageTypes, set HorizontalAlignment property to center.
                            else
                            {
                                field.HorizontalAlignment = ScheduleHorizontalAlignment.Center;
                            }
                        }

                        if (schedulableField.GetName(doc).Equals("Material: Keynote"))
                        {
                            ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId);
                            schedule.Definition.AddSortGroupField(sortGroupField);
                            schedule.Definition.IsItemized = false;
                        }

                        if (field.ParameterId == volumeId)
                        {
                            FormatOptions formatOpt = new FormatOptions(DisplayUnitType.DUT_CUBIC_FEET, UnitSymbolType.UST_CF, 0.01);
                            formatOpt.UseDefault = false;
                            field.SetFormatOptions(formatOpt);
                            field.DisplayType = ScheduleFieldDisplayType.Totals;
                        }

                        if (field.ParameterId == areaId)
                        {
                            FormatOptions formatOpt = new FormatOptions(DisplayUnitType.DUT_SQUARE_FEET, UnitSymbolType.UST_SF, 0.01);
                            formatOpt.UseDefault = false;
                            field.SetFormatOptions(formatOpt);
                            field.DisplayType = ScheduleFieldDisplayType.Totals;
                        }
                    }
                }


                tSchedule.Commit();
                tSchedule.Dispose();
            }
            else
            {
                schedule.RefreshData();
            }

            ViewScheduleExportOptions opt = new ViewScheduleExportOptions();

            opt.FieldDelimiter = ",";
            opt.Title          = false;

            string path = _export_folder_name;


            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }


            string file = System.IO.Path.GetFileNameWithoutExtension(name) + ".csv";

            schedule.Export(path, file, opt);
        }
Пример #5
0
        public void createCountSchedule(String name, ElementId elementId)
        {
            ViewSchedule schedule = new FilteredElementCollector(CachedDoc).OfClass(typeof(ViewSchedule)).Where(x => x.Name == name + " Schedule").FirstOrDefault() as ViewSchedule;

            if (schedule == null)
            {
                Transaction tSchedule = new Transaction(CachedDoc, "Create Schedule");
                tSchedule.Start();

                //Create an empty view schedule for doors.
                //schedule = ViewSchedule.CreateSchedule(CachedDoc, new ElementId(BuiltInCategory.INVALID), ElementId.InvalidElementId);
                schedule      = ViewSchedule.CreateSchedule(CachedDoc, elementId, ElementId.InvalidElementId);
                schedule.Name = name + " Schedule";

                ElementId keynoteId = new ElementId(BuiltInParameter.KEYNOTE_PARAM);
                //Iterate all the schedulable fields gotten from the doors view schedule.
                foreach (SchedulableField schedulableField in schedule.Definition.GetSchedulableFields())
                {
                    //See if the FieldType is ScheduleFieldType.Instance.
                    if (schedulableField.FieldType == ScheduleFieldType.Count || schedulableField.ParameterId == keynoteId)
                    {
                        //Get ParameterId of SchedulableField.
                        ElementId parameterId = schedulableField.ParameterId;

                        //Add a new schedule field to the view schedule by using the SchedulableField as argument of AddField method of Autodesk.Revit.DB.ScheduleDefinition class.
                        ScheduleField field = schedule.Definition.AddField(schedulableField);

                        //See if the parameterId is a BuiltInParameter.
                        if (Enum.IsDefined(typeof(BuiltInParameter), parameterId.IntegerValue))
                        {
                            BuiltInParameter bip = (BuiltInParameter)parameterId.IntegerValue;
                            //Get the StorageType of BuiltInParameter.
                            Autodesk.Revit.DB.StorageType st = CachedDoc.get_TypeOfStorage(bip);
                            //if StorageType is String or ElementId, set GridColumnWidth of schedule field to three times of current GridColumnWidth.
                            //And set HorizontalAlignment property to left.
                            if (st == Autodesk.Revit.DB.StorageType.String || st == Autodesk.Revit.DB.StorageType.ElementId)
                            {
                                field.GridColumnWidth     = 3 * field.GridColumnWidth;
                                field.HorizontalAlignment = ScheduleHorizontalAlignment.Left;
                            }
                            //For other StorageTypes, set HorizontalAlignment property to center.
                            else
                            {
                                field.HorizontalAlignment = ScheduleHorizontalAlignment.Center;
                            }
                        }

                        if (field.ParameterId == keynoteId)
                        {
                            ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId);
                            schedule.Definition.AddSortGroupField(sortGroupField);
                            schedule.Definition.IsItemized = false;
                        }
                        if (schedulableField.FieldType == ScheduleFieldType.Count)
                        {
                        }
                    }
                }


                tSchedule.Commit();
                tSchedule.Dispose();
            }
            else
            {
                schedule.RefreshData();
            }

            ViewScheduleExportOptions opt = new ViewScheduleExportOptions();

            opt.FieldDelimiter = ",";
            opt.Title          = false;

            string path = _export_folder_name;


            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }


            string file = System.IO.Path.GetFileNameWithoutExtension(name) + ".csv";

            schedule.Export(path, file, opt);
        }
Пример #6
0
        /// <summary>
        /// Create a view schedule of wall category and add schedule field, filter and sorting/grouping field to it.
        /// </summary>
        /// <param name="uiDocument">UIdocument of revit file.</param>
        /// <returns>ICollection of created view schedule(s).</returns>
        private ICollection <ViewSchedule> CreateSchedules(UIDocument uiDocument)
        {
            Document document = uiDocument.Document;

            Transaction t = new Transaction(document, "Create Schedules");

            t.Start();

            List <ViewSchedule> schedules = new List <ViewSchedule>();

            //Create an empty view schedule of wall category.
            ViewSchedule schedule = ViewSchedule.CreateSchedule(document, new ElementId(BuiltInCategory.OST_Walls), ElementId.InvalidElementId);

            schedule.Name = "Wall Schedule 1";
            schedules.Add(schedule);

            //Iterate all the schedulable field gotten from the walls view schedule.
            foreach (SchedulableField schedulableField in schedule.Definition.GetSchedulableFields())
            {
                //Judge if the FieldType is ScheduleFieldType.Instance.
                if (schedulableField.FieldType == ScheduleFieldType.Instance)
                {
                    //Get ParameterId of SchedulableField.
                    ElementId parameterId = schedulableField.ParameterId;

                    //If the ParameterId is id of BuiltInParameter.ALL_MODEL_MARK then ignore next operation.
                    if (ShouldSkip(parameterId))
                    {
                        continue;
                    }

                    //Add a new schedule field to the view schedule by using the SchedulableField as argument of AddField method of Autodesk.Revit.DB.ScheduleDefinition class.
                    ScheduleField field = schedule.Definition.AddField(schedulableField);

                    //Judge if the parameterId is a BuiltInParameter.
                    if (Enum.IsDefined(typeof(BuiltInParameter), parameterId.IntegerValue))
                    {
                        BuiltInParameter bip = (BuiltInParameter)parameterId.IntegerValue;
                        //Get the StorageType of BuiltInParameter.
                        StorageType st = document.get_TypeOfStorage(bip);
                        //if StorageType is String or ElementId, set GridColumnWidth of schedule field to three times of current GridColumnWidth.
                        //And set HorizontalAlignment property to left.
                        if (st == StorageType.String || st == StorageType.ElementId)
                        {
                            field.GridColumnWidth     = 3 * field.GridColumnWidth;
                            field.HorizontalAlignment = ScheduleHorizontalAlignment.Left;
                        }
                        //For other StorageTypes, set HorizontalAlignment property to center.
                        else
                        {
                            field.HorizontalAlignment = ScheduleHorizontalAlignment.Center;
                        }
                    }


                    //Filter the view schedule by volume
                    if (field.ParameterId == new ElementId(BuiltInParameter.HOST_VOLUME_COMPUTED))
                    {
                        double         volumeFilterInCubicFt = 0.8 * Math.Pow(3.2808399, 3.0);
                        ScheduleFilter filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.GreaterThan, volumeFilterInCubicFt);
                        schedule.Definition.AddFilter(filter);
                    }

                    //Group and sort the view schedule by type
                    if (field.ParameterId == new ElementId(BuiltInParameter.ELEM_TYPE_PARAM))
                    {
                        ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId);
                        sortGroupField.ShowHeader = true;
                        schedule.Definition.AddSortGroupField(sortGroupField);
                    }
                }
            }

            t.Commit();

            uiDocument.ActiveView = schedule;

            return(schedules);
        }
        private static void AddGroupingToSchedule(ViewSchedule schedule, IEnumerable<Parameter> parameters, string paramName)
        {
            var field = FindField(schedule, parameters.FirstOrDefault(p => p.Definition.Name == paramName));

            if (field == null) throw new Exception("Unable to find field.");

            var sortGroupField = new ScheduleSortGroupField(field.FieldId, ScheduleSortOrder.Ascending);

            schedule.Definition.AddSortGroupField(sortGroupField);
            schedule.Definition.IsItemized = false;
        }
Пример #8
0
        //private UIDocument _uiDoc;
        public Result CreateAllItemsSchedule(UIDocument uiDoc)
        {
            try
            {
                Document doc = uiDoc.Document;
                FilteredElementCollector sharedParameters = new FilteredElementCollector(doc);
                sharedParameters.OfClass(typeof(SharedParameterElement));

                #region Debug

                ////Debug
                //StringBuilder sbDev = new StringBuilder();
                //var list = new ParameterDefinition().ElementParametersAll;
                //int i = 0;

                //foreach (SharedParameterElement sp in sharedParameters)
                //{
                //    sbDev.Append(sp.GuidValue + "\n");
                //    sbDev.Append(list[i].Guid.ToString() + "\n");
                //    i++;
                //    if (i == list.Count) break;
                //}
                ////sbDev.Append( + "\n");
                //// Clear the output file
                //File.WriteAllBytes(InputVars.OutputDirectoryFilePath + "\\Dev.pcf", new byte[0]);

                //// Write to output file
                //using (StreamWriter w = File.AppendText(InputVars.OutputDirectoryFilePath + "\\Dev.pcf"))
                //{
                //    w.Write(sbDev);
                //    w.Close();
                //}

                #endregion

                Transaction t = new Transaction(doc, "Create items schedules");
                t.Start();

                #region Schedule ALL elements
                ViewSchedule schedAll = ViewSchedule.CreateSchedule(doc, ElementId.InvalidElementId,
                                                                    ElementId.InvalidElementId);
                schedAll.Name = "PCF - ALL Elements";
                schedAll.Definition.IsItemized = false;

                IList <SchedulableField> schFields = schedAll.Definition.GetSchedulableFields();

                foreach (SchedulableField schField in schFields)
                {
                    if (schField.GetName(doc) != "Family and Type")
                    {
                        continue;
                    }
                    ScheduleField          field          = schedAll.Definition.AddField(schField);
                    ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId);
                    schedAll.Definition.AddSortGroupField(sortGroupField);
                }

                string curUsage  = "U";
                string curDomain = "ELEM";
                var    query     = from p in new plst().LPAll where p.Usage == curUsage && p.Domain == curDomain select p;

                foreach (pdef pDef in query.ToList())
                {
                    SharedParameterElement parameter = (from SharedParameterElement param in sharedParameters
                                                        where param.GuidValue.CompareTo(pDef.Guid) == 0
                                                        select param).First();
                    SchedulableField queryField = (from fld in schFields where fld.ParameterId.IntegerValue == parameter.Id.IntegerValue select fld).First();

                    ScheduleField field = schedAll.Definition.AddField(queryField);
                    if (pDef.Name != "PCF_ELEM_TYPE")
                    {
                        continue;
                    }
                    ScheduleFilter filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.HasParameter);
                    schedAll.Definition.AddFilter(filter);
                }
                #endregion

                #region Schedule FILTERED elements
                ViewSchedule schedFilter = ViewSchedule.CreateSchedule(doc, ElementId.InvalidElementId,
                                                                       ElementId.InvalidElementId);
                schedFilter.Name = "PCF - Filtered Elements";
                schedFilter.Definition.IsItemized = false;

                schFields = schedFilter.Definition.GetSchedulableFields();

                foreach (SchedulableField schField in schFields)
                {
                    if (schField.GetName(doc) != "Family and Type")
                    {
                        continue;
                    }
                    ScheduleField          field          = schedFilter.Definition.AddField(schField);
                    ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId);
                    schedFilter.Definition.AddSortGroupField(sortGroupField);
                }

                foreach (pdef pDef in query.ToList())
                {
                    SharedParameterElement parameter = (from SharedParameterElement param in sharedParameters
                                                        where param.GuidValue.CompareTo(pDef.Guid) == 0
                                                        select param).First();
                    SchedulableField queryField = (from fld in schFields where fld.ParameterId.IntegerValue == parameter.Id.IntegerValue select fld).First();

                    ScheduleField field = schedFilter.Definition.AddField(queryField);
                    if (pDef.Name != "PCF_ELEM_TYPE")
                    {
                        continue;
                    }
                    ScheduleFilter filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.HasParameter);
                    schedFilter.Definition.AddFilter(filter);
                    filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.NotEqual, "");
                    schedFilter.Definition.AddFilter(filter);
                }
                #endregion

                #region Schedule Pipelines
                ViewSchedule schedPipeline = ViewSchedule.CreateSchedule(doc, new ElementId(BuiltInCategory.OST_PipingSystem), ElementId.InvalidElementId);
                schedPipeline.Name = "PCF - Pipelines";
                schedPipeline.Definition.IsItemized = false;

                schFields = schedPipeline.Definition.GetSchedulableFields();

                foreach (SchedulableField schField in schFields)
                {
                    if (schField.GetName(doc) != "Family and Type")
                    {
                        continue;
                    }
                    ScheduleField          field          = schedPipeline.Definition.AddField(schField);
                    ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId);
                    schedPipeline.Definition.AddSortGroupField(sortGroupField);
                }

                curDomain = "PIPL";
                foreach (pdef pDef in query.ToList())
                {
                    SharedParameterElement parameter = (from SharedParameterElement param in sharedParameters
                                                        where param.GuidValue.CompareTo(pDef.Guid) == 0
                                                        select param).First();
                    SchedulableField queryField = (from fld in schFields where fld.ParameterId.IntegerValue == parameter.Id.IntegerValue select fld).First();
                    schedPipeline.Definition.AddField(queryField);
                }
                #endregion

                t.Commit();

                sharedParameters.Dispose();

                return(Result.Succeeded);
            }
            catch (Exception e)
            {
                BuildingCoderUtilities.InfoMsg(e.Message);
                return(Result.Failed);
            }
        }
Пример #9
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            // Add an EventLogTraceListener object
            System.Diagnostics.Trace.Listeners.Add(
                new System.Diagnostics.EventLogTraceListener("Application"));

            // Lay the hands on the active document
            UIDocument uidoc = commandData.Application.ActiveUIDocument;
            Document   doc   = uidoc.Document;

            // Set up a timer
            Timing myTimer = new Timing();

            myTimer.StartTime();
            StringBuilder strBld = new StringBuilder();

            // Make some preparations
            List <ElementId> selectedElemIds = new List <ElementId>();
            EnumValuesWnd    wnd             = null;

            try
            {
                if (doc.ActiveView.ViewType != ViewType.Schedule)
                {
                    TaskDialog.Show("Exception", "Open a schedule view before running this command.");
                    return(Result.Failed);
                }
                else if (uidoc.Selection.GetElementIds().Count == 0)
                {
                    TaskDialog.Show("Exception", "No element has been picked out.");
                    return(Result.Failed);
                }

                selectedElemIds = uidoc.Selection.GetElementIds().ToList();
                ViewSchedule       scheduleView       = doc.ActiveView as ViewSchedule;
                ScheduleDefinition scheduleDefinition = scheduleView.Definition;
                bool             sorted  = scheduleDefinition.GetSortGroupFieldCount() > 0 ? true : false;
                List <TmpObject> tmpObjs = new List <TmpObject>();

                for (int i = 0; i < selectedElemIds.Count; ++i)
                {
                    Element   elem = doc.GetElement(selectedElemIds[i]);
                    TmpObject tmp  = new TmpObject(elem.Id);

                    for (int j = 0; j < scheduleDefinition.GetSortGroupFieldCount(); ++j)
                    {
                        ScheduleSortGroupField srtGrpField = scheduleDefinition.GetSortGroupField(j);
                        ScheduleField          schField    = scheduleDefinition.GetField(srtGrpField.FieldId);

                        Parameter p = GetScheduleFieldParameter(schField, elem);
                        if (p != null)
                        {
                            tmp.AddParameter(p);
                        }
                    }
                    tmpObjs.Add(tmp);
                }

                // Sort the elements by a series of parameters
                tmpObjs.Sort();

                // Create the window and subscribe to its event
                IList <string> parameterNames = doc.GetElement(selectedElemIds[0])
                                                .GetOrderedParameters()
                                                .Where(p => p.StorageType == StorageType.String && !p.IsReadOnly)
                                                .Select(p => p.Definition.Name)
                                                .ToList();

                wnd            = new EnumValuesWnd(parameterNames);
                wnd.OkClicked += (sender, args) =>
                {
                    using (Transaction t = new Transaction(doc))
                    {
                        t.Start("Enumerate parameters");

                        // Deal with the first element
                        TmpObject prevObj = tmpObjs[0];
                        doc.GetElement(prevObj.Id).LookupParameter(args.ParameterName).Set(
                            string.Format("{0}{1}{2}", args.Prefix, args.Position, args.Suffix));
                        int position = args.Position;

                        // See about the other elements in the list
                        for (int i = 1; i < tmpObjs.Count; ++i)
                        {
                            TmpObject curObj = tmpObjs[i];
                            Element   e      = doc.GetElement(curObj.Id);

                            if (curObj.CompareTo(prevObj) == 0 && sorted)
                            {
                                e.LookupParameter(args.ParameterName).Set(
                                    string.Format("{0}{1}{2}", args.Prefix, position, args.Suffix));
                            }
                            else
                            {
                                ++position;
                                e.LookupParameter(args.ParameterName).Set(
                                    string.Format("{0}{1}{2}", args.Prefix, position, args.Suffix));
                            }
                            prevObj = curObj;
                        }
                        t.Commit();
                    }
                };

                // Show the window
                wnd.ShowDialog();

                return(Result.Succeeded);
            }
            catch (Autodesk.Revit.Exceptions.OperationCanceledException)
            {
                return(Result.Cancelled);
            }
            catch (Exception ex)
            {
                TaskDialog.Show("Exception",
                                string.Format("{0}\n{1}", ex.Message, ex.StackTrace));
                System.Diagnostics.Trace.Write(string.Format("{0}\n{1}",
                                                             ex.Message, ex.StackTrace));
                return(Result.Failed);
            }
            finally
            {
                wnd.Close();
                myTimer.StopTime();
                System.Diagnostics.Trace
                .Write(string.Format("Time elapsed: {0}s",
                                     myTimer.Duration.TotalSeconds));
            }
        }
        /// <summary>
        /// sort schedule by selected field
        /// </summary>
        /// <param name="columnName">field name</param>
        /// <param name="isItemized">wether is itemized or not</param>
        /// <returns>viewSchedule</returns>
        public  void sortBy(string columnName,Boolean isItemized)
        {
            if (Schedule != null)
            {
                int scheduleFieldsCount = Schedule.Definition.GetFieldCount();

               for(int i=0;i<scheduleFieldsCount;i++){
                   ScheduleField schedulableField = Schedule.Definition.GetField(i);
                    if (schedulableField.GetName().ToUpper() == columnName.ToUpper())
                    {

                        ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(schedulableField.FieldId);
                        
                        sortGroupField.ShowHeader = false;
                        
                        Schedule.Definition.AddSortGroupField(sortGroupField);
                        Schedule.Definition.IsItemized = isItemized;
                    }
                }
                
            }
            else
            {
                System.Windows.Forms.MessageBox.Show("please generate schedule first");
            }



        }