Obtener un registro de la actividad del Centro de partners

Se aplica a: Centro de partners | Centro de partners para Microsoft Cloud for US Government

En este artículo se describe cómo recuperar un registro de las operaciones realizadas por un usuario asociado o una aplicación durante un período de tiempo.

Use esta API para recuperar los registros de auditoría de los 30 días anteriores a partir de la fecha actual o para un intervalo de fechas especificado mediante la inclusión de la fecha de inicio o la fecha de finalización. Sin embargo, tenga en cuenta que, por motivos de rendimiento, la disponibilidad de los datos del registro de actividad se limita a los 90 días anteriores. Las solicitudes con una fecha de inicio superior a 90 días antes de la fecha actual recibirán una excepción de solicitud incorrecta (código de error: 400) y un mensaje adecuado.

Requisitos previos

  • Credenciales tal como se describen en el artículo Autenticación del Centro de partners. Este escenario admite la autenticación con credenciales de aplicación independiente y app+usuario.

C#

Para recuperar un registro de las operaciones del Centro de partners, establezca primero el intervalo de fechas de los registros que desea recuperar. En el ejemplo de código siguiente solo se usa una fecha de inicio, pero también puede incluir una fecha de finalización. Para obtener más información, consulte el método Query. A continuación, cree las variables que necesita para el tipo de filtro que desea aplicar y asigne los valores adecuados. Por ejemplo, para filtrar por subcadena de nombre de empresa, cree una variable para contener la subcadena. Para filtrar por identificador de cliente, cree una variable para contener el identificador.

En el ejemplo siguiente, se proporciona código de ejemplo para filtrar por una subcadena de nombre de empresa, identificador de cliente o tipo de recurso. Elija uno y comente los demás. En cada caso, primero se crea una instancia de un objeto SimpleFieldFilter mediante su constructor predeterminado para crear el filtro. Deberá pasar una cadena que contenga el campo que se va a buscar y el operador adecuado que se va a aplicar, como se muestra. También debe proporcionar la cadena para filtrar por.

A continuación, use la propiedad AuditRecords para obtener una interfaz para auditar las operaciones de registro, y llame al método Query o QueryAsync para ejecutar el filtro y obtener la colección de AuditRecord que representan la primera página del resultado. Pase el método la fecha de inicio, una fecha de finalización opcional que no se usa en el ejemplo aquí y un objeto IQuery que representa una consulta en una entidad. El objeto IQuery se crea pasando el filtro creado anteriormente al método BuildSimpleQuery deQueryFactory.

Una vez que tenga la página inicial de elementos, use el método Enumerators.AuditRecords.Create para crear un enumerador que puede usar para recorrer en iteración las páginas restantes.

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

Ejemplo: Aplicación de prueba de consola. Proyecto: Carpeta de ejemplos del SDK del Centro de partners: Auditoría

Solicitud REST

Sintaxis de la solicitud

Método URI de solicitud
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

Parámetro de URI

Use los siguientes parámetros de consulta al crear la solicitud.

Nombre Type Obligatorio Descripción
startDate date No Fecha de inicio en formato aaaa-mm-dd. Si no se proporciona ninguno, el conjunto de resultados tendrá como valor predeterminado 30 días antes de la fecha de solicitud. Este parámetro es opcional cuando se proporciona un filtro.
endDate date No Fecha de finalización en formato aaaa-mm-dd. Este parámetro es opcional cuando se proporciona un filtro. Cuando se omite la fecha de finalización o se establece en NULL, la solicitud devuelve la ventana máxima o usa hoy como fecha de finalización, lo que sea menor.
filter string No El filtro que se va a aplicar. Este parámetro debe ser una cadena codificada. Este parámetro es opcional cuando se proporciona la fecha de inicio o la fecha de finalización.

Sintaxis de filtro

Debe componer el parámetro de filtro como una serie de pares separados por comas y clave-valor. Cada clave y valor debe estar entrecomillado individualmente y separado por dos puntos. Todo el filtro debe estar codificado.

Un ejemplo sin codificar tiene este aspecto:

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

En la tabla siguiente se describen los pares clave-valor necesarios:

Key Value
Campo El campo que se va a filtrar. Los valores admitidos se pueden encontrar en Sintaxis de solicitud.
Value El valor según el cual se aplicará el filtro. El caso del valor se omite. Los parámetros de valor siguientes se admiten como se muestra en Sintaxis de solicitud:

searchSubstring : reemplace por el nombre de la empresa. Puede escribir una subcadena para que coincida con parte del nombre de la compañía (por ejemplo, bri coincidirá con Fabrikam, Inc).
Ejemplo"Value":"bri":

customerId : reemplace por una cadena con formato GUID que representa el identificador del cliente.
Ejemplo"Value":"0c39d6d5-c70d-4c55-bc02-f620844f3fd1":

resourceType : reemplace por el tipo de recurso para el que se van a recuperar los registros de auditoría (por ejemplo, Suscripción). Los tipos de recursos disponibles se definen en ResourceType.
Ejemplo"Value":"Subscription":
Operador El operador que se va a aplicar. Los operadores admitidos se pueden encontrar en Sintaxis de solicitud.

Encabezados de solicitud

  • Para obtener más información, consulte Encabezados REST del Centro de Parter.

Cuerpo de la solicitud

Ninguno.

Ejemplo de solicitud

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

Respuesta REST

Si se ejecuta correctamente, este método devuelve un conjunto de actividades que cumplen los filtros.

Códigos de error y de respuesta correctos

Cada respuesta incluye un código de estado HTTP que indica si la operación se ha realizado correctamente o con errores y proporciona información de depuración adicional. Use una herramienta de seguimiento de red para leer este código, el tipo de error y los parámetros adicionales. Para obtener la lista completa, consulta Códigos de error de REST del Centro de partners.

Ejemplo de respuesta

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