External Services
A collection of interface standards used for exchanging information across application and system boundaries.
You can use external services to communicate with external systems and applications independent of language, technology, or platform. This ensures that the pre-existing functions of these systems and applications can be reused in CAF.
In CAF, you call back-end functions with the following external services:
● Remote Function Calls (RFCs)
● Web Services
You cannot modify external services. You only define dependencies from the application to the external service, and then expose or consume the external service from your application service. External services are always stateless, meaning a session will be opened and closed within the call.
You can use the most frequently used external service, the RFC, to communicate with ABAP-based SAP systems. RFCs are interfaces that enable external communication with function modules of SAP systems.
You can import the metadata (including methods and input and output parameters) of RFCs into CAF and subsequently make them available to other CAF services.
You can use Web services to enable systems to exchange data and start actions of any type. The WSDL (Web Service Description Language) files are imported and retrieved from a directory or UDDI server.
CAF offers an important dialog which publishes RFCs and Web services so they can be used by entity and application services in CAF. In the next section you will find information on:
● Web service structures
● Facets
Composite Application Framework Core (CAF Core) supports the consumption of flat and complex structures when calling Web services. You can see these supported structures with sample Web service responses in the table below.
Type |
Example Web Service Response |
Plain (or Flat) |
● String: Name ● Integer: Age ● … |
Plain (or Flat) with Structure |
● String: Name ● Integer: Age ● Structure: Home Phone ○ String: Area Code ○ String: Number |
Nested Structure |
● Person ○ String: Name ○ Integer: Age ○ Structure: Communication ● Structure: Home Phone ○ String: Area Code ○ String: Number ● Structure: Mobile Phone ○ String: Area Code ○ String: Number |
Table with Nested Structure |
● Table Persons (1..n) ○ String: Name ○ Integer: Age ○ Structure: Communication ■ Structure: Home Phone ● String: Area Code ● String: Number ■ Structure: Mobile Phone ● String: Area Code ● String: Number |
Plain (or Flat) with Table |
● String: Name ● Integer: Age ● Telephones: (1..n): ○ Type ○ Area Code ○ Number |
Root with Plain and Table |
● Person ○ String: Name ○ Integer: Age ○ Phones: (1..n): ■ Type ■ Area Code ■ Number |
Nested with Table |
Table: Persons (1..n): ○ String: Name ○ Integer: Age ○ Phones: (1..n): ■ Type ■ Area Code ■ Number |

CAF Core can consume all types of Web service structures; however, currently, Web services can only be exposed with structures that are plain (flat) or plain with structure.
The WSDL 1.1 tag is no longer necessary. As a result, the following facets are supported:
Type |
Description |
maxCount |
Restricts the query result set to a maximum number of entries.
Retrieving data from backend systems using an external service can create a performance bottleneck. With the maxCount parameter, you can define the maximum number of objects to become instantiated from the result set, thereby limiting how many query results will be returned. |
maxExclusive
|
States the upper bound for an ordered data type. Exclusive means that the upper bound is not in the value space. For an upper bound U, all values v must be v < U. |
minExclusive
|
States the lower bound for an ordered data type. Exclusive means that the lower bound is not in the value space. For a lower bound L, all values v must be v > L. |
maxInclusive
|
States the upper bound for an ordered data type. Inclusive means that the upper bound is also in the value space. For an upper bound U, all values v must be v <= U. |
minInclusive |
States the lower bound for an ordered data type. Inclusive means that the lower bound is also in the value space. For a lower bound L, all values v must be v >= L.
<simpleTypename="Zip Code"> <restriction base="int"> minInclusivevalue="1000" maxExclusivevalue="10000" </restriction> <simpleType> |
whiteSpace |
none |
pattern
|
Can be used for other data types than just string. However, a message can only contain one message part.
<simpleTypename="StudentID"> <restriction base="integer"> pattern value="[0-1]?[0-9]{5}" </restriction> <simpleType> |
See the following topics on Core Development Tasks for more information on implementing external services in your CAF project: