Compartir vía


Ejemplo de funciones y acciones de la API web

En este grupo de ejemplos se muestra cómo realizar funciones y acciones enlazadas y sin enlazar, incluidas acciones personalizadas, mediante la API web de Microsoft Dataverse. El ejemplo se implementa como un proyecto independiente para los siguientes lenguajes:

En este artículo se explican la estructura y el contenido del ejemplo en un nivel superior de lenguaje neutro. Para obtener detalles de implementación específicos del lenguaje sobre cómo realizar las operaciones descritas en este artículo, consulte los artículos de ejemplo vinculados.

Demostraciones

Este ejemplo se divide en las siguientes secciones principales, que contienen operaciones de funciones y acciones de la API web que se describen minuciosamente en los artículos conceptuales asociados.

Sección del artículo Vista asociada de los artículos
Sección 1: Función independiente WhoAmI Función WhoAmI
Funciones sin enlazar
Sección 2: Función independiente FormatAddress Función FormatAddress
Paso de parámetros a una función
Sección 3: Función independiente InitializeFrom Función InitializeFrom
Crear un registro a partir de otro registro
Asignar columnas de tabla
Personalizar las asignaciones de tablas y columnas
Sección 4: Función independiente RetrieveCurrentOrganization Función RetrieveCurrentOrganization
Sección 6: Función vinculada de API personalizada IsSystemAdmin Funciones enlazadas
Usar funciones enlazadas
Ejemplo: API personalizada IsSystemAdmin
Crear y usar API personalizadas
Sección 7: Acción sin consolidar GrantAccess Acción GrantAccess
Compartir y asignar
Función RetrievePrincipalAccess
Sección 8: Acciones vinculadas AddPrivilegesRole Acciones enlazadas
Usar acciones enlazadas
Acción AddPrivilegesRole
Referencia de tabla/entidad Security Role (Role)
Sección 9: Eliminar registros de muestra Eliminación básica
Ejecute las operaciones por lotes mediante API web

Las secciones siguientes contienen una breve explicación de las operaciones de API web de Dataverse, junto con los mensajes HTTP correspondientes y la salida de la consola asociada.

Sección 1: Función unbound WhoAmI

La función WhoAmI es una función sencilla y habitualmente usada sin enlazar.

Solicitud:

GET [Organization Uri]/api/data/v9.2/WhoAmI HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Respuesta:

HTTP/1.1 200 OK
OData-Version: 4.0

{
  "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.WhoAmIResponse",
  "BusinessUnitId": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
  "UserId": "22cc22cc-dd33-ee44-ff55-66aa66aa66aa",
  "OrganizationId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee"
}

Salida de la consola:

WhoAmI tells us:
WhoAmIResponse.BusinessUnitId:11bb11bb-cc22-dd33-ee44-55ff55ff55ff
WhoAmIResponse.UserId:22cc22cc-dd33-ee44-ff55-66aa66aa66aa
WhoAmIResponse.OrganizationId:00aa00aa-bb11-cc22-dd33-44ee44ee44ee

Utilice el valor BusinessUnitId recuperado aquí en la Sección 8: Acción Enlazada AddPrivilegesRole.

Sección 2: Función no vinculada FormatoDirección

La función FormatAddress es una función sin enlazar que requiere parámetros. Devuelve una cadena que representa una dirección según los requisitos específicos de formato regional o país.

En este ejemplo, establezca los parámetros mediante valores de parámetro de cadena de consulta.

  1. Una solicitud de dirección en los Estados Unidos:

    Solicitud:

    GET [Organization Uri]/api/data/v9.2/FormatAddress(Line1=@p1,City=@p2,StateOrProvince=@p3,PostalCode=@p4,Country=@p5)?@p1='123%20Maple%20St.'&@p2='Seattle'&@p3='WA'&@p4='98007'&@p5='USA' HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    

    Respuesta:

    HTTP/1.1 200 OK
    OData-Version: 4.0
    
    {
    "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.FormatAddressResponse",
    "Address": "123 Maple St.\r\nSeattle, WA 98007\r\nUSA"
    }
    

    Salida de la consola:

    USA Formatted Address:
    123 Maple St.
    Seattle, WA 98007
    USA
    
  2. Una solicitud de una dirección en Japón.

    Solicitud:

    GET [Organization Uri]/api/data/v9.2/FormatAddress(Line1=@p1,City=@p2,StateOrProvince=@p3,PostalCode=@p4,Country=@p5)?@p1='1-2-3%20Sakura'&@p2='Nagoya'&@p3='Aichi'&@p4='455-2345'&@p5='JAPAN' HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    

    Respuesta:

    HTTP/1.1 200 OK
    OData-Version: 4.0
    
    {
    "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.FormatAddressResponse",
    "Address": "455-2345\r\nAichi\r\nNagoya\r\n1-2-3 Sakura\r\nJAPAN"
    }
    

    Salida de la consola:

    JAPAN Formatted Address:
    455-2345
    Aichi
    Nagoya
    1-2-3 Sakura
    JAPAN
    

Sección 3: InicializarDesde de la función no vinculada

La función InitializeFrom es una función sin enlazar que requiere parámetros. Esta función devuelve los datos para crear un nuevo registro en el contexto de un registro existente. Dependiendo de los datos de configuración para controlar qué datos se copian, los datos de registro devueltos incluyen los datos copiados del registro original.

Más información:

  1. Cree un registro para que sea el registro original:

    Solicitud:

    POST [Organization Uri]/api/data/v9.2/accounts HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    
    {
    "accountcategorycode": 1,
    "address1_addresstypecode": 3,
    "address1_city": "Redmond",
    "address1_country": "USA",
    "address1_line1": "123 Maple St.",
    "address1_name": "Corporate Headquarters",
    "address1_postalcode": "98000",
    "address1_shippingmethodcode": 4,
    "address1_stateorprovince": "WA",
    "address1_telephone1": "555-1234",
    "customertypecode": 3,
    "description": "Contoso is a business consulting company.",
    "emailaddress1": "info@contoso.com",
    "industrycode": 7,
    "name": "Contoso Consulting",
    "numberofemployees": 150,
    "ownershipcode": 2,
    "preferredcontactmethodcode": 2,
    "telephone1": "(425) 555-1234"
    }
    

    Respuesta:

    HTTP/1.1 204 NoContent
    OData-Version: 4.0
    OData-EntityId: [Organization Uri]/api/data/v9.2/accounts(22cc22cc-dd33-ee44-ff55-66aa66aa66aa)
    
  2. Use InitializeFrom para obtener los datos de un nuevo registro a partir del registro original.

    Solicitud:

    GET [Organization Uri]/api/data/v9.2/InitializeFrom(EntityMoniker=@p1,TargetEntityName=@p2,TargetFieldType=@p3)?@p1={'@odata.id':'accounts(22cc22cc-dd33-ee44-ff55-66aa66aa66aa)'}&@p2='account'&@p3=Microsoft.Dynamics.CRM.TargetFieldType'ValidForCreate' HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    

    Respuesta:

    HTTP/1.1 200 OK
    Preference-Applied: return=representation
    OData-Version: 4.0
    
    {
    "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#accounts/$entity",
    "@odata.type": "#Microsoft.Dynamics.CRM.account",
    "parentaccountid@odata.bind": "accounts(22cc22cc-dd33-ee44-ff55-66aa66aa66aa)"
    }
    

    Salida de la consola:

    New data based on original record:
    {
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",
    "@odata.type": "#Microsoft.Dynamics.CRM.account",
    "parentaccountid@odata.bind": "accounts(22cc22cc-dd33-ee44-ff55-66aa66aa66aa)"
    }
    

    Nota

    Si no hay ninguna columna asignada para esta relación, solo se incluyen los valores mínimos de columna, como se muestra en el ejemplo anterior. En este caso, el único valor es la parentaccountid búsqueda para asociar el nuevo registro con el original.

    Si todas las columnas disponibles están asignadas para esta relación, el valor devuelto incluye más datos del registro original, por ejemplo:

    {
       "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",
       "@odata.type": "#Microsoft.Dynamics.CRM.account",
       "territorycode": 1,
       "address2_freighttermscode": 1,
       "address2_shippingmethodcode": 1,
       "address1_telephone1": "555-1234",
       "accountclassificationcode": 1,
       "creditonhold": false,
       "donotbulkemail": false,
       "donotsendmm": false,
       "emailaddress1": "info@contoso.com",
       "address1_line1": "123 Maple St.",
       "customertypecode": 3,
       "ownershipcode": 2,
       "businesstypecode": 1,
       "donotpostalmail": false,
       "donotbulkpostalmail": false,
       "name": "Contoso Consulting",
       "address1_city": "Redmond",
       "description": "Contoso is a business consulting company.",
       "donotemail": false,
       "address2_addresstypecode": 1,
       "donotphone": false,
       "statuscode": 1,
       "address1_name": "Corporate Headquarters",
       "followemail": true,
       "preferredcontactmethodcode": 2,
       "numberofemployees": 150,
       "industrycode": 7,
       "telephone1": "(425) 555-1234",
       "address1_shippingmethodcode": 4,
       "donotfax": false,
       "address1_addresstypecode": 3,
       "customersizecode": 1,
       "marketingonly": false,
       "accountratingcode": 1,
       "shippingmethodcode": 1,
       "address1_country": "USA",
       "participatesinworkflow": false,
       "accountcategorycode": 1,
       "address1_postalcode": "98000",
       "address1_stateorprovince": "WA",
       "parentaccountid@odata.bind": "accounts(fe9873ac-2f1b-ed11-b83e-00224837179f)"
    }     
    
  3. Cree un nuevo registro con los datos devueltos por InitializeFrom.

    Solicitud:

    POST [Organization Uri]/api/data/v9.2/accounts HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    
    {
    "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#accounts/$entity",
    "@odata.type": "#Microsoft.Dynamics.CRM.account",
    "parentaccountid@odata.bind": "accounts(22cc22cc-dd33-ee44-ff55-66aa66aa66aa)",
    "name": "Contoso Consulting Chicago Branch",
    "address1_city": "Chicago",
    "address1_line1": "456 Elm St.",
    "address1_name": "Chicago Branch Office",
    "address1_postalcode": "60007",
    "address1_stateorprovince": "IL",
    "address1_telephone1": "(312) 555-3456",
    "numberofemployees": 12
    }
    

    Respuesta:

    HTTP/1.1 204 NoContent
    OData-Version: 4.0
    OData-EntityId: [Organization Uri]/api/data/v9.2/accounts(33dd33dd-ee44-ff55-aa66-77bb77bb77bb)
    

    Salida de la consola:

    New Record:
    {
    "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts/$entity",
    "@odata.type": "#Microsoft.Dynamics.CRM.account",
    "parentaccountid@odata.bind": "accounts(22cc22cc-dd33-ee44-ff55-66aa66aa66aa)",
    "name": "Contoso Consulting Chicago Branch",
    "address1_city": "Chicago",
    "address1_line1": "456 Elm St.",
    "address1_name": "Chicago Branch Office",
    "address1_postalcode": "60007",
    "address1_stateorprovince": "IL",
    "address1_telephone1": "(312) 555-3456",
    "numberofemployees": 12
    }
    

Sección 4: Función independiente RetrieveCurrentOrganization

La función RetrieveCurrentOrganization devuelve información sobre la organización actual. Requiere un valor de tipo de enumeración EndpointAccessType como parámetro.

RetrieveCurrentOrganization devuelve un tipo complejo RetrieveCurrentOrganizationResponse que incluye una Detail propiedad que es un tipo complejo OrganizationDetail. Este tipo complejo tiene propiedades que usan el tipo complejo EndpointCollection, el tipo de enumeración EndpointType y el tipo de enumeración OrganizationState.

Nota

La dirección URL pasa el valor del parámetro AccessTypeEndpointAccessType enum type. Requiere el nombre cualificado completo con el nombre de miembro seleccionado.

Solicitud:

GET [Organization Uri]/api/data/v9.2/RetrieveCurrentOrganization(AccessType=@p1)?@p1=Microsoft.Dynamics.CRM.EndpointAccessType'Default' HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Respuesta:

HTTP/1.1 200 OK
OData-Version: 4.0

{
  "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrieveCurrentOrganizationResponse",
  "Detail": {
    "OrganizationId": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
    "FriendlyName": "[Organization Name]",
    "OrganizationVersion": "9.2.22074.168",
    "EnvironmentId": "Default-aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "DatacenterId": "695014e1-bafd-4d7e-9d3d-2261d4aaf780",
    "Geo": "NA",
    "TenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "UrlName": "org619726b5",
    "UniqueName": "org0335df44",
    "State": "Enabled",
    "Endpoints": {
      "Count": 3,
      "IsReadOnly": false,
      "Keys": [
        "WebApplication",
        "OrganizationService",
        "OrganizationDataService"
      ],
      "Values": [
        "[Organization URI]/",
        "[Organization URI]/XRMServices/2011/Organization.svc",
        "[Organization URI]/XRMServices/2011/OrganizationData.svc"
      ]
    }
  }
}

Salida de la consola:

Data returned with RetrieveCurrentOrganizationResponse:
{
  "OrganizationId": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff",
  "FriendlyName": "[Organization Name]",
  "OrganizationVersion": "9.2.22074.168",
  "EnvironmentId": "Default-aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "DatacenterId": "695014e1-bafd-4d7e-9d3d-2261d4aaf780",
  "Geo": "NA",
  "TenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "UrlName": "org619726b5",
  "UniqueName": "org0335df44",
  "Endpoints": {
    "Count": 3,
    "IsReadOnly": false,
    "Keys": [
      "WebApplication",
      "OrganizationService",
      "OrganizationDataService"
    ],
    "Values": [
      "[Organization URI]/",
      "[Organization URI]/XRMServices/2011/Organization.svc",
      "[Organization URI]/XRMServices/2011/OrganizationData.svc"
    ]
  },
  "State": "Enabled"
}

Sección 5: Función independiente RetrieveTotalRecordCount

La función RetrieveTotalRecordCount devuelve datos sobre el número total de registros de entidades específicas. La función recupera datos de una instantánea que tiene menos de 24 horas de antigüedad, por lo que no es un recuento exacto en un momento dado en el tiempo.

Solicitud:

GET [Organization Uri]/api/data/v9.2/RetrieveTotalRecordCount(EntityNames=@p1)?@p1=["account","contact"] HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Respuesta:

HTTP/1.1 200 OK
OData-Version: 4.0

{
  "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrieveTotalRecordCountResponse",
  "EntityRecordCountCollection": {
    "Count": 2,
    "IsReadOnly": false,
    "Keys": [
      "account",
      "contact"
    ],
    "Values": [
      19,
      3
    ]
  }
}

Salida de la consola:

The number of records for each table according to RetrieveTotalRecordCount:
        account:19
        contact:3

Sección 6: Función vinculada API personalizada IsSystemAdmin

Para demostrar una función enlazada, este ejemplo importa un mensaje personalizado definido dentro de una solución antes de ejecutar esta parte del ejemplo.

El ejemplo usa el mensaje personalizado sample_IsSystemAdmin que se define mediante una API personalizada. Puede encontrar detalles sobre esta API personalizada aquí: Ejemplo: API personalizada IsSystemAdmin.

Nota

Al usar una función o acción enlazada, debe incluir el nombre completo, que incluye Microsoft.Dynamics.CRM.+ <nombre de la función o acción> en la URL.

Solicitud:

GET [Organization Uri]/api/data/v9.2/systemusers(ce31e691-f559-ec11-8f8f-000d3a308de4)/Microsoft.Dynamics.CRM.sample_IsSystemAdmin HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

Respuesta:

HTTP/1.1 200 OK
OData-Version: 4.0

{
  "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.sample_IsSystemAdminResponse",
  "HasRole": false
}

En este ejemplo se recuperan 10 registros de usuario y se prueba cada uno para determinar si cada usuario tiene el rol de seguridad Administrador del sistema.

Salida de la consola:

Los nombres reales dependen de las personas de su entorno.

Top 10 users and whether they have System Administrator role.
        Gediminas Matulis does not have the System Administrator role.
        Gaby Frost does not have the System Administrator role.
        Henrikas Martinkus does not have the System Administrator role.
        Alain Davignon HAS the System Administrator role.
        Isobel Macintyre HAS the System Administrator role.
        Ale Laukaitiene HAS the System Administrator role.
        Rudabeh Yekta HAS the System Administrator role.
        Grazina Januliene HAS the System Administrator role.
        Pranciskus Sukys HAS the System Administrator role.
        Asha Sawant HAS the System Administrator role.

Para ver otro ejemplo de una función enlazada, vea el uso de la función RetrievePrincipalAccess en el siguiente ejemplo.

Sección 7: Acción sin consolidar GrantAccess

Mediante la acción GrantAccess, los usuarios pueden compartir privilegios específicos con otros usuarios de su entorno.

El código de ejemplo demuestra las operaciones siguientes:

  1. Crear un registro para compartir.

  2. Encuentre un usuario habilitado que no sea el usuario actual.

  3. Use la función RetrievePrincipalAccess para comprobar qué derechos de acceso tiene el usuario para el registro que creó.

    Solicitud:

    GET [Organization Uri]/api/data/v9.2/systemusers(ce31e691-f559-ec11-8f8f-000d3a308de4)/Microsoft.Dynamics.CRM.RetrievePrincipalAccess(Target=@p1)?@p1={'@odata.id':'accounts(659876fd-6d29-ed11-9db1-00224804f8e2)'} HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    

    Respuesta:

    HTTP/1.1 200 OK
    OData-Version: 4.0
    
    {
    "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrievePrincipalAccessResponse",
    "AccessRights": "ShareAccess"
    }
    

    Salida de la consola:

    Testing user: Gediminas Matulis
    Current users access: ShareAccess
    
  4. Si el usuario no tiene AccessRights.DeleteAccess, conceda al usuario este acceso mediante la GrantAccess acción .

    Solicitud:

    POST [Organization Uri]/api/data/v9.2/GrantAccess HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    
    {
    "Target": {
       "accountid": "659876fd-6d29-ed11-9db1-00224804f8e2",
       "@odata.type": "Microsoft.Dynamics.CRM.account"
    },
    "PrincipalAccess": {
       "AccessMask": "DeleteAccess",
       "Principal": {
          "systemuserid": "ce31e691-f559-ec11-8f8f-000d3a308de4",
          "@odata.type": "Microsoft.Dynamics.CRM.systemuser"
       }
     }
    }
    

    Respuesta:

    HTTP/1.1 204 NoContent
    OData-Version: 4.0
    
  5. Después de conceder DeleteAccess, la misma llamada a RetrievePrincipalAccess Function muestra que el usuario ahora tiene acceso para eliminar este registro:

    Solicitud:

    GET [Organization Uri]/api/data/v9.2/systemusers(ce31e691-f559-ec11-8f8f-000d3a308de4)/Microsoft.Dynamics.CRM.RetrievePrincipalAccess(Target=@p1)?@p1={'@odata.id':'accounts(659876fd-6d29-ed11-9db1-00224804f8e2)'} HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    

    Respuesta:

    HTTP/1.1 200 OK
    OData-Version: 4.0
    
    {
    "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrievePrincipalAccessResponse",
    "AccessRights": "DeleteAccess, ShareAccess"
    }
    

    Salida de la consola:

    Gediminas Matulis was granted DeleteAccess
    

Sección 8: Acción vinculada AddPrivilegesRole

La acción AddPrivilegesRole es una acción asociada al tipo de entidad de rol. Úselo para agregar privilegios a un rol de seguridad.

El código de ejemplo reailza las operaciones siguientes:

  1. Crear un rol de seguridad. Debe asociar el rol a una unidad de negocio. Ha recuperado el valor del identificador de unidad de negocio en Sección 1: Función no vinculada WhoAmI.

    Solicitud:

    POST [Organization Uri]/api/data/v9.2/roles HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    
    {
    "businessunitid@odata.bind": "businessunits(cca3985e-c618-ea11-a811-000d3a33f066)",
    "name": "Test Role"
    }
    

    Respuesta:

    HTTP/1.1 204 NoContent
    OData-Version: 4.0
    OData-EntityId: [Organization Uri]/api/data/v9.2/roles(44ee44ee-ff55-aa66-bb77-88cc88cc88cc)
    
  2. Recuperar el rol, expandiendo la propiedad de navegación con valor de colección roleprivileges_association para incluir los privilegios incluidos con el rol.

    Solicitud:

    GET [Organization Uri]/api/data/v9.2/roles(44ee44ee-ff55-aa66-bb77-88cc88cc88cc)?$select=roleid&$expand=roleprivileges_association($select=name) HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    

    Respuesta:

    HTTP/1.1 200 OK
    ETag: W/"13278232"
    OData-Version: 4.0
    
    {
    "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#roles(roleid,roleprivileges_association(name))/$entity",
    "@odata.etag": "W/\"13278232\"",
    "roleid": "44ee44ee-ff55-aa66-bb77-88cc88cc88cc",
    "roleprivileges_association": [
       {
          "@odata.etag": "W/\"142279\"",
          "name": "prvReadSharePointData",
          "privilegeid": "fecbd29c-df64-4ede-a611-47226b402c22"
       },
       {
          "@odata.etag": "W/\"142304\"",
          "name": "prvReadSdkMessage",
          "privilegeid": "94c3ac2c-eb23-41cb-a903-4e2e49e910b4"
       },
       {
          "@odata.etag": "W/\"142421\"",
          "name": "prvWriteSharePointData",
          "privilegeid": "cfdd12cf-090b-4599-8302-771962d2350a"
       },
       {
          "@odata.etag": "W/\"142477\"",
          "name": "prvReadSdkMessageProcessingStepImage",
          "privilegeid": "122e085f-8c52-47e8-8415-875dee1c961e"
       },
       {
          "@odata.etag": "W/\"142695\"",
          "name": "prvReadSdkMessageProcessingStep",
          "privilegeid": "db10a828-ec49-4035-8b7e-c58efaf169ec"
       },
       {
          "@odata.etag": "W/\"142713\"",
          "name": "prvReadPluginAssembly",
          "privilegeid": "f5b50296-a212-488a-be92-cbcca8971717"
       },
       {
          "@odata.etag": "W/\"142735\"",
          "name": "prvCreateSharePointData",
          "privilegeid": "5eb85025-363b-46ea-a77e-ce24159cd231"
       },
       {
          "@odata.etag": "W/\"142740\"",
          "name": "prvReadPluginType",
          "privilegeid": "9365005c-4703-473b-8d3c-d073cfd8670c"
       },
       {
          "@odata.etag": "W/\"142761\"",
          "name": "prvReadSharePointDocument",
          "privilegeid": "d71fc8d0-99bc-430e-abd7-d95c64f11e9c"
       }
    ]
    }
    
  3. Muestra el número de privilegios creados por defecto para el nuevo rol.

    Salida de la consola:

    Number of privileges in new role: 9
          prvReadSharePointData
          prvReadSdkMessage
          prvWriteSharePointData
          prvReadSdkMessageProcessingStepImage
          prvReadSdkMessageProcessingStep
          prvReadPluginAssembly
          prvCreateSharePointData
          prvReadPluginType
          prvReadSharePointDocument
    
  4. Recupere la definición de los privilegios prvCreateAccount y prvReadAccount del privilegio EntityType.

    Solicitud:

    GET [Organization Uri]/api/data/v9.2/privileges?$select=name&$filter=name eq 'prvCreateAccount' or name eq 'prvReadAccount' HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    

    Respuesta:

    HTTP/1.1 200 OK
    OData-Version: 4.0
    
    {
    "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#privileges(name)",
    "value": [
       {
          "@odata.etag": "W/\"142189\"",
          "name": "prvReadAccount",
          "privilegeid": "886b280c-6396-4d56-a0a3-2c1b0a50ceb0"
       },
       {
          "@odata.etag": "W/\"142359\"",
          "name": "prvCreateAccount",
          "privilegeid": "d26fe964-230b-42dd-ad93-5cc879de411e"
       }
     ]
    }
    
  5. Prepare una lista de instancias de RolePrivilege ComplexType para los privilegios prvCreateAccount y prvReadAccount con la propiedad Depth establecida en PrivilegeDepth.'Basic'.

  6. Pasar la lista como el parámetro AddPrivilegesRole.Privileges.

    Solicitud:

    POST [Organization Uri]/api/data/v9.2/roles(44ee44ee-ff55-aa66-bb77-88cc88cc88cc)/Microsoft.Dynamics.CRM.AddPrivilegesRole HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    
    {
    "Privileges": [
       {
          "Depth": "Basic",
          "PrivilegeId": "886b280c-6396-4d56-a0a3-2c1b0a50ceb0",
          "BusinessUnitId": "cca3985e-c618-ea11-a811-000d3a33f066",
          "PrivilegeName": "prvReadAccount"
       },
       {
          "Depth": "Basic",
          "PrivilegeId": "d26fe964-230b-42dd-ad93-5cc879de411e",
          "BusinessUnitId": "cca3985e-c618-ea11-a811-000d3a33f066",
          "PrivilegeName": "prvCreateAccount"
       }
     ]
    }
    

    Respuesta:

    HTTP/1.1 204 NoContent
    OData-Version: 4.0
    
  7. Recupere los privilegios asociados al rol de nuevo para confirmar que los agregó.

    Solicitud:

    GET [Organization Uri]/api/data/v9.2/roles(44ee44ee-ff55-aa66-bb77-88cc88cc88cc)?$select=roleid&$expand=roleprivileges_association($select=name) HTTP/1.1
    OData-MaxVersion: 4.0
    OData-Version: 4.0
    If-None-Match: null
    Accept: application/json
    

    Respuesta:

    HTTP/1.1 200 OK
    ETag: W/"13278248"
    OData-Version: 4.0
    
    {
    "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#roles(roleid,roleprivileges_association(name))/$entity",
    "@odata.etag": "W/\"13278248\"",
    "roleid": "44ee44ee-ff55-aa66-bb77-88cc88cc88cc",
    "roleprivileges_association": [
       {
          "@odata.etag": "W/\"142189\"",
          "name": "prvReadAccount",
          "privilegeid": "886b280c-6396-4d56-a0a3-2c1b0a50ceb0"
       },
       {
          "@odata.etag": "W/\"142279\"",
          "name": "prvReadSharePointData",
          "privilegeid": "fecbd29c-df64-4ede-a611-47226b402c22"
       },
       {
          "@odata.etag": "W/\"142304\"",
          "name": "prvReadSdkMessage",
          "privilegeid": "94c3ac2c-eb23-41cb-a903-4e2e49e910b4"
       },
       {
          "@odata.etag": "W/\"142359\"",
          "name": "prvCreateAccount",
          "privilegeid": "d26fe964-230b-42dd-ad93-5cc879de411e"
       },
       {
          "@odata.etag": "W/\"142421\"",
          "name": "prvWriteSharePointData",
          "privilegeid": "cfdd12cf-090b-4599-8302-771962d2350a"
       },
       {
          "@odata.etag": "W/\"142477\"",
          "name": "prvReadSdkMessageProcessingStepImage",
          "privilegeid": "122e085f-8c52-47e8-8415-875dee1c961e"
       },
       {
          "@odata.etag": "W/\"142695\"",
          "name": "prvReadSdkMessageProcessingStep",
          "privilegeid": "db10a828-ec49-4035-8b7e-c58efaf169ec"
       },
       {
          "@odata.etag": "W/\"142713\"",
          "name": "prvReadPluginAssembly",
          "privilegeid": "f5b50296-a212-488a-be92-cbcca8971717"
       },
       {
          "@odata.etag": "W/\"142735\"",
          "name": "prvCreateSharePointData",
          "privilegeid": "5eb85025-363b-46ea-a77e-ce24159cd231"
       },
       {
          "@odata.etag": "W/\"142740\"",
          "name": "prvReadPluginType",
          "privilegeid": "9365005c-4703-473b-8d3c-d073cfd8670c"
       },
       {
          "@odata.etag": "W/\"142761\"",
          "name": "prvReadSharePointDocument",
          "privilegeid": "d71fc8d0-99bc-430e-abd7-d95c64f11e9c"
       }
    ]
    }
    

    Salida de la consola:

    Number of privileges after: 11
          prvReadAccount
          prvReadSharePointData
          prvReadSdkMessage
          prvCreateAccount
          prvWriteSharePointData
          prvReadSdkMessageProcessingStepImage
          prvReadSdkMessageProcessingStep
          prvReadPluginAssembly
          prvCreateSharePointData
          prvReadPluginType
          prvReadSharePointDocument
    

Sección 9: Eliminar registros de muestra

Agregue cada registro que cree en este ejemplo a una lista para poder eliminarlos al final. Use una $batch solicitud para eliminar estos registros.

Solicitud:

POST [Organization Uri]/api/data/v9.2/$batch HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json

--batch_d6010246-cd97-429f-bc05-cf20054cfe8a
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-Length: 121

DELETE /api/data/v9.2/accounts(22cc22cc-dd33-ee44-ff55-66aa66aa66aa) HTTP/1.1


--batch_d6010246-cd97-429f-bc05-cf20054cfe8a
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-Length: 121

DELETE /api/data/v9.2/accounts(33dd33dd-ee44-ff55-aa66-77bb77bb77bb) HTTP/1.1


--batch_d6010246-cd97-429f-bc05-cf20054cfe8a
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-Length: 122

DELETE /api/data/v9.2/solutions(b37bc86a-4c3a-41be-b35d-ddfd129276c5) HTTP/1.1


--batch_d6010246-cd97-429f-bc05-cf20054cfe8a
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-Length: 121

DELETE /api/data/v9.2/accounts(659876fd-6d29-ed11-9db1-00224804f8e2) HTTP/1.1


--batch_d6010246-cd97-429f-bc05-cf20054cfe8a
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-Length: 118

DELETE /api/data/v9.2/roles(44ee44ee-ff55-aa66-bb77-88cc88cc88cc) HTTP/1.1


--batch_d6010246-cd97-429f-bc05-cf20054cfe8a--

Respuesta:

HTTP/1.1 200 OK
OData-Version: 4.0

--batchresponse_cb852192-c300-4ed7-a54f-dc5fc7ee27c3
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 204 No Content
OData-Version: 4.0


--batchresponse_cb852192-c300-4ed7-a54f-dc5fc7ee27c3
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 204 No Content
OData-Version: 4.0


--batchresponse_cb852192-c300-4ed7-a54f-dc5fc7ee27c3
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 204 No Content
OData-Version: 4.0


--batchresponse_cb852192-c300-4ed7-a54f-dc5fc7ee27c3
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 204 No Content
OData-Version: 4.0


--batchresponse_cb852192-c300-4ed7-a54f-dc5fc7ee27c3
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 204 No Content
OData-Version: 4.0


--batchresponse_cb852192-c300-4ed7-a54f-dc5fc7ee27c3--

Salida de la consola:

Deleting created records.

Consulte también

Usar la API web de Dataverse
Usar funciones de la API web
Usar acciones de la API web
Ejemplo de funciones y acciones de la API web (C#)
Ejemplo de funciones y acciones (JavaScript del lado del cliente)
Ejemplo de acciones y funciones de API web (PowerShell)