Получение записи действий в Центре партнеров
Область применения: Центр партнеров | Центр партнеров для Microsoft Cloud for US Government
В этой статье описывается, как получить запись операций, выполняемых пользователем или приложением партнера за период времени.
Используйте этот API для получения записей аудита за предыдущие 30 дней с текущей даты или диапазона дат, указанных в том числе датой начала и (или) датой окончания. Обратите внимание, что по соображениям производительности доступность данных журнала действий ограничена предыдущими 90 днями. Запросы с датой начала, превышающей 90 дней до текущей даты, получат неправильное исключение запроса (код ошибки: 400) и соответствующее сообщение.
Необходимые компоненты
- Учетные данные, описанные в статье о проверке подлинности в Центре партнеров. Этот сценарий поддерживает проверку подлинности с помощью автономных учетных данных приложения и приложения и пользователя.
C#
Чтобы получить запись операций Центра партнеров, сначала установите диапазон дат для записей, которые требуется извлечь. В следующем примере кода используется только дата начала, но можно также включить дату окончания. Дополнительные сведения см. в методе Query . Затем создайте переменные, необходимые для типа фильтра, который вы хотите применить, и назначьте соответствующие значения. Например, чтобы отфильтровать подстроку имени компании, создайте переменную для хранения подстроки. Чтобы отфильтровать по идентификатору клиента, создайте переменную для хранения идентификатора.
В следующем примере пример кода предоставляется для фильтрации по подстроке имени компании, идентификатору клиента или типу ресурса. Выберите один из них и закомментируйте другие. В каждом случае сначала создается экземпляр объекта SimpleFieldFilter с помощью конструктора по умолчанию для создания фильтра. Необходимо передать строку, содержащую поле для поиска, и соответствующий оператор для применения, как показано ниже. Кроме того, необходимо указать строку для фильтрации.
Затем используйте свойство AuditRecords, чтобы получить интерфейс для аудита операций записи и вызвать метод Query или QueryAsync для выполнения фильтра и получения коллекции AuditRecord, представляющей первую страницу результата. Передайте метод датой начала, необязательной датой окончания, не используемой в примере здесь, и объектом IQuery , который представляет запрос к сущности. Объект IQuery создается путем передачи фильтра, созданного выше, методу BuildSimpleQuery QueryFactory.
После создания начальной страницы элементов используйте метод Enumerators.AuditRecords.Create для создания перечислителя, который можно использовать для итерации оставшихся страниц.
// IAggregatePartner partnerOperations;
var startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 01);
// First perform the query, then get the enumerator. Choose one of the following and comment out the other two.
// To retrieve audit records by company name substring (for example "bri" matches "Fabrikam, Inc.").
var searchSubstring="bri";
var filter = new SimpleFieldFilter(AuditRecordSearchField.CompanyName.ToString(), FieldFilterOperation.Substring, searchSubstring);
var auditRecordsPage = partnerOperations.AuditRecords.Query(startDate.Date, query: QueryFactory.Instance.BuildSimpleQuery(filter));
// To retrieve audit records by customer ID.
var customerId="0c39d6d5-c70d-4c55-bc02-f620844f3fd1";
var filter = new SimpleFieldFilter(AuditRecordSearchField.CustomerId.ToString(), FieldFilterOperation.Equals, customerId);
var auditRecordsPage = partnerOperations.AuditRecords.Query(startDate.Date, query: QueryFactory.Instance.BuildSimpleQuery(filter));
// To retrieve audit records by resource type.
int resourceTypeInt = 3; // Subscription Resource.
string searchField = Enum.GetName(typeof(ResourceType), resourceTypeInt);
var filter = new SimpleFieldFilter(AuditRecordSearchField.ResourceType.ToString(), FieldFilterOperation.Equals, searchField);
var auditRecordsPage = partnerOperations.AuditRecords.Query(startDate.Date, query: QueryFactory.Instance.BuildSimpleQuery(filter));
var auditRecordEnumerator = partnerOperations.Enumerators.AuditRecords.Create(auditRecordsPage);
int pageNumber = 1;
while (auditRecordEnumerator.HasValue)
{
// Work with the current page.
foreach (var c in auditRecordEnumerator.Current.Items)
{
// Display some info, such as operation type, operation date, and operation status.
Console.WriteLine(string.Format("{0} {1} {2}.", c.OperationType, c.OperationDate, c.OperationStatus));
}
// Get the next page of audit records.
auditRecordEnumerator.Next();
}
Пример: тестовое приложение консоли. Проект: папка примеров пакета SDK Центра партнеров: аудит
Запрос REST
Синтаксис запроса
Способ | URI запроса |
---|---|
GET | {baseURL}/v1/auditrecords?startDate={startDate} HTTP/1.1 |
GET | {baseURL}/v1/auditrecords?startDate={startDate}&endDate={endDate} HTTP/1.1 |
GET | {baseURL}/v1/auditrecords?startDate={startDate}&endDate={endDate}&filter={"Field":"CompanyName","Value":"{searchSubstring}","Operator":"substring"} HTTP/1.1 |
GET | {baseURL}/v1/auditrecords?startDate={startDate}&endDate={endDate}&filter={"Field":"CustomerId","Value":"{customerId}","Operator":"equals"} HTTP/1.1 |
GET | {baseURL}/v1/auditrecords?startDate={startDate}&endDate={endDate}&filter={"Field":"ResourceType","Value":"{resourceType}","Operator":"equals"} HTTP/1.1 |
Параметр универсального кода ресурса
При создании запроса используйте следующие параметры запроса.
Имя. | Type | Обязательно | Описание |
---|---|---|---|
startDate | Дата | No | Дата начала в формате гггг-мм-дд. Если нет, результирующий набор по умолчанию будет по умолчанию 30 дней до даты запроса. Этот параметр является необязательным при указании фильтра. |
endDate | Дата | No | Дата окончания в формате гггг-мм-дд. Этот параметр является необязательным при указании фильтра. Если дата окончания опущена или задана в значение NULL, запрос возвращает максимальное окно или используется сегодня в качестве даты окончания, в зависимости от того, что меньше. |
Фильтр | строка | Нет | Применяемый фильтр. Этот параметр должен быть закодированной строкой. Этот параметр является необязательным при указании даты начала или окончания. |
Синтаксис выражений фильтрации
Необходимо создать параметр фильтра в виде ряда разделенных запятыми пар "ключ-значение". Каждые ключ и значение должны быть по отдельности заключены в кавычки и разделены двоеточием. Весь фильтр должен быть закодирован.
Пример без кода выглядит следующим образом:
?filter{"Field":"CompanyName","Value":"bri","Operator":"substring"}
В следующей таблице описаны необходимые пары "ключ-значение".
Ключ | Значение |
---|---|
Поле | Поле для фильтрации. Поддерживаемые значения можно найти в синтаксисе запроса. |
Значение | Значение для фильтрации. Случай значения игнорируется. Следующие параметры значения поддерживаются, как показано в синтаксисе запроса: searchSubstring — замените именем компании. Вы можете ввести подстроку для сопоставления части имени компании (например, bri будет соответствовать Fabrikam, Inc ).Пример: "Value":"bri" customerId — замените форматированную строку GUID, представляющую идентификатор клиента. Пример: "Value":"0c39d6d5-c70d-4c55-bc02-f620844f3fd1" resourceType — замените типом ресурса, для которого требуется получить записи аудита (например, подписка). Доступные типы ресурсов определены в ResourceType. Пример: "Value":"Subscription" |
Оператор | Оператор для применения. Поддерживаемые операторы можно найти в синтаксисе запроса. |
Заголовки запросов
Текст запроса
Нет.
Пример запроса
GET https://api.partnercenter.microsoft.com/v1/auditrecords?startDate=6/1/2017%2012:00:00%20AM&filter=%7B%22Field%22:%22CustomerId%22,%22Value%22:%220c39d6d5-c70d-4c55-bc02-f620844f3fd1%22,%22Operator%22:%22equals%22%7D HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 127facaa-e389-41f8-8bb7-1d1af99db893
MS-CorrelationId: de9c2ccc-40dd-4186-9660-65b9b64c3d14
X-Locale: en-US
Host: api.partnercenter.microsoft.com
Connection: Keep-Alive
Ответ REST
В случае успешного выполнения этот метод возвращает набор действий, удовлетворяющих фильтрам.
Коды успешного выполнения и ошибок в ответе
Каждый ответ сопровождается кодом состояния HTTP, обозначающим успешное или неудачное выполнение, и дополнительными сведениями для отладки. Используйте средство трассировки сети, чтобы просматривать этот код, тип ошибки и дополнительные параметры. Полный список ответов есть в статье Коды ошибок REST в Центре партнеров.
Пример ответа
HTTP/1.1 200 OK
Content-Length: 2859
Content-Type: application/json; charset=utf-8
MS-CorrelationId: de9c2ccc-40dd-4186-9660-65b9b64c3d14
MS-RequestId: 127facaa-e389-41f8-8bb7-1d1af99db893
MS-CV: 4xDKynq/zE2im0wj.0
MS-ServerId: 030011719
Date: Tue, 27 Jun 2017 22:19:46 GMT
{
"totalCount": 2,
"items": [{
"partnerId": "3b33e682-00c3-41ee-9dd2-a548adf56438",
"customerId": "0c39d6d5-c70d-4c55-bc02-f620844f3fd1",
"customerName": "Relecloud",
"userPrincipalName": "admin@domain.onmicrosoft.com",
"resourceType": "order",
"resourceNewValue": "{\"Id\":\"d51a052e-043c-4a2a-aa37-2bb938cef6c1\",\"ReferenceCustomerId\":\"0c39d6d5-c70d-4c55-bc02-f620844f3fd1\",\"BillingCycle\":\"none\",\"LineItems\":[{\"LineItemNumber\":0,\"OfferId\":\"C0BD2E08-11AC-4836-BDC7-3712E744922F\",\"SubscriptionId\":\"488745B5-2086-4912-802C-6ABB9F7C3638\",\"ParentSubscriptionId\":null,\"FriendlyName\":\"Office 365 Business Premium Trial\",\"Quantity\":25,\"PartnerIdOnRecord\":null,\"Links\":{\"Subscription\":{\"Uri\":\"/customers/0c39d6d5-c70d-4c55-bc02-f620844f3fd1/subscriptions/488745B5-2086-4912-802C-6ABB9F7C3638\",\"Method\":\"GET\",\"Headers\":[]}}}],\"CreationDate\":\"2017-06-15T15:56:04.077-07:00\",\"Links\":{\"Self\":{\"Uri\":\"/customers/0c39d6d5-c70d-4c55-bc02-f620844f3fd1/orders/d51a052e-043c-4a2a-aa37-2bb938cef6c1\",\"Method\":\"GET\",\"Headers\":[]}},\"Attributes\":{\"Etag\":\"eyJpZCI6ImQ1MWEwNTJlLTA0M2MtNGEyYS1hYTM3LTJiYjkzOGNlZjZjMSIsInZlcnNpb24iOjF9\",\"ObjectType\":\"Order\"}}",
"operationType": "create_order",
"operationDate": "2017-06-15T22:56:05.0589308Z",
"operationStatus": "succeeded",
"customizedData": [{
"key": "OrderId",
"value": "d51a052e-043c-4a2a-aa37-2bb938cef6c1"
}, {
"key": "BillingCycle",
"value": "None"
}, {
"key": "OfferId-0",
"value": "C0BD2E08-11AC-4836-BDC7-3712E744922F"
}, {
"key": "SubscriptionId-0",
"value": "488745B5-2086-4912-802C-6ABB9F7C3638"
}, {
"key": "SubscriptionName-0",
"value": "Office 365 Business Premium Trial"
}, {
"key": "Quantity-0",
"value": "25"
}, {
"key": "PartnerOnRecord-0",
"value": null
}
],
"attributes": {
"objectType": "AuditRecord"
}
}, {
"partnerId": "3b33e682-00c3-41ee-9dd2-a548adf56438",
"customerId": "0c39d6d5-c70d-4c55-bc02-f620844f3fd1",
"customerName": "Relecloud",
"userPrincipalName": "admin@domain.onmicrosoft.com",
"applicationId": "Partner Center Native App",
"resourceType": "license",
"resourceNewValue": "{\"LicensesToAssign\":[{\"ExcludedPlans\":null,\"SkuId\":\"efccb6f7-5641-4e0e-bd10-b4976e1bf68e\"}],\"LicensesToRemove\":null,\"LicenseWarnings\":[],\"Attributes\":{\"ObjectType\":\"LicenseUpdate\"}}",
"operationType": "update_customer_user_licenses",
"operationDate": "2017-06-01T20:09:07.0450483Z",
"operationStatus": "succeeded",
"customizedData": [{
"key": "CustomerUserId",
"value": "482e2152-4b49-48ec-b715-823365ce3d4c"
}, {
"key": "AddedLicenseSkuId",
"value": "efccb6f7-5641-4e0e-bd10-b4976e1bf68e"
}
],
"attributes": {
"objectType": "AuditRecord"
}
}
],
"links": {
"self": {
"uri": "/auditrecords?startDate=2017-06-01&size=500&filter=%7B%22Field%22%3A%22CustomerId%22%2C%22Value%22%3A%220c39d6d5-c70d-4c55-bc02-f620844f3fd1%22%2C%22Operator%22%3A%22equals%22%7D",
"method": "GET",
"headers": []
}
},
"attributes": {
"objectType": "Collection"
}
}