Udostępnij za pośrednictwem


Pobieranie rejestru aktywności w Centrum partnerskim

Dotyczy: Centrum partnerskie | Centrum partnerskie dla chmury firmy Microsoft dla instytucji rządowych USA

W tym artykule opisano sposób pobierania rekordu operacji wykonywanych przez użytkownika lub aplikację partnera w danym okresie.

Użyj tego interfejsu API, aby pobrać rekordy inspekcji z poprzednich 30 dni od bieżącej daty lub dla zakresu dat określonego przez dołączenie daty rozpoczęcia i/lub daty zakończenia. Należy jednak pamiętać, że ze względu na wydajność dostępność danych dziennika aktywności jest ograniczona do poprzednich 90 dni. Żądania z datą początkową większą niż 90 dni przed bieżącą datą otrzymają wyjątek nieprawidłowego żądania (kod błędu: 400) i odpowiedni komunikat.

Wymagania wstępne

  • Poświadczenia zgodnie z opisem w temacie Uwierzytelnianie w Centrum partnerskim. Ten scenariusz obsługuje uwierzytelnianie zarówno przy użyciu autonomicznych poświadczeń aplikacji, jak i aplikacji i użytkownika.

C#

Aby pobrać rekord operacji Centrum partnerskiego, najpierw ustal zakres dat dla rekordów, które chcesz pobrać. Poniższy przykład kodu używa tylko daty rozpoczęcia, ale można również dołączyć datę zakończenia. Aby uzyskać więcej informacji, zobacz metodę Query . Następnie utwórz zmienne potrzebne dla typu filtru, który chcesz zastosować, i przypisz odpowiednie wartości. Aby na przykład filtrować według podciągów nazwy firmy, utwórz zmienną do przechowywania podciągów. Aby filtrować według identyfikatora klienta, utwórz zmienną do przechowywania identyfikatora.

W poniższym przykładzie przykładowy kod jest dostarczany do filtrowania według podciągów nazwy firmy, identyfikatora klienta lub typu zasobu. Wybierz jeden i skomentuj inne. W każdym przypadku należy utworzyć wystąpienie obiektu SimpleFieldFilter przy użyciu jego domyślnego konstruktora w celu utworzenia filtru. Musisz przekazać ciąg, który zawiera pole do wyszukiwania, oraz odpowiedni operator, który ma być stosowany, jak pokazano poniżej. Należy również podać ciąg do filtrowania według.

Następnie użyj właściwości AuditRecords, aby uzyskać interfejs do operacji rekordu inspekcji, i wywołaj metodę Query lub QueryAsync, aby wykonać filtr i pobrać kolekcję auditRecord reprezentujący pierwszą stronę wyniku. Przekaż metodę datę rozpoczęcia, opcjonalną datę zakończenia, która nie jest używana w tym przykładzie, oraz obiekt IQuery reprezentujący zapytanie w jednostce. Obiekt IQuery jest tworzony przez przekazanie powyższego filtru do metody BuildSimpleQuery klasy QueryFactory.

Po utworzeniu początkowej strony elementów użyj metody Enumerators.AuditRecords.Create , aby utworzyć moduł wyliczający, którego można użyć do iterowania pozostałych stron.

// 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();
}

Przykład: aplikacja testowa konsoli. Projekt: Folder przykładów zestawu SDK Centrum partnerskiego: Inspekcja

Żądanie REST

Składnia żądania

Method Identyfikator URI żądania
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

Parametr identyfikatora URI

Podczas tworzenia żądania użyj następujących parametrów zapytania.

Nazwisko Type Wymagania opis
startDate data Nie. Data rozpoczęcia w formacie rrrr-mm-dd. Jeśli żadna z nich nie zostanie podana, zestaw wyników będzie domyślnie ustawiony na 30 dni przed datą żądania. Ten parametr jest opcjonalny po podaniu filtru.
endDate data Nie. Data zakończenia w formacie rrrr-mm-dd. Ten parametr jest opcjonalny po podaniu filtru. Gdy data zakończenia zostanie pominięta lub ustawiona na wartość null, żądanie zwróci maksymalne okno lub użyje dzisiaj jako daty zakończenia, w zależności od tego, która wartość jest mniejsza.
filtr string Nie Filtr do zastosowania. Ten parametr musi być ciągiem zakodowanym. Ten parametr jest opcjonalny po podaniu daty rozpoczęcia lub daty zakończenia.

Składnia filtru

Należy utworzyć parametr filtru jako serię par rozdzielonych przecinkami par klucz-wartość. Każdy klucz i wartość muszą być podane indywidualnie i oddzielone dwukropkiem. Cały filtr musi być zakodowany.

Przykład niekodowany wygląda następująco:

?filter{"Field":"CompanyName","Value":"bri","Operator":"substring"}

W poniższej tabeli opisano wymagane pary klucz-wartość:

Key Wartość
Pole Pole do filtrowania. Obsługiwane wartości można znaleźć w sekcji Składnia żądania.
Wartość Wartość do filtrowania według. Wielkość liter wartości jest ignorowana. Następujące parametry wartości są obsługiwane, jak pokazano w sekcji Składnia żądania:

searchSubstring — zastąp ciąg nazwą firmy. Możesz wprowadzić podciąg, aby pasować do części nazwy firmy (na przykład bri będzie pasować Fabrikam, Incdo elementu ).
Przykład: "Value":"bri"

customerId — zastąp ciąg sformatowanym identyfikatorem GUID reprezentującym identyfikator klienta.
Przykład: "Value":"0c39d6d5-c70d-4c55-bc02-f620844f3fd1"

resourceType — zastąp ciąg typem zasobu, dla którego mają być pobierane rekordy inspekcji (na przykład Subskrypcja). Dostępne typy zasobów są definiowane w obszarze ResourceType.
Przykład: "Value":"Subscription"
Operator Operator do zastosowania. Obsługiwane operatory można znaleźć w sekcji Składnia żądania.

Nagłówki żądań

  • Aby uzyskać więcej informacji, zobacz Nagłówki REST centrum parter.

Treść żądania

Brak.

Przykład żądania

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

Odpowiedź REST

W przypadku powodzenia ta metoda zwraca zestaw działań spełniających filtry.

Kody powodzenia i błędów odpowiedzi

Każda odpowiedź zawiera kod stanu HTTP, który wskazuje powodzenie lub niepowodzenie i dodatkowe informacje o debugowaniu. Użyj narzędzia do śledzenia sieci, aby odczytać ten kod, typ błędu i dodatkowe parametry. Aby uzyskać pełną listę, zobacz Kody błędów REST Centrum partnerskiego.

Przykład odpowiedzi

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