【Salesforce】入门篇
Salesforce.com 一开始是一个云端的销售自动化(Sales Force Automation, SFA)以及客户关系管理工具(Customer Relationship Management, CRM),但经过这么多年的演化,它已经成为一个可以构建任何企业应用的通用平台。Salesforce 这个名字是一个历史遗留产物,Salesforce1 平台虽然仍提供 SFA 和 CRM 的应用,但更是一个构建现代企业系统的基础平台。
价格和功能
Salesforce1 平台上提供了许多不同版本的产品,像 CRM 应用 Sales Cloud ,客服应用 Service Cloud 以及 Platform 等等。不同的产品在内置功能上会有所不同,在 http://www.salesforce.com/crm/editions-pricing.jsp 上可查看所有产品和价格表。此外还有专门提供给开发者的免费版本,可在 https://developer.salesforce.com 申请。
下面我们从不同视角来看 Salesforce1 平台的组成。
元数据驱动的数据模型 (Metadata-driven Data Model)
在 Salesforce1 平台的核心是一个云端数据库,通过元数据可以对数据库进行自定义和配置。元数据定义了数据模型,Salesforce 支持两种不同的方式来修改元数据,一种是在 web 界面上点击拖拽等操作来修改,另一种是通过 XML 格式的定义文件来修改。Salesforce1 平台是一个多租户架构的平台,每一个租户(也叫做 Organization 或者 Org)的元数据(也就是数据模型)都支持版本控制、可打包、可测试。
数据库中的每一个对象或表都叫做 SObject,每一个 SObject 都内置了下面的功能:
自定义字段 (Custom Field)
验证逻辑 (Validation Logic)
字段级别的安全性 (Field Level Security)
引用关系和选项列表 (Reference and Picklist)
Derived Values
所有的 SObject 都提供了:
SOAP 和 REST 的 API
基本的增删改查界面
通过 Salesforce1 的移动端增删改查界面
加索引的搜索
SObject 的字段类型包含:
自动编号 (Auto Number)
公式 (Formula)
累计汇总 (Rollup Summary)
Lookup 关系 (Lookup Reference)
Master-Detail 关系 (Master-Detail Reference)
复选框 (Checkbox)
货币 (Currency)
日期和日期时间 (Date and Date/Time)
电子邮件 (Email)
地理位置 (Geolocation)
数字和百分比 (Number and Percent)
电话 (Phone)
选项列表和多选的选项列表 (Picklist)
文本框、文本区域、加密的文本 (Text, Text Area, Encrypted Text)
URL
平台上每一个新注册的 Org 都内置一些标准SObject,具体依版本不同而定。比如说 Sales Cloud 版的 Org自带了联系人、线索、业务机会。
Salesforce 数据模型内置了一些安全上的特性,比如数据更改的审计(change auditing),字段级别的安全性。
编写代码来实现自定义扩展
在Salesforce1 平台上,用户可以完全依靠 web 界面拖拽点击来构建应用。但有一些用例需要编程来实现自定义,比如自定义的界面、trigger、scheduled jobs。
Salesforce1 平台支持的编程语言:
Visualforce:服务器端模版语言,用来自定义用户界面
Apex:用来编写 trigger,visualforce controller,scheduled jobs 等代码逻辑
SOQL:用于数据库查询的领域专用语言(Domain Specific Language, DSL)
Visualforce 使用了类似 JSP 语法用来创建自定义的 HTML 页面,内嵌在 Salesforce 或者 Salesforce1 移动应用中。Visualforce 中的页面使用了传统的服务器端 MVC 架构,其中 Visualforce 是 View,Apex Class 是 Controller,SObjects 是 Model。Visualforce 页面可以使用任何的 JavaScript,包括 JavaScript Remoting 和各种 RESTful 的 web service。
一个典型的 Visualforce 页面长这样:
<apex:page> |
Apex 是一种语法和 Java 类似的,运行在平台上受管的、单独分隔的、安全的运行时中。Salesforce 提供了 Eclipse 插件 Force.com IDE 和基于 Web 的 Developer Console 用来编写 Apex 代码。Apex trigger 绑定在每个 SObject 的事件上,比如 update、delete、create。Batch jobs 和 scheduled jobs 也是用 Apex 编写。
一个简单的 trigger 长这样:
trigger Foo on Contact (after insert) {
|
SOQL 查询可以在 Developer Console 中运行或者在内嵌在 Apex 中,比如:
Contact contact = [SELECT Id FROM Contact LIMIT 1]; |
Apex 包含了一个类似 JPA/Hibernate 的访问数据库的语法,有助于方便地在 Apex 中对 SObject 进行增删改查。
一个典型的例子:
Contact c = new Contact(LastName='Bar'); |
Apex 代码支持版本控制、可打包、可测试。Apex Runtime 包含了单元测试,达到 75% 以上覆盖率的代码才能部署到生产环境。这种代码覆盖率的要求有助于保持平台升级的稳定性,因为 Salesforce 通过运行用户编写的测试代码来进行平台升级时的回归测试。
除了编写 Apex 代码外,许多业务流程和规则可以通过 Workflow 等来创建。像 SObject 的元数据一样,workflows 可以通过 web 界面来点击创建,Workflows 也是一组 XML 格式的定义文件,支持版本控制、可打包。
Salesforce.com UI,Salesforce1 手机应用,Apex 运行时,Workflow 引擎都是用来构建企业后台应用,面向和企业员工的交互。而在面向客户的界面上和 Salesforce 进行数据交互,Salesforce1 平台提供了 Heroku 服务,让开发者容易地创建、部署、扩展自定义的 web 应用、移动应用、以及Web/RESTful service。Heroku 应用可以使用任何语言编写(Java、Ruby、Node.js,etc),并部署在一个完全受管的 PaaS 平台上,传统上开发者得自己从头搭建一个运行环境和相应的服务。而在 Heroku 上,像负载均衡、失效转移、集中化日志、持续交付、可扩展性这些功能都是开箱即用的。
集成和 ETL
Salesforce1 平台提供了许多方式和其他系统进行集成或者数据迁移同步。数据集成的主要方法有:
Heroku Connect: 一个高性能 Salesforce 数据的标准 SQL 接口
SOAP APIs: 强数据类型的 web service
REST APIs: 支持 JSON 格式的 web service
Streaming APIs: 事件驱动的消息 service
Data Import & Export: 非常多的工具,向导,以及 web service 提供了对 salesforce 数据的导入导出
电子邮件提醒:Apex 和 Workflow 可以用来从 Salesforce 向用户发送邮件提醒
移动端提醒:移动端提醒是内嵌入 Salesforce1 手机应用的,支持自定义的提醒
OAuth 2.0:Salesforce web service 支持 OAuth 2.0 认证,其他应用可以用 access token 来调用 Salesforce 的 web service
SAML: 支持企业应用间的单点登录
Mobile SDKs: Salesforce 的 Mobile SDK 支持 Native, Hybrid 和 HTML5 的移动应用开发
第三方集成服务提供商:许多平台集成服务提供商像 Informatics,Boomi,Cast Iron,MuleSoft 都有一些开箱即用的解决方案支持和 Salesforce 的集成
平台的生态
围绕 Salesforce1 平台有许多服务、应用、框架、工具库。其中包括:
AppExchange:Salesforce1 平台的应用商店
Data.com:全球的联系人目录
ExactTarget:Marketing Cloud
开源的框架,SDKs,工具库,示例,可见 github @forcedotcom 和 @developerforce
可信赖的平台
作为企业数据和应用的基础,Salesforce1 平台必须是值得信赖的(可以参考:https://trust.salesforce.com)。Salesforce 的许多方面体现了企业系统的可信赖,包括系统正常工作和响应都是公开在网上可查询的,多层的安全机制,隐私和证书服务。
如何开始?
准备进入 Salesforce 吗?最好的方式是自己动手做,Salesforce Developer Workshop(http://ccoenraets.github.io/salesforce-developer-workshop/) 提供了一个简单的教程,帮助新手通过使用来理解平台上的组件。
【Salesforce】入门篇的更多相关文章
- Membership三步曲之入门篇 - Membership基础示例
Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 - Membership基础示例 Membership三步曲之进阶篇 - 深入剖析Pro ...
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- 1. web前端开发分享-css,js入门篇
关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...
- 一个App完成入门篇(七)- 完成发现页面
第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...
- [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界
本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...
- 转:OSGi 入门篇:模块层
OSGi 入门篇:模块层 1 什么是模块化 模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现.但是这种实现与Java本身现有的一些模块化特性又有明显的不同. 本文 ...
- 转:OSGi 入门篇:生命周期层
OSGi 入门篇:生命周期层 前言 生命周期层在OSGi框架中属于模块层上面的一层,它的运作是建立在模块层的功能之上的.生命周期层一个主要的功能就是让你能够从外部管理应用或者建立能够自我管理的应用(或 ...
- 【three.js详解之一】入门篇
[three.js详解之一]入门篇 开场白 webGL可以让我们在canvas上实现3D效果.而three.js是一款webGL框架,由于其易用性被广泛应用.如果你要学习webGL,抛弃那些复杂的 ...
- [Maven]Apache Maven 入门篇
作者:George Ma 上 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法.这个入门篇分上下两篇.本文着重动手,用 ma ...
- Unity3D大风暴之入门篇(海量教学视频版)
智画互动开发团队 编 ISBN 978-7-121-22242-9 2014年2月出版 定价:79.00元 328页 16开 编辑推荐 长达800分钟的高清教学视频,手把手教会初学者 数个开发案例 ...
随机推荐
- js实现文本框支持加减运算的方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/T ...
- delphi字符串分隔函数用法实例
这篇文章主要介绍了delphi字符串分隔函数用法,通过自定义函数SeparateTerms2实现将字符串分割后存入字符串列表的功能,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了delphi ...
- 【转】hr的嘴,骗人的鬼
入职前,从上往下读,入职后,从下往上读. - 我们非常欢迎新鲜血液补充进我们的团队:- 如果条件太苛刻,我待不久的:- 我们公司绝对不可能这样:- 请问每个月的工作都能按时足额发放吗?- 这难道不是理 ...
- js动态改变iframe的高度
js动态改变iframe的高度的写法 〈iframe id="docDetail" width="100%" height="200" ...
- springboot项目自定义注解实现的多数据源切换
一.主要依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spri ...
- 《C语言程序设计》学习笔记(二)
第八章 函数 函数的基本概念 定义:函数由函数名.参数和函数体组成. 函数定义的一般形式: 类型说明符 函数名(形式参数声明) { [说明与定义部分] 语句: } 说明: 1.类型说明符用来说明函数的 ...
- Hanoi II——汉诺塔步数求解进阶问题
在NOJ上遇到关于汉诺塔步数的求解问题 开始读时一脸懵逼,甚至不知道输入的数据是什么意思 题目描述:给出汉诺塔的两个状态,从初始状态移动到目的状态所需要的最少步数 对于初级汉诺塔步数问题,我们可以直接 ...
- 学习笔记:oracle学习一:oracle11g体系结构之物理存储结构
目录 1.物理存储结构 1.1 数据文件 1.2 控制文件 1.3 日志文件 1.3.1 重做日志文件 1.3.2 归档日志文件 1.4 服务器参数文件 1.4.1 查看服务器参数 1.4.2 修改服 ...
- PCL学习(五)如何在mesh模型上sample更多点及三维物体姿态估计
---恢复内容开始--- 最近在做关于物体姿态估计的项目 基本思路就是 我们在估计物体的pose的时候,需要用分割得到的点云与模型库中的模型做匹配 1.通过基于RANSANC的SAC-IA将点云和模型 ...
- 防火墙firewalld报错:ERROR: Exception DBusException: org.freedesktop.DBus.Error.AccessDenied:...
ERROR: Exception DBusException: org.freedesktop.DBus.Error.AccessDenied: Connection ":1.1985&qu ...