VersionOne SDK API Ожидание завершения операции ожидания для исторического запроса? - PullRequest
0 голосов
/ 30 ноября 2018

Моя команда недавно начала использовать SDK versionone, чтобы создать простую (я думаю) программу на C # для получения некоторых запросов из наших проектов V1.Мы только что получили запрос на возврат некоторых данных истории задач, и хотя мы в конечном итоге получаем их успешно, мы видим около 2-3 попыток из-за ошибок тайм-аута операции ожидания только для * исторического извлечения.

Я не знаком с C #, кроме экстремальных базовых знаний в области кодирования, но я попробовал некоторые исправления безрезультатно.Главное, что я попробовал, это настроить размер страницы, но она кажется большой или маленькой.

Помимо исторического флага, код запроса API структурирован так же, как и наши неисторические.Есть ли что-то другое в том, как SDK / API извлекает исторические данные, которые могут быть причиной этого?Некоторые из наших неисторических запросов на самом деле возвращают более чем в 10 раз больше строк, поэтому я не думаю, что это просто проблема размера.

Я не хочу превращать это в «просмотр своего кода», ноЯ включу фрагмент для создания этого запроса в качестве ссылки.Размер страницы сейчас составляет 500, но я пробовал 3000 (это то, что делают другие) и даже 8000, чтобы посмотреть, помогло ли что-нибудь.

 private static List<tbl_stage_Tasks_Status_History> GetAllTasksHistory(IServices services)
    {
        int pageSize = 500;
        int currentPage = 0;
        int history_count = 0;


        #region Task Query Starts
        IAssetType taskType = services.Meta.GetAssetType("Task");
        Query query3 = new Query(taskType, true);
        //Key,Name,Status.Name,Parent.ID.Key,Description,AssetState,CreateDate,CreatedBy.Name,ChangeDate,ChangeReason,ChangeComment,ChangedBy.Name,Order,Custom_ValidatebyWorkshop3.Name,Custom_DCCompletedaysPostWS,Custom_BuildCompletedaysPriortoWS,Custom_Automation
        IAttributeDefinition attrTaskEpicStory1 = taskType.GetAttributeDefinition("Key");
        IAttributeDefinition attrTaskEpicStory4 = taskType.GetAttributeDefinition("Owners.Name");
        IAttributeDefinition attrTaskEpicStory6 = taskType.GetAttributeDefinition("Category.Name");
        IAttributeDefinition attrTaskEpicStory7 = taskType.GetAttributeDefinition("Status.Name");
        IAttributeDefinition attrTaskEpicStory13 = taskType.GetAttributeDefinition("ChangeDate");
        IAttributeDefinition attrTaskEpicStory14 = taskType.GetAttributeDefinition("ChangedBy.Name");
        IAttributeDefinition attrTaskEpicStory21 = taskType.GetAttributeDefinition("Custom_MasterTaskID");



        query3.Selection.Add(attrTaskEpicStory1);
        query3.Selection.Add(attrTaskEpicStory4);
        query3.Selection.Add(attrTaskEpicStory6);
        query3.Selection.Add(attrTaskEpicStory7);
        query3.Selection.Add(attrTaskEpicStory13);
        query3.Selection.Add(attrTaskEpicStory14);
        query3.Selection.Add(attrTaskEpicStory21);


        //Filter the Tasks which have Task Type as Blanks -> Config Center records

        FilterTerm Tasktype = new FilterTerm(attrTaskEpicStory6);
        Tasktype.Equal("");


        //    query3.Filter = Tasktype;

        //Filter the Tasks which have StatusName 

        FilterTerm statusterm = new FilterTerm(attrTaskEpicStory7);
        //statusterm.NotEqual("");
        statusterm.Equal("Ready for Testing");
        statusterm.Equal("Ready for Build");
        statusterm.Equal("Ready for Review");
        statusterm.Equal("Blocked");
        statusterm.Equal("Build");
        statusterm.Equal("Testing");
        //   query3.Filter = statusterm;


        GroupFilterTerm groupFilter = new AndFilterTerm(Tasktype, statusterm);
        query3.Filter = groupFilter;


        List<tbl_stage_Tasks_Status_History> lstTaskHistory = new List<tbl_stage_Tasks_Status_History>();
        query3.Paging.PageSize = pageSize;
        query3.Paging.Start = currentPage;
        bool passed = true;
        do
        {
            try
            {
                Console.WriteLine("Task Status History" + lstTaskHistory.Count);
                Log.Info("Task Status History" + lstTaskHistory.Count);
                QueryResult result3 = services.Retrieve(query3);
                AssetList taskHistory = result3.Assets;
                if (taskHistory.Count > 0)
                {
                    foreach (Asset task in taskHistory)
                    {

                        tbl_stage_Tasks_Status_History taskData = new tbl_stage_Tasks_Status_History();
                        taskData.TaskKey = Convert.ToInt32(task.GetAttribute(attrTaskEpicStory1).Value);

                        string ownerName = string.Empty;
                        try
                        {
                            foreach (var owner in task.GetAttribute(attrTaskEpicStory4).Values)
                            {
                                ownerName = ownerName + owner + "|";
                            }
                            ownerName = ownerName.Remove(ownerName.Length - 1);
                        }
                        catch (Exception ex)
                        {
                            //needs logging 
                        }

                        taskData.TaskType = Convert.ToString(task.GetAttribute(attrTaskEpicStory6).Value);
                        taskData.StatusName = Convert.ToString(task.GetAttribute(attrTaskEpicStory7).Value);
                        taskData.ChangeDate = string.IsNullOrEmpty(Convert.ToString(task.GetAttribute(attrTaskEpicStory13).Value)) ? (DateTime?)null : Convert.ToDateTime(task.GetAttribute(attrTaskEpicStory13).Value);
                        taskData.ChangedBy = Convert.ToString(task.GetAttribute(attrTaskEpicStory14).Value);
                        taskData.MasterTaskId = Convert.ToString(task.GetAttribute(attrTaskEpicStory21).Value);
                        taskData.TaskKeyHistory = task.GetAttribute(attrTaskEpicStory1).Value + "-" + history_count.ToString();
                        //taskData.ClosedDate = string.IsNullOrEmpty(Convert.ToString(task.GetAttribute(attrTaskEpicStory22).Value)) ? (DateTime?)null : Convert.ToDateTime(task.GetAttribute(attrTaskEpicStory22).Value);
                        lstTaskHistory.Add(taskData);

                        history_count++;

                    }

                    query3.Paging.Start = currentPage + pageSize;
                    currentPage = currentPage + pageSize;
                }
                else
                {
                    passed = false;
                }
            }
            catch (Exception ex)
            {
                passed = true;
                Console.WriteLine("TASK STATUS HISTORY ERROR" + ex);
                Log.Error("TASK STATUS HISTORY ERROR" + ex);
            }
        }
        while (passed);


        #endregion Task Query Ends
        return lstTaskHistory;
    }
...