Бөлісу құралы:


Получение записи действий в Центре партнеров

Область применения: Центр партнеров | Центр партнеров для 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"
Оператор Оператор для применения. Поддерживаемые операторы можно найти в синтаксисе запроса.

Заголовки запросов

  • Дополнительные сведения см. в заголовках REST Центра parter Center.

Текст запроса

Нет.

Пример запроса

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"
    }
}