Getting Started - FDC3

🚧

NOTICE | PLEASE READ BEFORE USING FDC3

OpenFin is currently updating its FDC3 implementation to address key customer requirements. As a result, we are extending support for the OpenFin FDC3 Service to September 1, 2021.

The updates to our FDC3 implementation will incorporate Multi Runtime support, address data leakage concerns, and provide additional configurability. These changes are scheduled to land Q2 2021.

If you have questions about the impending changes please contact us at [email protected] to schedule a conversation with our Product team.

Overview

FDC3 enables App Providers to create applications that can interoperate with other applications within an OpenFin environment. This page explains the components that make up an FDC3 implementation and has examples for each component with a sample project to show how all the components work together.

FDC3 consists of:

Contexts

Contexts data defines a standard for passing common identifiers and data between apps to create a seamless workflow.

Example 1

interface Context {
    type: string;
    name: string;
    id?: {[key: string]: string};
}

Context can be summarized as:

  • Unique type identifier, used for identification and routing
  • Optional name parameter, that provides a human-readable title
  • Optional id object, providing a map of equivalent identifiers
  • Any other properties or metadata

For example, an instrument context could be derived as the following (note that name is now required and the type is fixed).

Example 2

interface Instrument extends Context {
    type: 'fdc3.instrument',
    name: string;
    id: {
        ticker?: string;
        ISIN?: string;
        CUSIP?: string;
    }
}

as a JSON payload

JSON payload example

{
    "type" : "fdc3.instrument",
    "name" : "Apple",
    "id" : 
    {  
        "ticker" : "aapl",
        "ISIN" : "US0378331005",
        "CUSIP" : "037833100"
    },
    "country": "US"
}

It is important to note that the context data specification allows extra identifiers and properties to be added as needed for each interop use case. In the example above, country could represent extra data in addition to the agreed instrument representation.

The parameters used in contexts can be found at the Contexts section of the OpenFin FDC3 API documentation.

Context Channels

Context channels allow end-user filtering of context broadcasts. Each window is assigned to a particular context channel, and any broadcasts by any window in that channel will only be received by the other windows in that channel. The assignment of windows to channels would typically be managed by the user, through either a channel selector widget built into the window itself, or through a separate channel manager application.

All windows will initially be placed in the default channel, and will remain there unless they explicitly join another channel.

Three types of context channels

There are three types of channels:

  • DefaultChannel - this is the "default" channel to which all apps are defaulted
  • SystemChannel - channels that are designated to the common "color linking" use-case, whereby users can assign windows to a known set of channels that are shared between all applications. These channels have an associated user-facing name and color.
  • AppChannel - channels that can be created by applications programmatically, for their own purposes

These channel types all operate in the same way, but have different lifecycles and metadata. The API documentation for each of the channel types describes the differences between these in more detail.

App Developers can use the context channel APIs to programmatically assign windows to different channels, or to provide UI for end users to do the same. End users may also choose to use a dedicated channel manager application to manage window assignments. Applications with channel selectors or indicators should listen to the relevant events to ensure a consistent user experience.

For more information about using Context Channels, see the Context Channels section of the OpenFin FDC3 API documentation.

Intents

Intents define a standard set of verbs that can be used to put together common cross-application workflows on the financial desktop.

  • Applications register intents & context data combinations supported in the App Directory
  • App Directory supports application discovery by intents and/or context Data
  • Intents are not full RPC, apps do not need to enumerate every function with an intent
  • FDC3 Standard intents are a limited set, organizations can create their own intents

Using Intents

Combined with Context Data and App Directory standards, Intents enable rich service discovery on the desktop. More information about Intents can be found at the Intents section of the OpenFin FDC3 API documentation.

Example

const context = {
 type: "fdc3.instrument",
 name: "IBM",
 id: {
    ticker:"ibm"
  }
};

// Display a chart, using any available application
const result = await fdc3.raiseIntent("ViewChart", context);

// Ask a specific application to display a chart
const result = await fdc3.raiseIntent("ViewChart", context, "market-data-app");

Find applications that can start a chat.

const intentApps = await fdc3.findIntent("StartChat");

Find available intents for a contact

const intentsAndApps = await fdc3.findIntentsByContext({
 type: "fdc3.contact",
 name: "Jane Doe",
 id: {
    email:"[email protected]"
  }
});

App Directory

The FDC3 App Directory provides trusted identity for financial desktop apps.

The App Directory provides the following functionality:

  • Application identity verification on a desktop - either Native, Web, or Hybrid
  • Resolve human readable names for applications location and instructions for launching
  • Application repository for metadata supporting discoverability by intent, context, and other workflow driven facets

For more information about how applications are represented within a directory, see the Application section of the OpenFin FDC3 API documentation.

Configuring directory location

The FDC3 agent will use the public OpenFin app directory to resolve intents. To specify a custom app directory, add the following to Desktop Owner Settings.

Example

{
    "services": [
        {
            "name": "fdc3",
            "config": {
                "applicationDirectory": "http://dir.myorg.com/"
            }
        }
    ]
}

Upcoming Enhancements

MultiRuntime support will be added soon.