Пример #1
0
        static void DoExport()
        {
            HPMUniqueID projId = HPMUtilities.FindProject(projectName);
            if (viewType == EHPMReportViewType.AgileBacklog)
                projId = SessionManager.Instance.Session.ProjectUtilGetBacklog(projId);
            else if (viewType == EHPMReportViewType.AllBugsInProject)
                projId = SessionManager.Instance.Session.ProjectUtilGetQA(projId);
            if (projId != null)
            {
                HPMString findString;
                if (searchSpec == SearchSpec.Report)
                {
                    HPMUniqueID reportUserId = HPMUtilities.FindUser(reportUserName);
                    if (reportUserId == null)
                        throw new ArgumentException("Could not find the user " + reportUserName);
                    HPMReport report = HPMUtilities.FindReport(projId, reportUserId, reportName);
                    if (report == null)
                        throw new ArgumentException("Could not find the report " + reportName + " for user " + reportUserName + " in project " + projectName);
                    findString = SessionManager.Instance.Session.UtilConvertReportToFindString(report, projId, viewType);
                }
                else
                {
                    findString = findQuery.Replace('\'', '"');
                }
                HPMFindContext findContext = new HPMFindContext();
                HPMFindContextData data = SessionManager.Instance.Session.UtilPrepareFindContext(findString, projId, viewType, findContext);
                HPMTaskEnum items = SessionManager.Instance.Session.TaskFind(data, EHPMTaskFindFlag.None);
                ExcelWriter excelWriter = new ExcelWriter();
                if (items.m_Tasks.Length > 0)
                {
                           EHPMProjectGetDefaultActivatedNonHidableColumnsFlag flag;
                    if (viewType == EHPMReportViewType.ScheduleMainProject)
                        flag = EHPMProjectGetDefaultActivatedNonHidableColumnsFlag.ScheduledMode;
                    else if (viewType == EHPMReportViewType.AgileMainProject)
                        flag = EHPMProjectGetDefaultActivatedNonHidableColumnsFlag.AgileMode;
                    else
                        flag = EHPMProjectGetDefaultActivatedNonHidableColumnsFlag.None;

                    EHPMProjectDefaultColumn[] nonHidableColumns = SessionManager.Instance.Session.ProjectGetDefaultActivatedNonHidableColumns(projId, flag).m_Columns;
                    if (viewType == EHPMReportViewType.ScheduleMainProject || viewType == EHPMReportViewType.AgileMainProject || viewType == EHPMReportViewType.AgileBacklog)
                    {
                        Array.Resize(ref nonHidableColumns, nonHidableColumns.Length + 1);
                        nonHidableColumns[nonHidableColumns.Length - 1] = EHPMProjectDefaultColumn.ItemStatus;
                    }
                    EHPMProjectDefaultColumn[] activeBuiltinColumns = SessionManager.Instance.Session.ProjectGetDefaultActivatedColumns(projId).m_Columns;
                    HPMProjectCustomColumnsColumn[] activeCustomColumns = SessionManager.Instance.Session.ProjectCustomColumnsGet(projId).m_ShowingColumns;

                    ExcelWriter.Row row = excelWriter.AddRow();

                    foreach (EHPMProjectDefaultColumn builtinCol in nonHidableColumns)
                        row.AddCell(HPMUtilities.GetColumnName(builtinCol));
                    foreach (EHPMProjectDefaultColumn builtinCol in activeBuiltinColumns)
                        row.AddCell(HPMUtilities.GetColumnName(builtinCol));
                    foreach (HPMProjectCustomColumnsColumn customColumn in activeCustomColumns)
                        row.AddCell(HPMUtilities.GetColumnName(projId, customColumn));

                    HPMColumnTextOptions options = new HPMColumnTextOptions();
                    options.m_bForDisplay = true;
                    foreach (HPMUniqueID item in items.m_Tasks)
                    {
                        string description = SessionManager.Instance.Session.TaskGetDescription(item);
                        HPMUniqueID itemRef;
                        if (viewType == EHPMReportViewType.ScheduleMainProject || viewType == EHPMReportViewType.AgileMainProject)
                        {
                            itemRef = SessionManager.Instance.Session.TaskGetProxy(item);
                            if (!itemRef.IsValid())
                                itemRef = SessionManager.Instance.Session.TaskGetMainReference(item);
                        }
                        else
                        {
                            itemRef = SessionManager.Instance.Session.TaskGetMainReference(item);
                        }

                        row = excelWriter.AddRow();
                        foreach (EHPMProjectDefaultColumn builtinCol in nonHidableColumns)
                        {
                            HPMColumn column = new HPMColumn();
                            column.m_ColumnType = EHPMColumnType.DefaultColumn;
                            column.m_ColumnID = (uint)builtinCol;
                            row.AddCell(SessionManager.Instance.Session.TaskRefGetColumnText(itemRef, column, options));
                        }
                        foreach (EHPMProjectDefaultColumn builtinCol in activeBuiltinColumns)
                        {
                            HPMColumn column = new HPMColumn();
                            column.m_ColumnType = EHPMColumnType.DefaultColumn;
                            column.m_ColumnID = (uint)builtinCol;
                            row.AddCell(SessionManager.Instance.Session.TaskRefGetColumnText(itemRef, column, options));
                        }
                        foreach (HPMProjectCustomColumnsColumn customColumn in activeCustomColumns)
                        {
                            string displayString;
                            string dbValue = SessionManager.Instance.Session.TaskGetCustomColumnData(item, SessionManager.Instance.Session.UtilGetColumnHash(customColumn));
                            if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.DateTime || customColumn.m_Type == EHPMProjectCustomColumnsColumnType.DateTimeWithTime)
                            {
                                ulong ticksSince1970 = SessionManager.Instance.Session.UtilDecodeCustomColumnDateTimeValue(dbValue)*10;
                                DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddTicks((long)ticksSince1970);
                                if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.DateTime)
                                    displayString = dateTime.ToShortDateString();
                                else
                                    displayString = dateTime.ToString();
                            }
                            else if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.Resources)
                            {
                                displayString ="";
                                HPMResourceDefinitionList resourceList = SessionManager.Instance.Session.UtilDecodeCustomColumnResourcesValue(dbValue);
                                for (int i = 0; i < resourceList.m_Resources.Length; i += 1)
                                {
                                    HPMResourceDefinition resourceDefinition = resourceList.m_Resources[i];
                                    switch (resourceDefinition.m_GroupingType)
                                    {
                                        case EHPMResourceGroupingType.AllProjectMembers:
                                            displayString += "All Project Members";
                                            break;
                                        case EHPMResourceGroupingType.Resource:
                                            displayString += HPMUtilities.GetUserName(resourceDefinition.m_ID);
                                            break;
                                        case EHPMResourceGroupingType.ResourceGroup:
                                            displayString += HPMUtilities.GetGroupName(resourceDefinition.m_ID);
                                            break;
                                    }
                                    if (i < resourceList.m_Resources.Length - 1)
                                        displayString += ", ";
                                }
                            }
                            else if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.DropList)
                            {
                                displayString = HPMUtilities.DecodeDroplistValue(dbValue, customColumn.m_DropListItems);
                            }
                            else if (customColumn.m_Type == EHPMProjectCustomColumnsColumnType.MultiSelectionDropList)
                            {
                                displayString = "";
                                string[] dbValues = dbValue.Split(new char[] { ';' });
                                for (int i = 0; i < dbValues.Length; i += 1)
                                {
                                    displayString += HPMUtilities.DecodeDroplistValue(dbValues[i], customColumn.m_DropListItems);
                                    if (i < dbValues.Length - 1)
                                        displayString += ", ";
                                }
                            }
                            else
                                displayString = dbValue;

                            row.AddCell(displayString);
                        }
                    }
                }
                excelWriter.SaveAsOfficeOpenXml(outputFileName);
            }
            else
                throw new ArgumentException("Could not find the project " + projectName);
        }
        /// <summary>
        /// Gets values from Hansoft and updates data model.
        /// </summary>
        private void UpdateRow(HPMUniqueID taskID, HPMUniqueID projectID, HPMWIColumn column, DataRow drow, bool isForDisplay)
        {
            // get values for multi choice columns by their respective methods...
            string id = Convert.ToString((HPMUInt32)column.Column.m_ColumnID);
            if (column.Column.m_ColumnID == (int)EHPMProjectDefaultColumn.BugPriority)
            {
                drow[id] = Convert.ToInt32(m_VirtSession.TaskGetAgilePriorityCategory(taskID));
            }
            else if (column.Column.m_ColumnID == (int)EHPMProjectDefaultColumn.Risk)
            {
                drow[id] = Convert.ToInt32(m_VirtSession.TaskGetRisk(taskID));
            }
            else if (column.Column.m_ColumnID == (int)EHPMProjectDefaultColumn.Severity)
            {
                drow[id] = Convert.ToInt32(m_VirtSession.TaskGetSeverity(taskID));
            }
            else if (column.Column.m_ColumnID == (int)EHPMProjectDefaultColumn.Confidence)
            {
                drow[id] = Convert.ToInt32(m_VirtSession.TaskGetConfidence(taskID));
            }
            else if ((column.Column.m_ColumnType == EHPMColumnType.CustomColumn) && (column.Type == (int)EHPMProjectCustomColumnsColumnType.DropList))
            {
                string value = m_VirtSession.TaskGetCustomColumnData(taskID, (uint)column.Column.m_ColumnID);
                if (value == "")
                    drow[id] = 0;
                else
                    drow[id] = Convert.ToInt32(value);
            }
            else
            {
                // and use TaskRefGetColumnText to get formatted value for remaining columns
                HPMColumnTextOptions options = new HPMColumnTextOptions();
                options.m_bExpandResources = false;
                options.m_bDisplayUnits = isForDisplay;
                options.m_bForDisplay = isForDisplay;
                options.m_bMyWork = false;
                options.m_bNeedFullProjectPath = false;
                options.m_bOnlyFirstResource = false;
                options.m_bNeedSprintInSubProjectPath = false;
                options.m_bSeparateSubProjectPath = false;

                HPMUniqueID taskrefid = m_VirtSession.TaskGetMainReference(taskID);

                HPMString value = m_VirtSession.TaskRefGetColumnText(taskrefid, column.Column, options);
                drow[id] = value;
            }

        }