Získání záznamu o aktivitě Partnerského centra

Platí pro: Partnerské centrum | Partnerské centrum pro Microsoft Cloud pro státní správu USA

Tento článek popisuje, jak načíst záznam operací provedených uživatelem nebo aplikací partnera v určitém časovém období.

Pomocí tohoto rozhraní API můžete načíst záznamy auditu za posledních 30 dnů od aktuálního data nebo pro rozsah dat určený zahrnutím počátečního data nebo koncového data. Mějte však na paměti, že z důvodů výkonu je dostupnost dat protokolu aktivit omezená na předchozích 90 dnů. Žádosti s počátečním datem delším než 90 dnů před aktuálním datem obdrží chybnou výjimku požadavku (kód chyby: 400) a příslušnou zprávu.

Požadavky

  • Přihlašovací údaje popsané v ověřování v Partnerském centru Tento scénář podporuje ověřování pomocí samostatných přihlašovacích údajů aplikace i aplikace a uživatele.

C#

Pokud chcete načíst záznam operací v Partnerském centru, nejprve nastavte rozsah dat pro záznamy, které chcete načíst. Následující příklad kódu používá pouze počáteční datum, ale můžete také zahrnout koncové datum. Další informace najdete v metodě Dotazu. Dále vytvořte proměnné, které potřebujete pro typ filtru, který chcete použít, a přiřaďte příslušné hodnoty. Pokud chcete například filtrovat podřetěžce názvu společnosti, vytvořte proměnnou, která bude obsahovat podřetěžce. Pokud chcete filtrovat podle ID zákazníka, vytvořte proměnnou pro uchování ID.

V následujícím příkladu se vzorový kód poskytuje k filtrování podle podřetědce názvu společnosti, ID zákazníka nebo typu prostředku. Zvolte jednu a okomentujte ostatní. V každém případě nejprve vytvoříte instanci SimpleFieldFilter objektu pomocí jeho výchozího konstruktoru k vytvoření filtru. Budete muset předat řetězec, který obsahuje pole pro vyhledávání, a příslušný operátor, který se má použít, jak je znázorněno. Musíte také zadat řetězec, podle který chcete filtrovat.

Dále použijte AuditRecords vlastnost získat rozhraní pro audit záznam operace a volání Query nebo QueryAsync metoda spuštění filtru a získat kolekci AuditRecord, která představuje první stránku výsledku. Předejte metodu počáteční datum, volitelné koncové datum, které se v tomto příkladu nepoužívá, a objekt IQuery , který představuje dotaz na entitu. Objekt IQuery je vytvořen předáním filtru vytvořeného výše metodě BuildSimpleQuery QueryFactory.

Jakmile budete mít počáteční stránku položek, použijte Enumerators.AuditRecords.Create metoda k vytvoření enumerátoru, který můžete použít k iteraci přes zbývající stránky.

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

Ukázka: Konzolová testovací aplikace Projekt: Složka ukázek sady SDK v Partnerském centru: Auditování

Požadavek REST

Syntaxe požadavku

metoda Identifikátor URI žádosti
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 identifikátoru URI

Při vytváření požadavku použijte následující parametry dotazu.

Name Type Požadováno Popis
startDate datum No Počáteční datum ve formátu rrrr-mm-dd. Pokud není k dispozici žádná sada výsledků, nastaví se výchozí hodnota 30 dnů před datem žádosti. Tento parametr je volitelný při zadání filtru.
endDate datum No Koncové datum ve formátu rrrr-mm-dd. Tento parametr je volitelný při zadání filtru. Pokud je koncové datum vynecháno nebo nastaveno na hodnotu null, požadavek vrátí maximální interval nebo použije dnešní datum jako koncové datum, podle toho, co je menší.
filter string No Filtr, který se má použít. Tento parametr musí být kódovaný řetězec. Tento parametr je volitelný při zadání počátečního nebo koncového data.

Syntaxe filtru

Parametr filtru musíte vytvořit jako řadu párů klíč-hodnota oddělených čárkami. Každý klíč a hodnota musí být jednotlivě uvozovány a odděleny dvojtečku. Celý filtr musí být kódován.

Nekódovaný příklad vypadá takto:

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

Následující tabulka popisuje požadované páry klíč-hodnota:

Key Hodnota
Pole Pole, které chcete filtrovat. Podporované hodnoty najdete v syntaxi požadavku.
Hodnota Hodnota, podle které chcete filtrovat. Velká a malá písmena hodnoty se ignorují. Následující parametry hodnot jsou podporované, jak je znázorněno v syntaxi požadavku:

searchSubstring – nahraďte názvem společnosti. Můžete zadat podřetěděč, který bude odpovídat části názvu společnosti (například bri se bude shodovat Fabrikam, Inc).
Příklad:"Value":"bri"

customerId – Nahraďte řetězcem formátovaným identifikátorem GUID, který představuje identifikátor zákazníka.
Příklad:"Value":"0c39d6d5-c70d-4c55-bc02-f620844f3fd1"

resourceType – Nahraďte typem prostředku, pro který se mají načíst záznamy auditu (například Předplatné). Dostupné typy prostředků jsou definovány v ResourceType.
Příklad:"Value":"Subscription"
Operátor Operátor, který se má použít. Podporované operátory najdete v syntaxi požadavku.

Záhlaví žádosti

Text požadavku

Nezaokrouhlovat.

Příklad požadavku

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

Odpověď REST

Pokud je tato metoda úspěšná, vrátí sadu aktivit, které splňují filtry.

Kódy úspěšnosti a chyb odpovědi

Každá odpověď obsahuje stavový kód HTTP, který označuje úspěch nebo selhání a další informace o ladění. Ke čtení tohoto kódu, typu chyby a dalších parametrů použijte nástroj pro trasování sítě. Úplný seznam najdete v tématu Kódy chyb REST v Partnerském centru.

Příklad odpovědi

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