Crear y usar API personalizadas

Utilice API personalizadas para crear sus propias API en Dataverse. Puede consolidar una o más operaciones en una API personalizada a la que usted y otros desarrolladores pueden llamar en su código o desde Power Automate. El conector Microsoft Dataverse permite llamar acciones en Power Automate.

Puede usar la API personalizada como eventos comerciales para habilitar la creación de nuevas capacidades de integración, como exponer un nuevo tipo de efecto desencadenante en el conector Microsoft Dataverse. Más información: Eventos empresariales de Microsoft Dataverse

Las API personalizadas son una alternativa a las acciones de proceso personalizadas. Las acciones de proceso personalizadas proporcionan una forma sin código de incluir mensajes personalizados, pero tienen algunas limitaciones para los desarrolladores. Las API personalizadas brindan capacidades específicamente para que los desarrolladores definan su lógica en el código con más opciones. Para obtener una comparación completa de la acción del proceso personalizado y la API personalizada, consulte Comparar la acción del proceso personalizado y la API personalizada.

Crear una API personalizada

Una API personalizada puede incluir lógica implementada con un complemento. Utilizando los eventos de negocio de Microsoft Dataverse, puede crear una API personalizada sin un complemento para transmitir datos sobre un evento al que responderán otros suscriptores.

Sin embargo, en otros casos, combinará una API personalizada con un complemento para definir algunas operaciones cuyo cálculo y suministro de resultados se delegará a Dataverse.

Existen varias formas diferentes de crear una API personalizada:

Vínculo de método Prestación
Herramienta de registro de complementos Una herramienta GUI fácil de usar integrada con herramientas utilizadas para desarrollar complementos.
Power Apps Uso de formularios para ingresar datos. No necesita instalar una herramienta separada, debe crear un registro separado para cada parte de la API personalizada.
Con código Una vez que comprenda el modelo de datos, puede crear una API personalizada muy rápidamente con Postman. O puede crear su propia experiencia para crear una API personalizada.
Con archivos de solución Cuando utiliza las herramientas de administración del ciclo de vida de la aplicación (ALM), puede crear o modificar definiciones de API personalizadas con archivos XML en una solución que se incluye en su repositorio de código fuente. La API personalizada se creará cuando importe la solución generada a partir de su código fuente.

Nota

Aunque los datos de la API personalizada se almacenan en tablas, no admitimos la creación de una aplicación basada en modelos para estas tablas.

Estas son las algunas de las herramientas creadas y admitidas por la comunidad para trabajar con la API personalizada:

Las herramientas creadas por la comunidad no reciben soporte de Microsoft. Si tiene preguntas o problemas con las herramientas de la comunidad, comuníquese con el creador de la herramienta.

Personalización de las API personalizadas

Al crear una API personalizada y los parámetros de solicitud relacionados y las propiedades de respuesta, es importante comprender que estas definiciones de API se pueden personalizar de forma predeterminada. Esto es lo que le permite iterar y realizar cambios en estos elementos en su solución no administrada.

Importante

Cuando envíe o implemente su solución, debe usar una solución administrada y le recomendamos que siempre configure la propiedad administrada Is Customizable de estos componentes en false. Esto evitará que las personas que usan su solución administrada modifiquen o eliminen estos componentes de su solución. Dichos cambios podrían romper el código escrito para la definición original de la API personalizada.

Establecer Is Customizable en falso

Puede configurar la propiedad administrada Is Customizable de la solución en Power Apps.

Configuración de la propiedad Is Customizable

Deberá configurar esta propiedad por cada API personalizada, parámetro de solicitud y propiedad de respuesta uno por uno.

Más información sobre Propiedades administradas

Agregar más parámetros de solicitud y propiedades de respuesta

Incluso cuando haya configurado la propiedad administrada Is Customizable a estos componentes en false, se pueden agregar nuevos parámetros de solicitud y propiedades de respuesta a su API personalizada. Sin embargo, no se pueden requerir estos parámetros de solicitud. Si elige permitir pasos de procesamiento personalizados en su API personalizada, otros complementos registrados para el mensaje creado por la API personalizada podrán usarlos. Debido a que los parámetros de solicitud personalizados solo pueden ser opcionales, el complemento que proporcione para la operación principal de la API personalizada puede ignorarlos y no es responsable de usar ningún parámetro de solicitud personalizado ni de establecer ninguna propiedad de respuesta personalizada.

Tablas/entidades de API personalizada

Vea Tablas CustomAPI para obtener información sobre las tablas y los valores de columna que se utilizarán al crear API personalizadas.

Seleccionar un tipo de paso de procesamiento personalizado

La siguiente tabla describe qué Tipo de paso de procesamiento personalizado (AllowedCustomProcessingStepType) de la API personalizada debería usar.

Opción Cuándo usar
None Cuando el tipo de complemento establecido para esta API personalizada usa CustomAPI.PluginTypeId es la única lógica que ocurra cuando se ejecute esta operación.
No permitirá que otro desarrollador registre ningún paso adicional que pueda desencadenar una lógica adicional, modificar el comportamiento de esta operación o cancelar la operación.
Use esta opción cuando la API personalizada proporcione alguna capacidad que no debería ser personalizable.
Async Only Cuando desea permitir que otros desarrolladores detecten cuándo ocurre esta operación, pero no desea que puedan cancelar la operación o personalizar el comportamiento de la operación.
Otros desarrolladores pueden registrar pasos asincrónicos para detectar que se produjo esta operación y responder después de que se haya completado.
Esta es la opción recomendada si está utilizando el patrón de eventos de negocio. Un evento de negocios creará un disparador en Power Automate que puede utilizar cuando se produzca este evento. Más información: Eventos empresariales de Microsoft Dataverse
Sync and Async Cuando desee permitir que otros desarrolladores tengan la capacidad de cambiar el comportamiento de la operación e incluso cancelarla si su lógica de negocios lo dicta.
Si la operación tiene éxito, otros desarrolladores también pueden detectar este evento y agregar lógica para que se ejecute de forma asíncrona.
La mayoría de los mensajes de Dataverse habilitan la extensión de esta manera. Use esta opción cuando su mensaje represente un proceso de negocio que deba ser personalizable.

Seleccionar un tipo de enlace

El enlace es un concepto de OData que asocia una operación a una tabla específica. La siguiente tabla describe la API personalizada Tipo de enlace (BindingType) que debe usar.

Opción Cuándo usar
Global Cuando la operación no se aplica a una tabla específica.
Entity Cuando la operación acepta como parámetro un solo registro de una tabla específica.
EntityCollection Cuando la operación aplica cambios o devuelve una colección de una tabla específica.

Seleccionar Entity o EntityCollection requerirá que use el nombre completo de la función o acción cuando use la API web. El nombre completo es Microsoft.Dynamics.CRM.<UniqueName of the custom API>.

Cuando selecciona Entity, un parámetro de solicitud denominado Target con el tipo EntityReference se crea automáticamente. No necesita crearla. Este valor se pasará a todos los complementos registrados para este mensaje.

Cuando selecciona EntityCollection, no se incluye ningún parámetro o propiedad de respuesta que represente la colección de entidades. Establecer este enlace simplemente agrega el requisito de que la operación se invoque adjunta al conjunto de entidades cuando se usa la API web.

Nota

Estos tipos de enlace están disponibles para que los utilice cuando componga la API personalizada, pero no es necesario que los vincule a una entidad o colección de entidades. Puede componer todas su API personalizadas como Global y agregar los parámetros de solicitud o propiedades de respuesta que necesite para lograr la misma funcionalidad que una función o acción enlazada.

Más información:

Cuándo crear una función

La propiedad Is Function de la API personalizada controla si la API personalizada será una Función o una Acción. En OData, una función es una operación llamada usando la solicitud GET de HTTP, que devuelve datos sin realizar ningún cambio. Con una solicitud GET, todos los parámetros se pasan como parámetros en la URL al invocar la función.

Puede probar más fácilmente las solicitudes GET usando solo su navegador, pero hay un límite en la longitud de 32 KB (32 768 caracteres) en la URL que puede enviar. Si su API personalizada tiene muchos parámetros de solicitud complejos que podrían causar que la longitud de la URL sea demasiado larga, es aceptable crear una Acción que realice la misma operación pasando todos los datos de parámetros del cuerpo usando una solicitud POST.

Nota

  • Las funciones deben devolver algunos datos. Debe incluir al menos una propiedad de respuesta para que la API personalizada sea válida.
    • Una función que no incluya una propiedad de respuesta no aparecerá en el documento del servicio de $metadatos de la API web.
    • Si intenta utilizar una función no válida, obtendrá un error 404 Not found similar a este:
      {"error":{"code":"0x8006088a","message":"Resource not found for the segment 'your_function_name'."}}
  • No se permite una función cuando la opción Habilitado para flujo de trabajo está seleccionada. Consulte Usar una API personalizada en un flujo de trabajo
  • Actualmente el conector de Microsoft Dataverse solo permite realizar acciones. Si necesita que la operación se realice utilizando Power Automate, debe crear la API personalizada como una acción.

Más información: Usar funciones de API web

Cuándo hacer que su API personalizada sea privada

De forma predeterminada, cualquier API personalizada que cree estará disponible para que otros desarrolladores la descubran y la utilicen. Como editor de la API personalizada, tiene la obligación de mantener las API públicas que cree. No debe eliminar su API ni aplicar ningún cambio que afecte a otros consumidores.

Si no está dispuesto a apoyar a otros desarrolladores que usan su API personalizada, debe configurar la propiedad Is Private (IsPrivate) de la API personalizada en true antes de enviar la solución administrada que contiene su API personalizada.

La propiedad Is Private bloqueará la API personalizada para que no aparezca dentro del documento de servicio de $metadatos y evitará que las herramientas de generación de código de Dataverse creen clases para usar los mensajes para su API personalizada.

Establecer esta propiedad no significa que otros desarrolladores no puedan usar su mensaje si lo conocen y puedan redactar una solicitud para usarlo. Configurar la propiedad Is Private es una forma de indicar que no admite que otros desarrolladores usen su mensaje.

Es posible que desee mantener privada una API personalizada hasta que esté seguro de que no necesitará eliminarla o introducir algún cambio importante.

Puede dejar Is Private como false en su entorno de desarrollo para que pueda ver el resultado en el documento del servicio de $metadatos o generar clases para su propio uso. Sin embargo, antes de enviar la API personalizada en su solución administrada, debe configurar Is Private en true.

Más información:

Proteger su API personalizada con un privilegio

Establezca la propiedad de API personalizada Execute Privilege Name (ExecutePrivilegeName) en el nombre del privilegio para requerirlo. Actualmente, no existe una forma compatible para que los desarrolladores de fuera de Microsoft creen nuevos privilegios, pero se puede usar un privilegio existente. Más información: P: ¿Puedo crear un nuevo privilegio para mi API personalizada?

Usar un complemento para incluir lógica en la API personalizada

Si no configura el Plugin Type (PluginTypeId) de la API personalizada para especificar la lógica de operación principal, aún puede invocar la API personalizada.

Puede optar por no incluir ninguna lógica en el complemento porque está utilizando la API personalizada como un evento empresarial. Más información: Eventos empresariales de Microsoft Dataverse.

Es posible que no desee agregar un complemento como paso de prueba. Sin un complemento, cualquier valor de parámetro de salida devolverá los valores predeterminados para el tipo porque no hay código para establecerlos. De lo contrario, consulte Escribir un complemento para la API personalizada

Nota

No puede pasar datos de configuración al complemento especificado para la lógica de operación principal. Hay una la solución alternativa para esto.

Usar una API personalizada en un flujo de trabajo

Establezca Enabled for Workflow (WorkflowSdkStepEnabled) de la API personalizada en verdadero cuando necesite habilitar la llamada a una API personalizada como una acción de flujo de trabajo. Sin embargo, cuando se selecciona esta opción, se imponen las siguientes limitaciones para que se pueda llamar a la API personalizada en el diseñador de flujo de trabajo:

  • La API personalizada no puede ser una función. Is Function debe ser falso.

  • La API personalizada solo puede tener parámetros de solicitud o tipos de propiedades de respuesta compatibles con el flujo de trabajo:

    • Booleana
    • DateTime
    • Decimal
    • EntityReference
      • EntityReference solo se puede usar cuando la API personalizada está vinculada a una entidad.
    • Float
    • Número entero
    • Money
    • Los atributos de lista desplegable
    • Cadena
    • GUID

    No se pueden utilizar los siguientes tipos de propiedad de respuesta o parámetro de solicitud:

    • Entity
    • EntityCollection
    • StringArray

Invocación de API personalizadas

Una API personalizada crea un nuevo mensaje que se puede invocar a través de la API web o el Dataverse SDK para .NET como cualquier otra operación.

Invocación de API personalizadas desde la API web

Mientras prueba, puede invocar su API usando PostMan. Siga los pasos descritos en Configurar un entorno Postman para configurar un entorno PostMan que generará el token de acceso que necesitará. Luego, aplique los pasos descritos en Usar acciones de API web si su API es una acción. Si es una función, utilice los pasos de Usar funciones de API web.

Observe los siguientes ejemplos:

Acción no enlazada

Esta acción se denomina myapi_CustomUnboundAPI. Tiene un parámetro de solicitud de una sola cadena llamado InputParameter:

POST [Organization URI]/api/data/v9.1/myapi_CustomUnboundAPI
OData-MaxVersion: 4.0
OData-Version: 4.0
Content-Type: application/json; charset=utf-8

{
  "InputParameter": "Value"
}

Función vinculada a una tabla

Esta función, denominada myapi_CustomBoundAPI, está vinculada a la tabla de cuentas:

GET [Organization URI]/api/v9.1/accounts(ed5d4e42-850c-45b7-8b38-2677545107cc)/Microsoft.Dynamics.CRM.myapi_CustomBoundAPI()
OData-MaxVersion: 4.0
OData-Version: 4.0
Content-Type: application/json; charset=utf-8

Función vinculada a una colección de tabla

Esta función, denominada myapi_CustomEntityCollectionBoundAPI, está vinculada a la colección de tablas de cuentas:

GET [Organization URI]/api/v9.1/accounts/Microsoft.Dynamics.CRM.myapi_CustomEntityCollectionBoundAPI()
OData-MaxVersion: 4.0
OData-Version: 4.0
Content-Type: application/json; charset=utf-8

Más información:

Invocación de SDK personalizadas desde SDK para .NET

Puede optar por utilizar código de enlace temprano o de enlace tardío para invocar la API personalizada. Utilice la herramienta pac modelbuilder build para generar clases de solicitud y respuesta auxiliares para exponer los parámetros de solicitud y las propiedades de respuesta de su API personalizada. Obtenga más información sobre cómo generar clases enlazadas de forma anticipada para el SDK para .NET.

Para el código enlazado tarde o para una API personalizada que haya marcado como privada, cree una OrganizationRequest con el nombre único de su API personalizada y agregue parámetros con nombres que coincidan con los nombres únicos de las propiedades de solicitud.

Las API personalizadas vinculadas a entidades tienen una propiedad de solicitud implícita denominada Target que debe establecerse en una EntityReference del registro en el que se va a invocar la API.

Puede acceder a las propiedades de respuesta desde los parámetros de la respuesta devuelta.

En este ejemplo, una API personalizada llamada myapi_EscalateCase está vinculada a la tabla de incidentes para aceptar un registro como el parámetro Target junto con otro parámetro de solicitud de valor conjunto de opciones llamado Priority. Tiene una propiedad de respuesta EntityReference llamada AssignedTo.

var req = new OrganizationRequest("myapi_EscalateCase")
{
  ["Target"] = new EntityReference("incident", guid),
  ["Priority"] = new OptionSetValue(1)
};

var resp = svc.Execute(req);

var newOwner = (EntityReference) resp["AssignedTo"];

Más información: Usar mensajes con SDK para .NET.

Invocar API personalizada como operación en segundo plano

La lógica que se realizará mediante una operación en segundo plano debe definirse como una API personalizada. Más información: Operaciones en segundo plano (versión preliminar)

Escribir un complemento para la API personalizada

Escribir un complemento para implementar la operación principal de su API personalizada no es diferente de escribir cualquier otro tipo de complemento, excepto que no utiliza la herramienta Registro de complementos para establecer un paso específico y no especificar los datos de configuración para pasar el complemento.

Deberá conocer la información siguiente:

  • El nombre del mensaje
  • Los nombres y tipos de los parámetros de solicitud y las propiedades de respuesta.

Los valores del parámetro de solicitud se incluirán en los InputParameters.

Debe establecer los valores para las propiedades de respuesta en los OutputParameters.

El siguiente código es un complemento simple que invierte los caracteres del StringParameter y devuelve el resultado como StringProperty.

using System;
using System.Linq;
using System.ServiceModel;
using Microsoft.Xrm.Sdk;

namespace CustomAPIExamples
{
    public class Sample_CustomAPIExample : IPlugin
    {
        public void Execute(IServiceProvider serviceProvider)
        {
            // Obtain the tracing service
            ITracingService tracingService =
            (ITracingService)serviceProvider.GetService(typeof(ITracingService));

            // Obtain the execution context from the service provider.  
            IPluginExecutionContext context = (IPluginExecutionContext)
                serviceProvider.GetService(typeof(IPluginExecutionContext));

            if (context.MessageName.Equals("sample_CustomAPIExample") && context.Stage.Equals(30)) {

                try
                {
                    string input = (string)context.InputParameters["StringParameter"];
                    
                    if (!string.IsNullOrEmpty(input)) {
                        //Simply reversing the characters of the string
                        context.OutputParameters["StringProperty"] = new string(input.Reverse().ToArray());
                    }
                }
                catch (Exception ex)
                {
                    tracingService.Trace("Sample_CustomAPIExample: {0}", ex.ToString());
                    throw new InvalidPluginExecutionException("An error occurred in Sample_CustomAPIExample.", ex);
                }
            }
            else
            {
                tracingService.Trace("Sample_CustomAPIExample plug-in is not associated with the expected message or is not registered for the main operation.");
            }
        }
    }
}

Para obtener más información sobre cómo escribir complementos, consulte Tutorial: Escribir y registrar un complemento. Debe registrar el ensamblado, pero no es necesario registrar un paso. Más información: Usar un complemento para incluir lógica en la API personalizada

Ver el ejemplo Ejemplo: API personalizada IsSystemAdmin

Una vez que haya registrado el ensamblado, asegúrese de agregar el ensamblado y todos los tipos a su solución.

Valores de etiquetas localizadas

Las API personalizadas tienen algunas etiquetas localizables. Puede localizar los valores de la etiqueta siguiendo los pasos documentados aquí: Traducir texto localizable para aplicaciones basadas en modelos y Traducción de etiquetas y cadenas de visualización.

Este proceso implica exportar un archivo que contiene los valores del idioma base e incluirá una columna para cada idioma habilitado. Entonces puede editar los valores en Excel. Después de completar el proceso para importar las traducciones, las etiquetas se incluirán en su solución.

El siguiente ejemplo muestra cómo editar la hoja de cálculo de Excel para agregar traducciones al japonés para los valores en inglés.

Muestra cómo se localizan las etiquetas.

Sugerencia

Si está editando los archivos de soluciones para crear sus API personalizadas, puede proporcionar las etiquetas localizadas directamente. Más información: Proporcionar etiquetas localizadas con la solución

Establecer valores localizados

Si prefiere establecer etiquetas localizadas en el código en lugar de utilizar el proceso manual descrito anteriormente, puede utilizar el mensaje SetLocLabels mediante acción SetLocLabels de la la API web o el SDK para .NET SetLocLabelsRequest.

El siguiente ejemplo muestra cómo utilizar la API web para configurar las etiquetas localizadas para la propiedad displayname de una API personalizada.

Solicitud:

POST [Organization URI]/api/data/v9.1/SetLocLabels HTTP/1.1
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Content-Type: application/json

{
    "EntityMoniker": {
        "@odata.type": "Microsoft.Dynamics.CRM.customapi",
        "customapiid": "86bcd12e-2f30-eb11-a813-000d3a122b89"
    },
    "AttributeName": "displayname",
    "Labels": [
        {
            "Label": "例え",
            "LanguageCode": 1041
        },
        {
            "Label": "Beispiel",
            "LanguageCode": 1031
        },
        {
            "Label": "ejemplo",
            "LanguageCode": 1034
        }
    ]
}

Respuesta:

HTTP/1.1 204 No Content

Recuperar valores localizados

Para recuperar las etiquetas localizadas utilice el mensaje RetrieveLocLabels usando la API web Función RetrieveLocLabels o el SDK para .NET clase RetrieveLocLabelsRequest.

El siguiente ejemplo muestra el uso de la función RetrieveLocLabels para recuperar las etiquetas de la propiedad displayname de una API personalizada con la customapiid de 88602189-183d-4584-ba4b-8b60f0f5b89f

Solicitud:

GET [Organization URI]/api/data/v9.1/RetrieveLocLabels(EntityMoniker=@p1,AttributeName=@p2,IncludeUnpublished=@p3)?
@p1={'@odata.id':'customapis(88602189-183d-4584-ba4b-8b60f0f5b89f)'}&
@p2='displayname'&
@p3=false HTTP/1.1

Respuesta:

HTTP/1.1 200 OK
OData-Version: 4.0

{
    "@odata.context": "[Organization URI]/api/data/v9.1/$metadata#Microsoft.Dynamics.CRM.RetrieveLocLabelsResponse",
    "Label": {
        "LocalizedLabels": [
            {
                "Label": "Custom API Example",
                "LanguageCode": 1033,
                "IsManaged": null,
                "MetadataId": null,
                "HasChanged": null
            },
            {
                "Label": "カスタムAPIの例",
                "LanguageCode": 1041,
                "IsManaged": null,
                "MetadataId": null,
                "HasChanged": null
            }
        ],
        "UserLocalizedLabel": {
            "Label": "Custom API Example",
            "LanguageCode": 1033,
            "IsManaged": null,
            "MetadataId": null,
            "HasChanged": null
        }
    }
}

Preguntas más frecuentes (P+F)

Las siguientes preguntas se le pueden plantear:

P: ¿Puedo crear un nuevo privilegio para mi API personalizada?

R: Si bien la API personalizada tiene un Nombre de privilegio de ejecución (ExecutePrivilegeName), actualmente no existe una forma compatible de crear un nuevo privilegio solo para esta API. Esta capacidad está prevista para una versión posterior. Mientras tanto, hay dos opciones:

  • Puede utilizar un valor Privilege.Name.
  • Puede crear una entidad personalizada y utilizar uno de los privilegios creados para esa entidad. Por ejemplo, cree una entidad llamada new_myaction y para ello se generarán privilegios para operaciones CRUD. Por ejemplo: prvCreatenew_myaction. Deberá incluir esta entidad personalizada con la solución que incluye la API personalizada.

P: ¿Puedo activar o desactivar los registros de API personalizadas?

R: No puede. Sin embargo, estos registros tienen las columnas comunes Estado y Razón para el estado columnas que aparecen en la mayoría de tablas de Microsoft Dataverse. Establecer los valores para estas columnas no tiene ningún impacto en la disponibilidad de la API personalizada, los parámetros de solicitud ni las propiedades de respuesta.

P: ¿Cómo puedo usar mis mensajes privados si no están incluidos en el documento del servicio $metadata de la API web?

R: Sus mensajes privados funcionarán independientemente de si se anuncian en la API web Documento de $metadata CSDL o no. Mientras desarrolla su solución, puede dejar el valor IsPrivate establecido en false. De esta forma puede consultar el listado $metadata y utilizar herramientas de generación de código que dependen de estos datos. Sin embargo, debe configurar el valor CustomAPI.IsPrivate en true antes de enviar su solución para que otros la utilicen. Si luego decide que desea admitir que otras aplicaciones utilicen el mensaje, puede cambiar el valor CustomAPI.IsPrivate a false.

Más información:

Problemas conocidos con API personalizadas

Las API personalizadas ahora está disponible de forma general, pero todavía hay algunas capacidades relacionadas que esperamos cambiar.

No se puede usar el generador de perfiles para depurar

Para depurar usando la herramienta de registro de complementos y la solución de perfilador de complementos, debe poder seleccionar un paso de complemento específico. La implementación de la etapa principal para el complemento no está disponible actualmente en la herramienta Registro de complementos.

Solución alternativa: registre el tipo de complemento en la fase PostOperation del mensaje creado para la API personalizada.

Los mensajes privados no se pueden usar en complementos

Si define su API personalizada como privada, no podrá usar ese mensaje en un complemento. Más información: Mensajes privados

No se puede establecer la configuración segura e insegura para el complemento de operación principal de API personalizada

No puede pasar la configuración segura e insegura para el complemento de operación principal de API personalizada.

Solución alternativa: en lugar de asociar el complemento con la API personalizada, registre el complemento en la fase PostOperation utilizando la herramienta de registro de complementos (PRT). De esta manera, puede especificar datos de configuración en el paso del complemento PostOperation como lo hace habitualmente.

Para utilizar esta solución alternativa, debe configurar su API personalizada para habilitar los tipos de pasos de procesamiento personalizados Síncrono y Asíncrono cuando crea la API personalizada. No puede cambiar esto una vez que se ha creado.

Pasos siguientes

Cree una API personalizada con la herramienta de registro de complementos

Consulte también

Crear y usar API personalizadas
Crear una API personalizada con código
Crear una API personalizada con archivos de solución
Crear sus propios mensajes
Tablas de API personalizadas

Nota

¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)

La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).