Acceso a los datos de Oracle Sales Automation mediante los servicios RESTful

Oracle Sales Automation proporciona varias API RESTful que puede utilizar para acceder a datos de objetos estándar y personalizados e integrarlos con aplicaciones externas. Las llamadas directas al método RESTful se realizan mediante una URL correctamente estructurada mediante el protocolo HTTP.

Cada API contiene objetos estándar de Oracle Sales Automation y cada objeto está asociado a un recurso o una recopilación de recursos de REST. Por ejemplo, en la API RESTful, el punto final del recurso Opportunities se utiliza para realizar un seguimiento de la información sobre una venta potencial. Sin embargo, antes de utilizar los servicios web RESTful de Oracle Sales Automation, debe tener en cuenta los requisitos de seguridad para obtener acceso y también identificar qué servicios web utilizar, junto con sus métodos soportados correspondientes y las estructuras de carga útil esperadas.

Acerca de los recursos de las API de Oracle Sales Automation RESTful

Oracle Sales Automation proporciona una recopilación de recursos REST para objetos estándar y personalizados.

Un concepto importante en cualquier API de RESTful es el recurso. Un recurso es un objeto con un tipo (por ejemplo, Oportunidades), datos asociados, relaciones con otros recursos y un conjunto de métodos que operan en él. Estos recursos se organizan de forma jerárquica e incluyen:

  • Recurso raíz: corresponde a un objeto lógico, como una oportunidad u oportunidad potencial.

  • Subrecursos: son recursos que pertenecen a un recurso principal; por ejemplo, un contacto para una oportunidad.

  • Recurso de lista de valores: lista de valores válidos que se pueden utilizar al definir un valor para un campo. Hay dos tipos: Búsqueda (lista estática) o Dinámica (basada en el contexto).

En la API RESTful de Oracle Sales Automation, hay dos tipos de recursos: un único recurso o un recurso de recopilación. Un único recurso puede representar una sola entidad, como un empleado o una orden de compra, mientras que un recurso de cobro puede ser más completo, como una lista de empleados o una lista de órdenes de compra que se pueden paginar.

Acerca del soporte de REST para objetos personalizados

Oracle Sales Automation incluye objetos estándar que responden a muchas necesidades y escenarios empresariales. Sin embargo, además de los objetos estándar, puede utilizar la herramienta Application Composer para crear objetos personalizados de nivel superior y objetos personalizados secundarios si tiene una necesidad de negocio única.

Application Composer es una herramienta basada en explorador que los analistas y administradores de negocio (no solo los desarrolladores) pueden utilizar para personalizar Oracle Sales Automation. Al utilizar esta herramienta, puede realizar los tipos de cambios del modelo de datos que en el pasado solo habían realizado los desarrolladores. En la herramienta Application Composer puede realizar cambios sobre la marcha y estarán disponibles inmediatamente para su uso sin tener que volver a conectarse a la aplicación. Esto incluye la creación de objetos personalizados que se pueden agregar a la API RESTful de Oracle Sales Automation.

Consejos de Rendimiento

Para obtener el mejor rendimiento de las API de REST de Oracle Fusion Sales Cloud, siga estos consejos.

Consulta sólo los datos necesarios. Por ejemplo, si consulta el servicio REST de oportunidad, la carga útil será bastante grande y experimentará un tiempo de respuesta largo. Puede acortar este tiempo de respuesta si:
  • Consulta solo los datos que necesitas.
  • Consulta sólo los datos, no los metadatos.
Por ejemplo, introduzca la consulta
salesApi/resources/latest/opportunities
devolverá una carga útil grande, mientras que al introducir la consulta
salesApi/resources/latest/opportunities?fields=Name,OptyNum&onlyData=true
devolverá una carga útil menor, ya que ha reducido los criterios de consulta.

Buscar recursos RESTful mediante puntos finales "Describir"

Puede obtener detalles específicos sobre las diferentes API RESTful de Oracle Sales Automation enviando una solicitud HTTP GET que devuelva un objeto JSON que contenga información de recursos y metadatos complementarios.

Para obtener información sobre una versión concreta de la API:
  1. Conéctese a Oracle Sales Automation como administrador de ventas.
  2. La URL que se muestra después de conectarse muestra el nombre y el número de puerto del servidor para la instancia de Oracle Sales Automation:
    Por ejemplo, si la URL es http://˂crm_server:PortNumber˃/customer/faces/CrmFusionHome, el nombre del servidor es crm_server y el número de puerto es PortNumber.

    Anote el nombre y el número de puerto del servidor, que utilizará en los pasos restantes.

  3. Apunte el explorador web a la URL de recurso de API para obtener los metadatos de API de la instancia de Oracle Sales Automation:

    https://˂crm_server:PortNumber˃/salesApi/resources/

    Donde salesAPI es el nombre de API para el contenedor de aplicaciones. La respuesta del servidor devolverá un objeto JSON que contiene una matriz de elementos de objeto, donde cada elemento representa una versión concreta de la API; por ejemplo, a continuación se muestra una parte de la matriz de resultados con información sobre un elemento:

    {
        "version" : "11.1.10",
        "isLatest" : true,
        "links" : [ {
          "rel" : "self",
          "href" : " https://˂crm_server:PortNumber˃/salesApi/resources/11.1.10",
          "name" : "self",
          "kind" : "item"
        }, {
          "rel" : "canonical",
          "href" : " https://˂crm_server:PortNumber˃/salesApi/resources/11.1.10",
          "name" : "canonical",
          "kind" : "item"
        }, {
          "rel" : "predecessor-version",
          "href" : " https://˂crm_server:PortNumber˃/salesApi/resources/11.1.9",
          "name" : "predecessor-version",
          "kind" : "item"
        }, {
          "rel" : "describe",
          "href" : " https://˂crm_server:PortNumber˃/salesApi/resources/11.1.10/describe",
          "name" : "describe",
          "kind" : "describe"
        } ]
      }
  4. Si desea ver todos los objetos expuestos por una versión de API concreta, puede acceder a su punto final "describir", especificando la versión deseada en la URL:

    https://˂crm_server:PortNumber˃/salesApi/resources/11.1.10/describe

    O también puede obtener información sobre la "última" versión de API:

    https://˂crm_server:PortNumber˃/salesApi/resources/latest/describe

    Se devolverá un objeto JSON largo que contenga la última versión de los objetos de Oracle Sales Automation soportados en la API, sus objetos secundarios, una descripción completa de todos los métodos, parámetros, valores de retorno soportados, así como los URI de recurso de objeto.

Buscar recursos RESTful asociados a objetos personalizados

Para buscar los URI de recursos para objetos personalizados de Oracle Sales Automation, siga estos pasos:

  1. Vaya a Application Composer (debe estar conectado como administrador de ventas, administrador de aplicaciones de CRM o consultor de implantación de aplicaciones).
  2. Haga clic en Objetos personalizados para ver la lista de objetos personalizados en la tabla Objetos.
  3. Para ver el URI de un objeto específico, en la columna Recurso REST, haga clic en el enlace Servicio que corresponda a ese objeto.

    Sugerencia:

    Puede cortar y pegar el URI desde la barra de direcciones del explorador.

  4. (Opcional) Para ver la descripción de un objeto personalizado específico, en la columna Recurso REST, haga clic en el enlace Describir que corresponda a ese objeto.

    Note:

    Puede agregar /describe al final del URI para obtener una descripción de un objeto personalizado.

Obtener los puntos finales del servicio para los servicios web RESTful

Puede inferir el nombre de un punto final de servicio web de Oracle Sales Automation RESTful especificando el nombre del servicio en lugar de la palabra clave "describir" en la URL de API.

Para comenzar, siga estos pasos:
  1. Abra el explorador y acceda a la URL de punto final. Si es la primera vez que la abre, se le solicitarán las credenciales de usuario de Oracle Sales Automation.
    Por ejemplo, en la API de REST para Oracle Sales Automation versión 12, para acceder al punto final del servicio Oportunidades para la última versión de API, la URL es:

    https://˂crm_server:PortNumber˃/salesApi/resources/latest/opportunities

  2. (Opcional) Si desea obtener información adicional sobre un recurso específico, puede utilizar la URL de descripción del recurso para obtener metadatos adicionales que contengan campos, acciones que se pueden realizar, objetos secundarios y una lista de recursos de valores.
    Por ejemplo, en la API de REST para Oracle Sales Automation versión 12, en el punto final del servicio Oportunidades, la URL de descripción es:

    https://˂crm_server:PortNumber˃/salesApi/resources/latest/opportunities/describe

    La API de REST de Oracle Sales Automation incluye los siguientes puntos finales de servicio web RESTful. Tenga en cuenta que algunas URL de punto final han cambiado de R12 a R13:
    Versión 12 Versión 13
     /crmCommonApi/resources/latest/accounts /crmRestApi/resources/latest/accounts
    /salesApi/resources/latest/activities /crmRestApi/resources/latest/activities
    /serviceApi/resources/latest/categories /crmRestApi/resources/latest/assets
    /incentiveCompensationApi/resources/latest/compensationPlans /crmRestApi/resources/latest/businessPlans
    /salesApi/resources/latest/competitors  /crmRestApi/resources/latest/categories
    /crmCommonApi/resources/latest/contacts /crmRestApi/resources/latest/channels
    /incentiveCompensationApi/resources/latest/creditCategories /fscmRestApi/resources/latest/compensationPlans
    /salesApi/resources/latest/deals /crmRestApi/resources/latest/competitors
    /salesApi/resources/latest/territoryForecasts /crmRestApi/resources/latest/contacts
    /crmCommonApi/resources/latest/households /fscmRestApi/resources/latest/creditCategories
    /crmCommonApi/resources/latest/lightboxDocuments /crmRestApi/resources/latest/deals
    /salesApi/resources/latest/opportunities /crmRestApi/resources/latest/territoryForecasts
    /incentiveCompensationApi/resources/latest/incentiveCompensationParticipants /crmRestApi/resources/latest/households
     /salesApi/resources/latest/partnerPrograms /crmRestApi/resources/latest/inboundMsgFilters
    /salesApi/resources/latest/partnerTiers /crmRestApi/resources/latest/inboundMessages
    /salesApi/resources/latest/partners /crmRestApi/resources/latest/interactions
    /incentiveCompensationApi/resources/latest/paymentBatches /crmRestApi/resources/latest/lightboxDocuments
     /incentiveCompensationApi/resources/latest/paymentTransactions  /crmRestApi/resources/latest/presentationSessionFeedback
    /incentiveCompensationApi/resources/latest/paysheets  /crmRestApi/resources/latest/presentationSessions
    /incentiveCompensationApi/resources/latest/incentiveCompensationPerformanceMeasures  /crmRestApi/resources/latest/mySelfServiceRoles
    /incentiveCompensationApi/resources/latest/planComponents /crmRestApi/resources/latest/salesObjectives
    /salesApi/resources/latest/priceBookHeaders /crmRestApi/resources/latest/opportunities
    /salesApi/resources/latest/setupSalesCatalogs /fscmRestApi/resources/latest/incentiveCompensationParticipants
    /salesApi/resources/latest/products /crmRestApi/resources/latest/partnerPrograms
     /salesApi/resources/latest/partnerProgramBenefits /crmRestApi/resources/latest/partnerTiers
     /salesApi/resources/latest/programEnrollments  /crmRestApi/resources/latest/partners
    /serviceApi/resources/latest/queues /fscmRestApi/resources/latest/paymentBatches
     /incentiveCompensationApi/resources/latest/rateDimensions /fscmRestApi/resources/latest/paymentTransactions
    /incentiveCompensationApi/resources/latest/rateTables /fscmRestApi/resources/latest/paysheets
    /crmCommonApi/resources/latest/resources /fscmRestApi/resources/latest/incentiveCompensationPerformanceMeasures
     /incentiveCompensationApi/resources/latest/incentiveCompensationRoles /fscmRestApi/resources/latest/planComponents
    /salesApi/resources/latest/leads /crmRestApi/resources/latest/priceBookHeaders
    /crmCommonApi/resources/latest/salesOrders /crmRestApi/resources/latest/setupSalesCatalogs
    /salesApi/resources/latest/salesPromotions /crmRestApi/resources/latest/products
    /crmPerformanceApi/resources/latest/territories /crmRestApi/resources/latest/partnerProgramBenefits
     /serviceApi/resources/latest/serviceRequests /crmRestApi/resources/latest/programEnrollments
    /salesApi/resources/latest/sourcecodes /crmRestApi/resources/latest/queues
    - /fscmRestApi/resources/latest/rateDimensions
    - /fscmRestApi/resources/latest/rateTables
    - /crmRestApi/resources/latest/resources
    - /fscmRestApi/resources/latest/incentiveCompensationRoles
    - /crmRestApi/resources/latest/leads
    - /crmRestApi/resources/latest/salesOrders
    - /crmRestApi/resources/latest/salesPromotions
    - /crmRestApi/resources/latest/territories
    - /crmRestApi/resources/latest/proposals
    - /crmRestApi/resources/latest/screenPopPages
    - /crmRestApi/resources/latest/screenPopTokens
    - /crmRestApi/resources/latest/selfRegistrations
    - /crmRestApi/resources/latest/selfServiceRoles
    - /crmRestApi/resources/latest/selfServiceUsers
    - /crmRestApi/resources/latest/serviceDetails
    - /crmRestApi/resources/latest/serviceProviders
    - /crmRestApi/resources/latest/serviceRequests
    - /crmRestApi/resources/latest/socialPosts
    - /crmRestApi/resources/latest/sourcecodes
    - /crmRestApi/resources/latest/wrapUps

    Note:

    Los nombres de API cambian en función del contenedor de aplicación de Oracle Sales Automation al que pertenece el objeto de recurso.

Acerca de las estructuras de carga útil y operaciones REST

El servicio web RESTful para cada objeto estándar de Oracle Sales Automation proporciona varias operaciones de creación, lectura, actualización y supresión (CRUD).

Puede ejecutar los siguientes métodos estándar para interactuar con un recurso singular o una recopilación de recursos a través de sus URL:

Método Disponible para un recurso singular Disponible para una recopilación de recursos
Get S N
Post N S
Aplicar parches S N
Suprimir S N

Acerca del Método Get

Utilice este método para consultar y recuperar información. Sin embargo, los parámetros utilizados en la consulta para acotar la búsqueda o acotar los resultados en un recurso singular son diferentes de los utilizados en una recopilación de recursos.

Parámetros para Recursos Singulares y de Recopilación

Los siguientes parámetros se utilizan en el método para consultar un recurso singular y un recurso de recopilación:

parámetro Formato Descripción
expand

expand=<childResource1>,<childResource2>...

o bien,

expand=all

Devuelve el recurso principal, incluidos sus secundarios. Por defecto, no devuelve ningún secundario.
fields fields=<FieldName1>,<FieldName2>... Seleccione solo determinados campos cuya información sea necesaria.
onlyData

onlyData=true

o bien,

onlyData=false

Recupere solo datos y no ninguna URL de recurso. Por defecto, se devuelven todas las URL secundarias de recursos.

Parámetros para recursos de cobro

Un método GET para el recurso de recopilación utiliza los parámetros descritos anteriormente, así como los siguientes parámetros:

parámetro Formato Descripción
limit

limit=<Integer>

Un entero mayor que 0 que especifica el número máximo de elementos devueltos por el servidor. Si no se especifica un valor de límite, el servidor usará un valor de límite por defecto.
offset offset=<Integer> Valor entero que especifica el índice del primer elemento que se va a devolver. El índice de desplazamiento comienza en 0.
q

q=<condition1>;<condition2>;…

Especifique una condición de filtro para restringir los elementos devueltos en la recopilación. El valor de este parámetro de consulta contiene una o más expresiones separadas por ";". Por ejemplo, q=deptno>=10 and <=30;loc!=NY

Operadores soportados:

>

<

>=

<=

!=

AND

OR

=

LIKE

Caracteres especiales:

  • Comillas dobles o simples para literales, es decir: "valor literal 1" o "value2 literal"

  • Barra invertida para caracteres de escape: \

  • Asterisco para comodín: *

totalResults

totalResults=true

o bien,

totalResults=false

Valor booleano que especifica si se debe devolver el número total de elementos que coinciden con el parámetro de consulta "q".
orderBy

orderBy=<field1:asc>,<field2:desc>.

Especifica el orden de los elementos devueltos en la carga útil de respuesta. El valor del parámetro de consulta es una cadena separada por comas de nombres de campo, cada uno opcionalmente seguido de dos puntos y la palabra clave asc o desc.

Si no se especifica, el servidor devuelve los elementos en orden ascendente.

finder

finder=FinderName;<attr1>=<val1>,<attr2>=<value2>

Utiliza una "consulta" predefinida que tiene sus propios parámetros especiales.

Por ejemplo, el recurso Opportunities tiene una función finder denominada MyOpportunitiesFinder, esta función tiene un parámetro Name que se puede definir como Auto. Esta llamada recuperará todas las oportunidades que posee el usuario actual cuyo nombre empiece por "Automático".

dependency

dependency=<attr1>=<val1>

Se utiliza para los recursos de lista de valores en cascada. Por ejemplo, si un recurso Location tiene un campo State, esos valores se derivarán de otro recurso States que devuelva una lista de estados para un país (ubicación) específico. Si, por ejemplo, Location es: US y State es CA. El recurso de estados contiene una lista de todos los estados de EE. UU., pero si el usuario en la página web cambia la configuración regional a Brasil, la forma de recuperar todos los estados de Brasil sería con una llamada como esta:

States?dependency=Country=BR

Acerca del método de publicación

Utilice este método para crear un nuevo elemento. La cabecera del tipo de medio de solicitud es:

application/vnd.oracle.adf.resourceitem+json

Por ejemplo, para crear una nueva oportunidad en el recurso Opportunities, la solicitud transfiere el nuevo parámetro de nombre de Oportunidad en un objeto JSON:

{
"Name" : "New Opportunity Name"
}

El cuerpo de respuesta del objeto JSON devuelto por la solicitud POST sería algo así:


{
BudgetAvailableDate: null
BudgetedFlag: false
PrimaryOrganizationId: 204
ChampionFlag: false
CreatedBy: "SALES_ADMIN"
CreationDate: "2015-06-04T03:08:27-07:00"
CurrencyCode: "USD"
SalesMethodId: 100000012430001
SalesStageId: 100000012430007
Name: "New Opportunity Name"
OptyId: 300100111705686
OptyNumber: "CDRM_332708"
OwnerResourcePartyId: 3807
StatusCode: "OPEN"
PrimaryRevenueId: 300100111705687
SalesMethod: "Standard Sales Process"
SalesStage: "01 - Qualification"
DescriptionText: "Looking for the Right Contacts, Characteristics,
Determining the Need, Budget and Sponsor"
AverageDaysAtStage: 30
MaximumDaysInStage: 800
PhaseCd: "QUALIFICATION-DISCOVERY"
QuotaFactor: 3
RcmndWinProb: 0
StageStatusCd: "OPEN"
StgOrder: 1
EffectiveDate: "2015-06-24"
Revenue: 0
WinProb: 0
PartyName1: "Charles Taylor"
DownsideAmount: 0
UpsideAmount: 0
EmailAddress: "firstname lastname@orcl.com"
ExpectAmount: 0
ForecastOverrideCode: "CRITERIA"
SalesChannelCd: "ZPM_DIRECT_CHANNEL_TYPES"
…
}

Acerca del Método de Parches

Utilice este método para realizar actualizaciones parciales en un recurso. Solo se actualizarán los campos incluidos en el cuerpo de la solicitud.

El tipo de medio de solicitud es:

application/vnd.oracle.adf.resourceitem+json

Por ejemplo, para actualizar una oportunidad existente del recurso Oppurtunities, la solicitud HTTP PATCH transfiere el siguiente objeto JSON como cuerpo de la solicitud:

{
"Name": "Opportunity Name Updated"
}

La respuesta de esta solicitud es un objeto JSON similar a este:


{
BudgetAvailableDate: null
BudgetedFlag: false
PrimaryOrganizationId: 204
ChampionFlag: false
CreatedBy: "SALES_ADMIN"
CreationDate: "2015-06-04T03:08:27-07:00"
CurrencyCode: "USD"
SalesMethodId: 100000012430001
SalesStageId: 100000012430007
Name: "Opportunity Name Updated"
OptyId: 300100111705686
OptyNumber: "CDRM_332708"
OwnerResourcePartyId: 3807
StatusCode: "OPEN"
PrimaryRevenueId: 300100111705687,
SalesMethod: "Standard Sales Process"
SalesStage: "01 - Qualification"
DescriptionText: "Looking for the Right Contacts, Characteristics,
Determining the Need, Budget and Sponsor"
AverageDaysAtStage: 30
MaximumDaysInStage: 800
PhaseCd: "QUALIFICATION-DISCOVERY"
QuotaFactor: 3
RcmndWinProb: 0
StageStatusCd: "OPEN"
StgOrder: 1
EffectiveDate: "2015-06-24"
Revenue: 0
WinProb: 0
PartyName1: "Charles Taylor"
DownsideAmount: 0
UpsideAmount: 0
EmailAddress: "firstname_lastname@orcl.com"
ExpectAmount: 0
ForecastOverrideCode: "CRITERIA"
SalesChannelCd: "ZPM_DIRECT_CHANNEL_TYPES"
…
}

Acerca del Método de Supresión

Utilice este método para suprimir un recurso. No requiere un cuerpo de solicitud.

Por ejemplo, para suprimir un objeto Opportunity del recurso Opportunities, la solicitud DELETE se debe realizar directamente en el URI del recurso Opportunity secundario para suprimirlo, sin transferirle ningún parámetro:

https://<crm_server:PortNumber>/salesApi/resources/latest/opportunities/<OpportunityNumber>

Acerca de los métodos de acción personalizados

A veces, un recurso expone una acción personalizada que no se ajusta al estándar CRUD. Una acción personalizada siempre se invoca con POST (para recopilaciones de recursos y singulares) y su tipo de medio de solicitud es:

application/vnd.oracle.adf.action+json

El tipo de medio de respuesta es:

application/vnd.oracle.adf.actionresult+json

Por ejemplo, en Oracle Sales Automation, el recurso leads de https://<crm_server:portNumber>/salesApi/resources/latest/describe/leads/ tiene una acción personalizada para convertir una oportunidad potencial en una oportunidad denominada: convertLeadToOpty.

{
          "name" : "convertLeadToOpty",
          "parameters" : [ {
            "name" : "leadId",
            "type" : "number",
            "mandatory" : false
          } ],
          "resultType" : "string",
          "method" : "POST",
          "requestType" : [ "application/vnd.oracle.adf.action+json" ],
          "responseType" : [ "application/json", "application/vnd.oracle.adf.actionresult+json" ]
        },

Piense en una acción personalizada como una serie de pasos, un proceso o una combinación de diferentes operaciones CRUD para lograr un objetivo específico. En el ejemplo anterior, el cuerpo de solicitud de una acción personalizada debe transferir el "nombre" que va a ser ese nombre de acción personalizada (es decir, convertLeadToOpty) y, opcionalmente, una matriz de parámetros de entrada para la acción personalizada (es decir, leadId).

Normalmente, el cuerpo JSON de la solicitud POST contiene:

{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"title": "Action execution representation.",
"description": "Represents the action execution and its
parameters.",
"properties": {
"name": {
"type": "string",
"description": "Action name."
},
"parameters": {
"type": "array",
"description": "Parameter name/value pair.",
}
},
"required": [
"name"
]
}

El objeto de respuesta JSON contiene el resultado del método custom action en el campo "results".

Acerca del soporte por lotes

Para mejorar el rendimiento, se pueden combinar varias operaciones en una sola solicitud HTTP enviando un objeto JSON que contenga un campo denominado "partes" como matriz de objetos. Cada objeto de la matriz contiene un ID único, una ruta relativa al recurso, una operación y, opcionalmente, una carga útil.

El esquema JSON de la solicitud HTTP es:


{
"$schema": "http://json-schema.org/draft-04/schema#",
"type": "object",
"title": "Batch execution",
"description": "Group multiple requests together ('part').",
"definitions": {
"Part": {
"type": "object",
"allOf": [
{
"properties": {
"id": {
"type": "string",
"description": "An identification
provided by the client to distinguish each part provided in the
batch request."
},
"path": {
"type": "string",
"description": "Resource's location."
},
"operation": {
"type": "string",
"enum": [
"get",
"create",
"update",
"replace",
"delete"
],
"description": "The operation that will
be performed."
},
"preconditionSucceeded": {
"type": "boolean",
"description": "This attribute is set in
the batch response only when ifMatch or ifNoneMatch are provided in
the request. It will be 'true' if the precondition
(ifMatch/ifNoneMatch) was satisfied, otherwise 'false'."
},
"payload": {
"oneOf": [
{
"$ref": "resource-item.json",
"description": "The payload that
will be used in the operation. Example: a resource instance should
be provided in order to execute a 'create'."
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"path",
"operation"
]
}
],
"anyOf": [
{
"properties": {
"ifMatch": {
"type": "string",
"description": "This attribute is
analogous to the If-Match header. It represents a precondition to
execute this operation. The value can be null (same effect of 'If-
Match: *') or an array of resource versions."
}
}
},
{
"properties": {
"ifNoneMatch": {
"type": "string",
"description": "This attribute is
analogous to the If-None-Match header. It represents a precondition
to execute this operation. The value can be null (same effect of
'If-None-Match: *') or an array of resource versions."
}
}
}
],
"description": "Represents a request."
}
},
"properties": {
"parts": {
"type": "array",
"items": {
"$ref": "#/definitions/Part"
},
"description": "Array that represents multiple
requests."
}
},
"required": [
"parts"
]
}

Por ejemplo, la siguiente solicitud recuperará un empleado existente y actualizará otro empleado:


POST /myapi/resources/latest/hremployees HTTP/1.1
Host: example.oracle.com
Content-type:application/vnd.oracle.adf.batch+json
{
"parts": [
{
"id": "part1",
"path": "/latest/hremployees/101",
"operation": "get"
},
{
"id": "part2",
"path": "/latest/hremployees/102",
"operation": "update",
"payload": {
"Salary": 18000
}
}
]
}

La respuesta de la solicitud anterior utiliza el mismo tipo de medio que la solicitud y devuelve un objeto JSON como:

{"parts":[
{
"id":"part1",
"path":"/latest/hremployees/101",
"operation":"get",
"payload" : {
"EmployeeId" : 101
…
},
{
"id" : "part2",
"path" : "/latest/hremployees/102",
"operation" : "update",
"payload" : {
"EmployeeId" : 102,
} ]}

Prueba de una solicitud de servicio web de Oracle Sales Automation RESTful

Para probar una API RESTful y obtener los datos necesarios, puede utilizar la herramienta de línea de comandos cURL para transferir datos desde o hacia un servidor mediante uno de los protocolos soportados, como HTTP o HTTPS.

En este ejemplo vamos a utilizar la herramienta cURL para acceder a una API RESTful:
  1. Asegúrese de que tiene una URL de REST válida (punto final), por ejemplo, en Oracle Sales Automation versión 12, el punto final del recurso accounts es:

    https://<crm_server:PortNumber>/crmCommonApi/resources/latest/accounts

  2. Tenga a mano sus credenciales de seguridad.
  3. Asegúrese de tener instalada la herramienta cURL, de lo contrario:
    1. En el explorador, vaya a la página inicial de cURL en http://curl.haxx.se/download.html y haga clic en Descargar en el menú de navegación de la izquierda.
    2. En la página Versiones y descargas de cURL, busque la versión activada para SSL del software cURL que corresponde a su sistema operativo, haga clic en el enlace para descargar el archivo ZIP e instale el software.
    3. Vaya a la página Certs de CA de cURL en http://curl.haxx.se/docs/caextract.html y descargue el grupo de certificados de CA SSL ca-bundle.crt en la carpeta en la que instaló cURL.
    4. Abra una ventana de comandos, navegue hasta el directorio donde instaló cURL y defina la variable de entorno cURL, CURL_CA_BUNDLE, en la ubicación de un paquete de certificados *CA de la autoridad de certificación SSL. Por ejemplo:
      C:\curl> set CURL_CA_BUNDLE=ca-bundle.crt

      Ya está listo para utilizar cURL.

  4. Con la herramienta cURL, emita una solicitud HTTP en el recurso:
    $ curl –k –u <userName> https://<crm_server:PortNumber>/crmCommonApi/resources/latest/accounts
  5. Puede esperar una respuesta similar a la que se muestra a continuación:
    {
    "items" : [ {
    "PartyId" : 300100010648746,
    "PartyNumber" : "CDRM_2260",
    "SourceSystem" : null,
    "SourceSystemReferenceValue" : null,
    "OrganizationName" : "DLAKWRVBBU",
    "UniqueNameSuffix" : "US)",
    "PartyUniqueName" : "DLAKWRVBBU US)",
    "Type" : "ZCA_CUSTOMER",
    "OwnerPartyId" : 100010025532672,
    "OwnerPartyNumber" : "100010025532672",
    "OwnerEmailAddress" : "sendmail-test-discard@oracle.com",
    ...
    },
    {
    ...
    } ],
    "count" : 25,
    "hasMore" : true,
    "limit" : 25,
    "offset" : 0,
    "links" : [ {
    "rel" : "self",
    "href" :
    "https://host:port/crmCommonApi/resources/latest/accounts",
    "name" : "accounts",
    "kind" : "collection"
    } ]
    }
  6. En el cuerpo de la respuesta, puede ver los enlaces a cada recurso que contiene las acciones que se pueden realizar en ellos.
  7. (Opcional) Puede utilizar el URI /describe para obtener los metadatos de un recurso, como:
    $ curl –k –u <userName> https://<crm_server:PortNumber>/crmCommonApi/resources/latest/accounts/describe

    Devuelve algo así:

    
    {
    "Resources" : {
    "accounts" : {
    "discrColumnType" : false,
    "title" : "Sales Cloud Account SDO",
    "attributes" : [ {
    "name" : "PartyId",
    "type" : "integer",
    "updatable" : false,
    "mandatory" : true,
    "queryable" : true,
    "precision" : 18,
    "properties" : {
    "fnd:GLOBALLY_UNIQUE" : "true"
    }
    }, {
    "name" : "PartyNumber",
    "type" : "string",
    "updatable" : true,
    "mandatory" : true,
    "queryable" : true,
    "precision" : 30,
    "maxLength" : "30",
    "properties" : {
    "DISPLAYWIDTH" : "40"
    }
    }, {
    "name" : "SourceSystem",
    "type" : "string",
    "updatable" : true,
    "mandatory" : false,
    "queryable" : true
    }, {
    ...],
    "links" : [ {
    "rel" : "self",
    "href" :
    "https://host:port/crmCommonApi/latest/latest/accounts",
    "name" : "self",
    "kind" : "collection"
    } ],
    "actions" : [ {
    "name" : "get",
    "method" : "GET",
    "responseType" : [ "application/json",
    "application/vnd.oracle.adf.resourcecollection+json" ]
    }, {
    "name" : "create",
    "method" : "POST",
    "requestType" : [
    "application/vnd.oracle.adf.resourceitem+json" ],
    "responseType" : [ "application/json",
    "application/vnd.oracle.adf.resourceitem+json" ]
    } ]
    }
    ...

    Desde los metadatos puede observar que puede ejecutar un comando POST en el recurso /accounts para crear un recurso.