This document discusses using external objects in Salesforce to integrate and expose data from external sources like OData feeds or proprietary systems. It provides an overview of external objects and how they allow querying and interacting with external data similarly to standard and custom objects. Additionally, it demonstrates connecting to SAP order data via an OData feed, and discusses the OData specification and ecosystem. The document also covers the Apex connector framework for building custom connectors when exposing data via OData is not possible.
Unleash Your Potential - Namagunga Girls Coding Club
Introduction to External Objects and the OData Connector
1. Using External Objects for Integration
Expose OData or proprietary data in your Salesforce org
Alexey Syomichev, Salesforce.com, Software Architect
@syomichev
4. Safe Harbor
Safe harbor statement under the Private Securities Litigation Reform Act of 1995:
This presentation may contain forward-looking statements that involve risks, uncertainties, and assumptions. If any such uncertainties
materialize or if any of the assumptions proves incorrect, the results of salesforce.com, inc. could differ materially from the results
expressed or implied by the forward-looking statements we make. All statements other than statements of historical fact could be
deemed forward-looking, including any projections of product or service availability, subscriber growth, earnings, revenues, or other
financial items and any statements regarding strategies or plans of management for future operations, statements of belief, any
statements concerning new, planned, or upgraded services or technology developments and customer contracts or use of our services.
The risks and uncertainties referred to above include – but are not limited to – risks associated with developing and delivering new
functionality for our service, new products and services, our new business model, our past operating losses, possible fluctuations in our
operating results and rate of growth, interruptions or delays in our Web hosting, breach of our security measures, the outcome of any
litigation, risks associated with completed and any possible mergers and acquisitions, the immature market in which we operate, our
relatively limited operating history, our ability to expand, retain, and motivate our employees and manage our growth, new releases of our
service and successful customer deployment, our limited history reselling non-salesforce.com products, and utilization and selling to
larger enterprise customers. Further information on potential factors that could affect the financial results of salesforce.com, inc. is
included in our annual report on Form 10-K for the most recent fiscal year and in our quarterly report on Form 10-Q for the most recent
fiscal quarter. These documents and others containing important disclosures are available on the SEC Filings section of the Investor
Information section of our Web site.
Any unreleased services or features referenced in this or other presentations, press releases or public statements are not currently
available and may not be delivered on time or at all. Customers who purchase our services should make the purchase decisions
based upon features that are currently available. Salesforce.com, inc. assumes no obligation and does not intend to update these
forward-looking statements.
5. An Alternative to ETL
▪ Extract-Transform-Load is very
popular for data synchronization
▪ Synchronized dataset
goes stale immediately
External Data Source
allows data interaction
without physical movement
6. Session Outline
▪ Introduction to External Data Source and External Objects
▪ SAP Orders over OData demo
▪ OData ecosystem
▪ Advanced External Objects
▪ Apex Connector Framework
▪ Open discussion
7. What is an External Object?
A tool to make data outside of Salesforce visible within our Platform.
▪ Data must be in a format we understand
▪ OData
▪ Apex connector framework
▪ Data must be accessible on the public Internet
▪ Basic
▪ OAuth
8. What can I do with an External Object?
Standard and Custom
Objects
External Objects
Write
X
Read
X
X
REST and SOAP API
X
X (read only)
Custom Tabs and Details
X
X (read only)
SOQL
X
X (read only, no aggregation,
no tracking)
Search and SOSL
X
X
Reports and Analytics
X
11. Demo: OData connector
Let’s consider an organization that
▪ maintains Account info in Salesforce,
▪ but uses SAP for sales order tracking.
12. SOQL ☺
Support basic queries (SELECT, WHERE, LIMIT, OFFSET)
Support date literals
Accuracy limited by your external data source
13. SOQL ☹
No aggregation (GROUP BY, HAVING, COUNT())
No object tracking (FOR VIEW, FOR REFERENCE)
14. SOSL
▪ Support basic queries (FIND, IN, RETURNING, WHERE, LIMIT,
OFFSET)
▪ Accuracy limited by your external data source
15. OData Specification
▪ From http://www.odata.org/ :
OData is a standardized protocol for creating and consuming data APIs. OData builds
on core protocols like HTTP and commonly accepted methodologies like REST. The
result is a uniform way to expose full-featured data APIs.
▪ Standardization effort is led by OASIS OData Technical Committee
▪ URIs for resource identification
▪ HTTP-based interaction
▪ Atom or JSON representation
▪ Industry adoption: Microsoft, SAP
17. OData Ecosystem: Tools And Products
• Microsoft Dynamics
• Microsoft SQL Server
• Microsoft Sharepoint
• Microsoft SQL Server 2012 Reporting Services
• Windows Azure Table Storage
• SAP Netweaver Gateway
• IBM WebSphere eXtreme Scale REST data service
• Jboss Teiidhttps://docs.jboss.org/author/display/TEIID/OData+Support
18. Lookup Relationships
Lookup relationships can be established between internal and external objects.
Spoilers!
Don’t forget the safe
harbor statement.
(coming in Spring‘14)
19. External Lookup Relationships
Target domain must be an external object
The lookup field will be correspond to
External IDs in the related object
24. (Standard) Lookup Relationships
Target domain must be an internal
(standard or custom) object
The lookup field must hold valid
15-digit case sensitive salesforce.com object IDs
25. Indirect Lookup Relationships
Target domain must be an internal (standard
or custom) object
The lookup will find records that match
on a non-key field
Must be an “Is External Id” field
26. Relationship Queries
Given a Product child and external object Supplier parent:
Find all products from a given supplier:
SELECT Name FROM Product2 WHERE supplier__r.companyName__c = ‘Tardis Biscuits,
Ltd.’
Find active products for each of our suppliers:
SELECT companyName__c, (SELECT Name FROM Products__r WHERE IsActive = true)
FROM Supplier__x
27. Apex Connector Framework
When exposing legacy data in OData format is not practical, force.com platform
offers a development toolkit to build custom external connectors in Apex.
▪ The SDK consists of Apex interfaces and helper classes that allow Force.com
platform developers to build their own external connectors;
▪ These connectors become available as External Data Source types and can
be used to sync external objects in exactly the same way as any other
external data source;
▪ Objects brought it by Apex connector can be used in the same way as any
other external object;
28. Apex Connector Framework
Let’s build a Bing search connector together
1.Create class BingDataSourceConnection
- Implements sync(), query(), search()
2.Create class BingDataSourceProvider
- Declares capabilities, authenticates new connections
3.Create a new External Data Source
- Bing is now available as a data source type!
30. Limits
All normal Apex limits plus some limits specific to external data:
Limit
Default
Total queries per org per hour
2000
Concurrent queries per org
10
Concurrent queries per app server
100
Service response size
4MB
Total result set size
8MB
32. We want to hear
from YOU!
Please take a moment to complete our
session survey
Surveys can be found in the “My Agenda”
portion of the Dreamforce app