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, Inc do 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"
}
}