Я пытаюсь привести запросы, чтобы получить их быстрее, проблема в том, что я в конечном итоге дублирует тех же 19 человек. < /p>
Для начала мой фильтр: < /p>
(startswith(userprincipalname,'xyz105766')) OR
(startswith(userprincipalname,'xyz111380')) OR
(startswith(userprincipalname,'xyz123220')) OR
(startswith(userprincipalname,'xyz160852')) OR
(startswith(userprincipalname,'xyz197308')) OR
(startswith(userprincipalname,'xyz265002')) OR
(startswith(userprincipalname,'xyz283506')) OR
(startswith(userprincipalname,'xyz309288')) OR
(startswith(userprincipalname,'xyz312202')) OR
(startswith(userprincipalname,'xyz337328'))
Это в одном рабочем вызове, однако, представьте, что у меня есть список фильтров, то, что показано выше, представляет 1 строку в этом списке.
Я попробовал следующее:
var membersList = new List(); // Custom Class
var filters = CreateQueryFilter(list);
var batchRequest = new BatchRequestContentCollection(graphClient);
var batchIds = new List();
int cnt = 0;
foreach (string filter in filters)
{
var requestInfo = graphClient.Users
.ToGetRequestInformation(config => {GetGraphOptions(filter, null); });
batchRequest = new BatchRequestContentCollection(graphClient);
var requestId = await batchRequest.AddBatchRequestStepAsync(requestInfo);
batchIds.Add(requestId);
cnt++;
}
var response = await graphClient.Batch.PostAsync(batchRequest);
// Process each response
foreach (var id in batchIds)
{
var callResult = await response.GetResponseByIdAsync(id);
if (callResult != null && callResult.Value != null)
{
// seems callResult.Value is always 100
matchedUsers.ForEach(s => {
var member = new EntraUser(s);
membersList.Add(member);
});
}
batchIds.Clear();
< /code>
private static Action GetGraphOptions(string filter, string search)
{
return (requestConfiguration) =>
{
requestConfiguration.QueryParameters.Count = true; // this is needed with the consistancy level since not every user has extended properties
requestConfiguration.Headers.Add("ConsistencyLevel", "eventual"); // without this you will get the Property 'extensionAttribute ?' does not exist as a declared property or extension property
requestConfiguration.QueryParameters.Select = [.. GetEntraProperties()];
requestConfiguration.QueryParameters.Orderby = ["displayName asc"];
if (filter != null)
{
requestConfiguration.QueryParameters.Filter = filter;
}
if (search != null)
{
requestConfiguration.QueryParameters.Search = search;
}
};
}
public List CreateQueryFilter(List filter)
{
List result = new List();
if (filter is null || filter.Count == 0)
return result;
int iter = 10;
for (int i = 0; i < filter.Count; i += iter)
{
var limitedList = filter.Skip(i).Take(iter);
result.Add(SearchToString(
EntraSearchText.JoinCondition.OR,
[new(limitedList, [EntraSearchText.FilterUpnString], EntraSearchText.JoinCondition.OR)]
));
}
return result;
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... every-time
Entra Pactor, возвращая одни и те же данные каждый раз ⇐ C#
Место общения программистов C#
-
Anonymous
1751133040
Anonymous
Я пытаюсь привести запросы, чтобы получить их быстрее, проблема в том, что я в конечном итоге дублирует тех же 19 человек. < /p>
Для начала мой фильтр: < /p>
(startswith(userprincipalname,'xyz105766')) OR
(startswith(userprincipalname,'xyz111380')) OR
(startswith(userprincipalname,'xyz123220')) OR
(startswith(userprincipalname,'xyz160852')) OR
(startswith(userprincipalname,'xyz197308')) OR
(startswith(userprincipalname,'xyz265002')) OR
(startswith(userprincipalname,'xyz283506')) OR
(startswith(userprincipalname,'xyz309288')) OR
(startswith(userprincipalname,'xyz312202')) OR
(startswith(userprincipalname,'xyz337328'))
Это в одном рабочем вызове, однако, представьте, что у меня есть список фильтров, то, что показано выше, представляет 1 строку в этом списке.
Я попробовал следующее:
var membersList = new List(); // Custom Class
var filters = CreateQueryFilter(list);
var batchRequest = new BatchRequestContentCollection(graphClient);
var batchIds = new List();
int cnt = 0;
foreach (string filter in filters)
{
var requestInfo = graphClient.Users
.ToGetRequestInformation(config => {GetGraphOptions(filter, null); });
batchRequest = new BatchRequestContentCollection(graphClient);
var requestId = await batchRequest.AddBatchRequestStepAsync(requestInfo);
batchIds.Add(requestId);
cnt++;
}
var response = await graphClient.Batch.PostAsync(batchRequest);
// Process each response
foreach (var id in batchIds)
{
var callResult = await response.GetResponseByIdAsync(id);
if (callResult != null && callResult.Value != null)
{
// seems callResult.Value is always 100
matchedUsers.ForEach(s => {
var member = new EntraUser(s);
membersList.Add(member);
});
}
batchIds.Clear();
< /code>
private static Action GetGraphOptions(string filter, string search)
{
return (requestConfiguration) =>
{
requestConfiguration.QueryParameters.Count = true; // this is needed with the consistancy level since not every user has extended properties
requestConfiguration.Headers.Add("ConsistencyLevel", "eventual"); // without this you will get the Property 'extensionAttribute ?' does not exist as a declared property or extension property
requestConfiguration.QueryParameters.Select = [.. GetEntraProperties()];
requestConfiguration.QueryParameters.Orderby = ["displayName asc"];
if (filter != null)
{
requestConfiguration.QueryParameters.Filter = filter;
}
if (search != null)
{
requestConfiguration.QueryParameters.Search = search;
}
};
}
public List CreateQueryFilter(List filter)
{
List result = new List();
if (filter is null || filter.Count == 0)
return result;
int iter = 10;
for (int i = 0; i < filter.Count; i += iter)
{
var limitedList = filter.Skip(i).Take(iter);
result.Add(SearchToString(
EntraSearchText.JoinCondition.OR,
[new(limitedList, [EntraSearchText.FilterUpnString], EntraSearchText.JoinCondition.OR)]
));
}
return result;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79679670/entra-batch-returning-same-data-every-time[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия