Моя команда недавно начала использовать 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;
}