External Services is a feature of the Salesforce Platform that empowers customers to connect Salesforce to external business actions and build process integrations without writing custom code. Using External Services, developers can take a process that sits behind an OpenAPI specification and accelerate the creation of actions that invoke functionality in other systems from within Salesforce. This provides a valuable way to leverage Salesforce process automation tools to automate anything.

In Spring ‘22, we’ve enriched External Services so you can seamlessly integrate with more high-value third party platforms and build upon their published APIs without having to manually edit specifications before registering.

We have grown our selection of publicly available APIs such as Microsoft’s Computer Vision or Algolia Search thanks to new support for OpenAPI 3.0 and even more support for complex schema constructs.

Here are some of the changes and enhancements coming to External Services in Spring ’22:

  • NEW IDEA DELIVERED: Register more specs with OpenAPI 3.0 support
    Developers can now register schemas that use OpenAPI 3.0 JSON format without having to modify or convert the schema format. This is a pilot capability moving to GA and it is something that our trailblazers have been asking for on the IdeaExchange!
  • Include more operations with composition and polymorphism support
    Developers can now use composition and polymorphism components allOf, anyOf, oneOf, and Discriminator.

    In your API, you may have model schemas that share common properties. Rather than describing these properties for each schema repeatedly, you can describe the schemas as a composition of the common property set and schema-specific properties using the allOf keyword.

    • Using Asana OpenAPI 3.0 as an example, the AsanaNamedResource schema includes its own properties and properties inherited from the schema object AsanaResource.
 "AsanaNamedResource": {
        "allOf": [
          {
            "$ref": "#/components/schemas/AsanaResource"
          },
          {
            "properties": {
              "name": {
                "description": "The name of the object.",
                "example": "Bug Task",
                "type": "string"
              }
            },
            "type": "object"
          }
        ]
      },
  "AsanaResource": {
        "description": "A generic Asana Resource, containing a globally unique identifier.",
        "properties": {
          "gid": {
            "description": "Globally unique identifier of the resource, as a string.",
            "example": "12345",
            "readOnly": true,
            "type": "string",
            "x-insert-after": false
          },
          "resource_type": {
            "description": "The base type of this resource.",
            "example": "task",
            "readOnly": true,
            "type": "string",
            "x-insert-after": "gid"
          }
        },
        "type": "object"
      },
    • The Rocket Services OpenAPI 3.0 example showcases polymorphic types. Subtypes of ItemSummary like ItemDetail can be used as episode, season and show properties in ContinueWatchingListDataExpansion.
      "ItemSummary": {
        "discriminator": {
          "propertyName": "type"
        },
        "properties": {
          "advisoryText": {
            "description": "Advisory text about this item, related to the classification",
            "type": "string"
          },
          "type": {
            "description": "The type of item",
            "type": "string"
          },
          ...
        },
        "type": "object"
      },
      ...    
      
      "ItemDetail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ItemSummary"
          },
          {
            "properties": {
            ...
            },
            "type": "object"
          }
        ]
      },
      ...              
      "ContinueWatchingListDataExpansion": {
        "additionalProperties": false,
        "properties": {
          "episode": {
            "$ref": "#/components/schemas/ItemSummary"
          },
          "season": {
            "$ref": "#/components/schemas/ItemSummary"
          },
          "show": {
            "$ref": "#/components/schemas/ItemSummary"
          }
        },
        "type": "object"
        }
      }
  • Map unsupported media types in your registration
    Say you want to callout to an AWS API that utilizes a specific media type such as application/x-amz-json-1.1. which we do not support because it doesn’t adhere to OpenAPI specification standards, and therefore, doesn’t comply with the requirements of External Services. Previously, developers needed to provide the mapping with code by using the Metadata API, but now the External Services registration screen has been enhanced to allow you to easily select a valid mapping from a dropdown menu for each unsupported media type. Additionally, this is something our trailblazers have been asking for on the IdeaExchange!

To learn more about the latest enhancements to External Services, check out the Spring ’22 release notes.

Learn MOAR this week

Product Managers and Developer Relations are back to share the latest features and functionality to help you develop faster with new content from Developer Relations covering their favorite new features. Make sure to check out Release Readiness Live on Friday February 4th at 9:00 PST. Lastly, and keep an eye on the Salesforce Developers blog for more posts on Spring ’22!

To learn even more, check out the Spring ’22 trailmix.

About the author

Andrea Guzman is the Product Manager for the External Services team, where she’s working on Salesforce integration product that harnesses API industry standards to generate declarative building blocks on the Salesforce Platform, empowering developers and admins to build cross-system integrations and workflows. When Andrea is not working, she enjoys traveling, hiking, and playing soccer.

Get the latest Salesforce Developer blog posts and podcast episodes via Slack or RSS.

Add to Slack Subscribe to RSS