Source: http://www.flickr.com/photos/44124348109@N01/6472876377/WHERE WE AREWhile as developers and admins we think of infrastructure clouds, the biggest area of growth is SaaSTypical enterprise has six SaaS applications in place today (that you know about) so cloud integration is likely well in place todayThat’s the beauty; ANYONE can provision with a credit cardSeeing traditional software vendors quickly moving to “cloud” offering; if it’s a real cloud, then it’s multi-tenant, configurable, pay as you go, self service
SOURCE:http://www.flickr.com/photos/roeyahram/8028454092PROBLEM: Integration is non-uniform and can be hard to choose the right optionCRM is all *basically* the same, but important differences exist, especially in integrationYou will find all different types of integration options in SaaS platformsWeb services (SOAP, REST)File transfersCustom tools from providersOn-premises integration tools may not be cloud ready, but business needs dictate that integration is required
SOURCE: http://www.flickr.com/photos/crash-candy/2347430057WHERE YOU WANT TO BE: Most SaaS apps should be interconnected with the rest of the application portfolioMore than the apps that may get deployed to PaaS or IaaS platforms, SaaS apps are VERY likely to be very integrated part of the IT landscapeYou also want to be able to use existing tools if possible; otherwise, incurring significant new software and human costs to introduce the cloudWill talk about more in next session, but you HAVE to get this right as integration is usually the defining factor between a successful and unsuccessful cloud program
SOURCE: http://www.flickr.com/photos/jakecaptive/3205277810 | http://www.flickr.com/photos/thebusybrain/2492945625 | http://www.flickr.com/photos/hollyladd/4513146360HOW TO GET THERE: [1] Uncover the need, [2] understand APIs offered by SaaS platforms, and [3] master integration tools that can span clouds
POINT #1 – Uncover the needReal time? Bulk? Inbound? Outbound? Queries? Replication? Internal? Across orgs? Between clouds?
SOURCE: http://www.sxc.hu/photo/1065245POINT #2 – Understand providers and their technologyGartner identifies the leaders in sales force automationThis 2013 MQ shows SFDC in the lead, with Dynamics CRM close behindSFDC is a massive company that is considered both a leading SaaS and PaaS platformAround since 1999100k+ customersCustomers like GE, Toyota, Virgin America, Facebook, Canon, Spotify, etcLast financial results showed nearly $1 billion revenue in 2QDynamics CRM Online part of growing family of business apps from MicrosoftLaunched in 2011Large customer baseCustomers like City of London, ING BankCRM family brings in over $1 billion per year
POINT #2 – Understand provider APIs (salesforce.com)INBOUNDSOAP (enterprise, partner WSDLs)Way to programmatically create, read, update, and delete records using strongly typed contract. Manage users, perform searches, and more.Works with standard and custom objects, standard and custom fieldsSynchronous operations, committed automaticallyRespects security settings (object-level, field-level, sharing)Can use untyped (partner) API as wellRESTLightweight way to interact with Salesforce.com programmatically through HTTPUses same underlying data model/objectsAccess resources via URI and HTTP verbsXML and JSON supportOauth for securityCustom SOAP or RESTBuild your ownBatchAPI for loading or deleting large data sets (GET and POST)Query, insert, delete, modifyWorks with binary attachmentsAsynchronously processed on SFDC serversSubmit CSV or XML blocksOUTBOUNDStreaming APIReceive notifications of changes that match SOQL queryReceiving app can be in Salesforce our outsideUses long polling (not WebSockets)Instead of heavy-polling apps, or for client apps that want to connect instead of pushing to internet-facing endpointDon’t need reliable delivery or guaranteed delivery, don’t need audit trail out of Salesforce, don’t need to get missed records when offlineOne entity per query, no joins, no aggregate queries, Outbound MessagingWay to specify that changes to SFDC records trigger an asynchronous SOAP call to an external endpointPart of workflow rule (like field updates, send email, create task)Real-time outbound communication (at least once delivery) with internet-facing endpointWant to stop polling for changes and desire a more event-driven architectureNeed durable outbound communication (vs. triggering async via code)Up to 24 hours in retry queueCustom ApexWrite code to consume external services
POINT #2 – Understand APIs (Dynamics CRM Online)INBOUND (SOAP)Also have REST endpoint, but can only use from within the platform itselfEarly boundUses entity data model and WCF data servicesUse CrmSvcUtil tool to generate entity classesGet one class for each entity in installation, including custom onesCan use LINQRegenerate whenever change CRM environmentAccount a = new Account(); a.Name = “Seroter Consulting”;Late boundUntyped entitiesGood for products that have to work across installationsUse the default “entity” classGive it the name and property collection of attributesEntity a = new Entity(“account”); a[“name”] = “Seroter Consulting”;WSDLGood for non-.NET clients and has no dependencies on CRM assembliesDescribed by MS as lightweight – points to another WSDLs via importDoesn’t appear to have custom entities represented, and no strong typing of built-in entitiesSuggestions to generate classes via CrmSvcUtil tool to get classes, and use xsd.exe to get XSDs.Or call metadata endpointOr access CSDLhttp://msdn.microsoft.com/en-us/library/gg327971.aspx – programming modelshttp://msdn.microsoft.com/en-us/library/gg327844.aspx – creating early bound classeshttp://msdn.microsoft.com/en-us/library/gg328028.aspx – using LINQOUTBOUNDAzure extension via plug-in (http://msdn.microsoft.com/en-us/library/gg309276.aspx)Async, via pluginsQueueBuffer queues via SB (not recommended), or SB queuesTopicMultiple subscribersOne-wayRequires listener to be online; Retries a few timesFixed contract IServiceEndpointPlugin with Execute operationTwo-wayString value can be returnedFixed contract ITwoWayServiceEndpointPlugin with Execute operation that returns a stringReceiver gets RemoteExecutionContext object with late bound Entity payloadOOB plugin does NOT use this string data; just for custom Azure aware plug-insRESTSimilar to two-way contractFixed contract IWebHttpServiceEndpointPlugin with Execute method that returns a stringReceiver gets RemoteExecutionContext object with late bound Entity payloadOOB plugin does NOT use this string data; just for custom Azure aware plug-insCustomPlugins, pages
Source:http://www.flickr.com/photos/riebart/4466482623 | http://www.flickr.com/photos/kake_pugh/6332127009 |http://www.flickr.com/photos/19953402@N04/6317863934POINT #3 – master the toolsToolsCode (invoking services, or even at lower level), messaging bus (built in, or external), proxy services,ETL tools (like Data Loader, SSIS, or third party)
NEED:Real-time lookup into SFDC dataI don’t need this data on my local system, but more like a dashboard viewSounds like … real-time inbound query of data via external COTS interfacesCould go direct, or, if need aggregation or mediation (transformation, security), use an integration bus like BizTalk Server
NEED:Access to Dynamics CRM Online data for on-premises business intelligenceWant the data locally instead of looked up on demandSounds like … scheduled inbound replication of data via external COTS interfacesNice to use ETL tool that can handle data cleansing and transfer for SaaS systems
NEED:Immediate notification of changes that occur in SFDC systemHave cloud-based app that shows these changes to users for actionReal time, outbound, messaging, external, reliable
NEED:New Dynamics CRM contacts to be available to internal systems (promotional purposes, welcome messages, etc)Don’t want to poll for irregular updatesReal time, internal, outbound, messaging Can push via native Azure integration!http://msdn.microsoft.com/en-us/library/gg334766.aspx
NEED:Immediate notification of changes that occur in SFDC systemWant real-time access, internal, messaging, outbound Can use Streaming API
Lots of integration options, so consider the core need, understand what is possible with your chosen platform, and see which tool provides the best way to consume those APIs.