Uzyskaj zapis aktywności Centrum Partnerów
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.
Warunki wstępne
- Poświadczenia zgodnie z opisem w uwierzytelnianie w Centrum partnerskim. Ten scenariusz obsługuje uwierzytelnianie zarówno za pomocą samodzielnych poświadczeń aplikacji, jak i poświadczeń aplikacji oraz 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 najpierw tworzysz obiekt SimpleFieldFilter, korzystając z jego domyślnego konstruktora , aby stworzyć filtr. 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.
Następnie użyj właściwości AuditRecords, aby uzyskać interfejs do operacji rekordów inspekcji i wywołać metodę Query lub QueryAsync, aby wykonać filtr i pobrać kolekcję AuditRecord's, które reprezentują pierwszą stronę wyniku. Przekaż do metody datę rozpoczęcia, opcjonalną datę zakończenia, która nie jest używana w tym przykładzie, oraz obiekt IQuery reprezentujący zapytanie dotyczące jednostki. Obiekt IQuery jest tworzony przez przekazanie powyższego filtru do metodyBuildSimpleQue ryQueryFactory.
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="bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f";
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ładowy: aplikacja testowa konsoli. projekt: Partner Center SDK Samples folder: Auditing
Żądanie REST
Składnia żądania
Metoda | Żądanie 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 |
Parametr identyfikatora URI
Podczas tworzenia żądania użyj następujących parametrów zapytania.
Nazwa | Typ | Wymagane | Opis |
---|---|---|---|
dataRozpoczęcia | data | Nie | Data rozpoczęcia w czterocyfrowym 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. |
data zakończenia | 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 | struna | 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 klucz-wartość rozdzielonych przecinkami. 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ść.
Klucz | Wartość |
---|---|
Pole | Pole do filtrowania. Obsługiwane wartości można znaleźć w składni żądania. |
Wartość | Wartość, według której należy filtrować. Wielkość liter wartości jest ignorowana. Następujące parametry wartości są obsługiwane, jak pokazano w Składnia żądania: searchSubstring — zastąp ciąg nazwą firmy. Możesz wprowadzić podciąg, aby dopasować część nazwy firmy (na przykład bri będzie zgodny z Fabrikam, Inc ).przykład : "Value":"bri" customerId — zastąp ciąg identyfikatorem GUID sformatowanym, który reprezentuje identyfikator klienta. przykład : "Value":"bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f" resourceType — zastąp tym typem zasobu, dla którego chcesz pobrać rekordy inspekcji (na przykład subskrypcja). Dostępne typy zasobów są definiowane w ResourceType. przykład : "Value":"Subscription" |
Operator | Operator, który ma być zastosowany. Obsługiwane operatory można znaleźć w Składnia żądania. |
Nagłówki żądań
- Aby uzyskać więcej informacji, zobacz nagłówki REST Parter Center.
Treść żądania
Żaden.
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: aaaa0000-bb11-2222-33cc-444444dddddd
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 sukcesu 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: aaaa0000-bb11-2222-33cc-444444dddddd
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": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"customerId": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
"customerName": "Relecloud",
"userPrincipalName": "admin@domain.onmicrosoft.com",
"resourceType": "order",
"resourceNewValue": "{\"Id\":\"cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a\",\"ReferenceCustomerId\":\"bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f\",\"BillingCycle\":\"none\",\"LineItems\":[{\"LineItemNumber\":0,\"OfferId\":\"C0BD2E08-11AC-4836-BDC7-3712E744922F\",\"SubscriptionId\":\"aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e\",\"ParentSubscriptionId\":null,\"FriendlyName\":\"Office 365 Business Premium Trial\",\"Quantity\":25,\"PartnerIdOnRecord\":null,\"Links\":{\"Subscription\":{\"Uri\":\"/customers/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e\",\"Method\":\"GET\",\"Headers\":[]}}}],\"CreationDate\":\"2017-06-15T15:56:04.077-07:00\",\"Links\":{\"Self\":{\"Uri\":\"/customers/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f/orders/cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a\",\"Method\":\"GET\",\"Headers\":[]}},\"Attributes\":{\"Etag\":\"eyJpZCI6ImQ1MWEwNTJlLTA0M2MtNGEyYS1hYTM3LTJiYjkzOGNlZjZjMSIsInZlcnNpb24iOjF9\",\"ObjectType\":\"Order\"}}",
"operationType": "create_order",
"operationDate": "2017-06-15T22:56:05.0589308Z",
"operationStatus": "succeeded",
"customizedData": [{
"key": "OrderId",
"value": "cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6a"
}, {
"key": "BillingCycle",
"value": "None"
}, {
"key": "OfferId-0",
"value": "C0BD2E08-11AC-4836-BDC7-3712E744922F"
}, {
"key": "SubscriptionId-0",
"value": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"
}, {
"key": "SubscriptionName-0",
"value": "Office 365 Business Premium Trial"
}, {
"key": "Quantity-0",
"value": "25"
}, {
"key": "PartnerOnRecord-0",
"value": null
}
],
"attributes": {
"objectType": "AuditRecord"
}
}, {
"partnerId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"customerId": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
"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"
}
}