SalesForce Platform App Builder 复习笔记

概要

网上找不到其他好的复习笔记,自己按照考纲做一个,查缺补漏, 如需转载请表明出处


要点分解

SalesForce 基础 (8%)

1. 理解SalesForce 核心对象

a.个人账户: use space in both account and contact objects; 只能和其他个人账户整合;默认不被激活;跟商业账户使用不同的图标


2.判断一个场景适用设置型定制或者开发型定制

3.常见的适用AppExchange的场景


数据模型(20%)

1. 确认适合数据模型

a. Master-Details

主题与细节对象的行为规则:

一、删除细节对象,细节对象会进入回收站但对主体对象没有影响;删除主体对象,细节和子细节对象会一并删除。从回收站恢复主体对象,细节和子细节对象一并恢复。如果先删细节对象,再删主体对象,恢复主体对象时不会恢复细节对象。

二、对象默认不可以更改主体对象,但是对于自定义对象的master-detail relationship,管理员可以激活allow reparenting 选项来允许自定义对象改变管理的主体对象

三、细节和子细节对象没有所有人字段,它们会由主体的所有人字段决定。自定义的细节对象不能够进行分享,手动分享或者队列,因为这些需要所有人字段。

四,细节和子细节对象继承主体细节的安全设定和权限,不能单独地给细节对象创建权限

五,在细节和子细节对象的页面布局里,master-detail关系是必须的,主体对象可以是标准对象或者自定义对象

六,从最佳实践的角度触发,master-detail最好不要有超过1万条的细节对象记录

七,每一个自定义对象最多可以有两个master-detail关系,总共最多可以有25条关系

八,关联的对象在关系保存后无法修改

b. many to many: 可以使用master-detail关系去在任意两个对象之间建立多对多的关系

c. look up:不支持sharing或者roll-up summary,对象可以与自己相关联

在设定look up 关系的时候有2种选项:

一,设置look up 关系为必须,那么在对应的页面布局里也有设置其为必须的字段

二,设置look up关系为可选,需要从以下三种行为里面选择一种作为look up关联对象被删除的时候的表现:

1⃣️清除这个字段的值

2⃣️不允许这个look up关联对象被删除,这种模式在关联对象被用于workflow rule的时候可以限制其被随意的删除

3⃣️同时删除这个对象,这个只有在该对象为自定义对象的时候被允许,而被删除的look up关联对象则可以是标准或者自定义对象。这种删除方法又被称为级联删除,这种删除方式可以绕过安全和共享设定,让没有权限的人删除掉被级联的目标对象记录。为了防止误删,这种方式默认是禁止的,必须联系Salesforce才能够开通这种功能,而且这种功能不能作用于business hour, community,lead,price book,product或者用户对象

look up 关系中,parent对象被删除并不会被记录在child对象的filed tracking history中

当look up关系有超过10万条记录的时候,look up关系不能直接删除,必须先将记录的数目减少到可以操作的数目

External lookup:parent对象为外部对象,子对象为外部/标准/自定义对象。parent对象的external ID字段必须与子对象外部lookup关系字段相符

Indirect lookup:parent对象为标准/自定义对抗,子对象为外部对象。你可以在parent对象上定义一个唯一的external id字段并让其与自对象的indirect lookup 关系字段相匹配

d.级别关系,仅适用于用户对象,可以让任意的用户记录关联起来

2. 描述不同关系所具有的能力以及其对于数据接入,用户界面和报告的影响

a.自定义对象的tab图标会被在关联列表上显示,如果tab设定存在的话

b.要定义多层的master detail关系,用户必须有“customize application”的权限

c.默认情况下,子对象记录不能重新关联到其他parent对象记录,但对于自定义对象,管理员可以在设置master-detail关系的时候选择“allow reparenting”选项来允许自定义子对象记录重新关联到其他parent对象记录

d.你可以有最多3层的自定义子对象

e.标准对象不能是自定义对象的子对象

f.你不能定义master-detail关系,如果自定义对象(detail)已经有数据,但是你可以先建立look up关系,然后再将其转化成master-detail关系(只要每个记录都有对应的字段数据)

g. 子细节对象的数据不能直接roll up到parent对象,必须先roll up到细节对象再进行汇总

h.多重master-detail关系可以被用于报表,在创建自定义对象的时候必须勾选allow report选项

i.junction对象不能成为master-detail关系中的parent对象

j.你不可以删除作为master的自定义对象,但是你可以删除作为detail的自定义对象,注意这会导致master-detail关系被转化成look up 关系

3.改变字段类型会造成的影响

master-detail -> look up:只有没有roll-up summary字段

look up->master detail:所有记录的look up字段必须都有值

以下情况会导致数据丢失:

涉及日期/时间/列表/多选项列表的转化,转化成数字/百分比/货币,从单选框转化成其他类型。从Auto number转化成其他类型。从文本转换成列表。

列表转换成多选列表是数据可以保存,如果数据中含有多选列表里没有的选项,这些选项会从记录中删除。

只有从Text转化成Auto Number时数据不会丢失,其他类型数据转化成Auto Number都会丢失数据。

在转化Text Area(Long)的时候,只有转化成Email/Phone/Text/TextArea/URL这几种类型数据,只有前255character可以保留

数据丢失的时候,基于自定义字段的list view会被删除,这也可能会影响到assignment和escalation rule

lead转化时候映射的字段是不可以改变其数据类型的

对于external ID只能选择text,email或者number类型,不然该字段不会再作为external ID

不能将自定义字段转化成加密字段,反之亦然

In Salesforce Knowledge article types, the file field type can't be converted into other data types.

如果一个自定义字段被 Visualforce pages, Apex code, Process Builder, or flows引用,那么就不能改变其字段类型

改变自定义字段类型会同时改变多条数据,这个改变要求会被放到队列里,完成时用户会收到电子邮件通知。

在改变数据类型之前,确保该字段没有被workflow所引用,或者新的类型会导致field update formula失效

Auto Number 〈-〉 Text 不能超过30个字

Formula 不能转换成其他类型,反之亦然

Picklist可以转换成Checkbox, 可以指定某几个值影射成check/uncheck

你只能对外部对象的关系转换成非关系字段

将自定义对象的master detail转换成look up关系,这个对象的organisation-wide default 自动更新为Public Read/Write.而从lookup转换成master detail的时候,organisation-wide default会由parent对象控制

text area (reach) 只能转换成 text area(long),任何图片和mark up 会在下次保存数据的时候被删除

4.对指定的需求赋予适合的字段类型

https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/field_types.htm

5.理解schema builder的功能和使用方式

a. schema builder: 把对象放在Canvas

b.对象,Fields在Element Tab

https://trailhead.salesforce.com/en/modules/data_modeling/units/schema_builder

6.理解用于数据导入和导出的工具选项和注意事项

a.数据导入

Data Import Wizard:common standard objects and custom object, 不超过5万条记录,导入不能自动化, unmapped fields are not imported into Salesforce

Data Loader: 不超过5百万记录,任意数据,无论从文件还是数据库连接,可以用图形界面也可以用命令行,使用于周期性的数据导入

超过5百万记录,建议找Salesforce合作商或者在AppExchange上找到合适的产品

Picklist/Multi-Select Picklist在导入的时候有新的值,对于unrestricted picklist,那么Data Import Wizard会使用新的值,否则,Data Import Wizard将使用这个列表的默认值,多选列表每个选项之间必须用分号隔开

Checkbox:1表示已选 0表示未选

列表,多选列表和check box,如果在Data Import Wizard没有进行映射,那么默认值会被自动插入到这些新的或者被更新的记录

Date/Time Fields的格式必须和用户的locale设定想匹配

Formula Fields不接受数据导入

b.数据导出

Data Export Wizard (in-browser):可以自动或者手动地导出数据,可以选择每星期或者每个月

Data Loader:CLI可以用来自动化导出数据

7.外部对象的功能和使用案例

a.必须使用"validate and sync"使数据同步到salesforce

b. 必须勾选"include in Salesforce searches"选项才可以在Salesforce里搜索外部对象

c. 外部对象可以定义的关系:external lookup, indirect lookup,lookup


3种外部对象支持的关系

d. File Connect Adapters: 支持google drive, box, sharepoint online, onedrive for business


安全 (10%)

1.如何限制或者延伸对象,记录和字段级别的访问

With profiles only you can enable/disable object/field/tabs permission and permission set can provide additional permissions. Roles, sharing rules and manual sharing overrides the organization wide default.

2.对指定的需求配置适当的共享方案


业务逻辑和自动化处理 (27%)

1. record type的功能和使用案例

a. 创建步骤:

Step 1: Manage master picklists.

Step 2: Create record types,此步骤包含指定master picklist里面特定的值给对应的record types;

Step 3: Add record types to profiles,此步骤还包含给每个profile赋予相同或者不同的page layout

Step 4: Set personal options for record types,允许用户在创建记录的时候设置默认的record type,这样可以避免每次创建记录的时候都要用户作出选择

提示: 重命名 a record type 不会改变列表所包含的选项

当用户转化一个lead的时候,创建的新的账户,联系人和机遇会自动使用记录所有人默认的record type;当用户克隆一个记录的时候,新的副本记录会和原本记录的record type一样,除非用户没有权限创建这种类型的record type。如果是这种情况,副本记录会使用用户默认的record type。

一个用户可以看到的公式字段可能是基于隐藏或者只读字段的。如果这个公式字段涉及敏感信息,需要用字段安全级别去隐藏。

2. formula field的功能和使用案例

a. Formula field可以引用parent对象的字段,formula field可以用来动态显示图像,

3. roll-up summary的功能,使用案例和考虑事项

a.需要master-detail关系

b.一旦创建,不能修改所选的细节对象或者删除任何被引用的字段

c.不在编辑页面显示,可以用于设置验证规则,验证错误信息可以现实在master/detail记录

d.需要实时确定赋值的函数都不能在roll-up summary字段里面使用,比如current user, current date

4. validation rule的功能和使用案例

a. 验证规则是在数据存入之前出发检验的

b.使用案例:非空字段必须为数字,日期必须是今年的某一天,输入的数字在指定范围内,文本最后4位在指定的防伪内,账号的账单国家使用iso标准

5. approval processes的功能和使用案例

步骤:

a. 创建电子邮件模板

b.创建审批流程(选择判断对象,选择是否采用快捷创建 - 需要命名、审批流程采用的电子邮件模板,设置触发条件/Entry Criteria、选择审批者

c.设置批准和驳回所需要采取的动作

注意:使用process builder 来触发approval process可以确保审批流程不被跳过

6. workflow,visual workflow,process builder的功能和使用案例

a. process builder 用于创建简单的流程,可以向外部系统发送事件消息。process builder 可以被其他业务流程使用的流程叫做invoiceable process。

Salesforce 官网推荐使用process builder去应对后台自动触发的流程。触发的时机可以是某一个字段更新,接受到某一个系统信息,或者指定的时间或着经历了指定的时间长度。同时,Salesforce不建议新学者使用workflow因为新的后台自动化功能只会从另外两种工具里更新。

Process builder允许里控制流程的执行顺序。

Process builder可以执行的动作:创建记录;更新流程的核心对象及其相关对象的记录;将核心对象提交审批;更新一条或多条相关记录;使用指定的电子邮件模板发送电子邮件;在某个chatter feed里发帖。

Process builder可以创建3中不同类型的流程:一、Record change - 当记录创建或者修改的时候触发;二、invoiceable - 可以被其他流程调用;三、platform event - 接收到系统事件时触发。

Process builder的局限:不能发帖,不能提交一个相关记录用于审批,不能删除记录,创建多个相互关联的记录,处理复杂逻辑。

b. visual workflow (cloud flow designer)用于较为复杂的商业流程。

cloud flow designer允许管理员使用现成的页面控件或者定制的lightining组件来创建所需的流程页面。不仅可以向外部系统发送事件消息,还可以通过External services向第三方检索信息

cloud flow designer里面可以重用的流程叫做次流程(sub flow)。

如果目标流程要求用户提供讯息,那么cloud flow designer是所需的自动化工具。

Cloud flow designer里面无法定义触发条件,它需要被一个流程或者apex trigger所触发。

如果流程要求手动触发,那么使用cloud flow designer设计流程,然后通过定制的按钮或者连接将流程附加到指定的页面上。

c. workflow只能更新parent对象而process builder可以更新任何相关或者非相关的对象;只有在需要发送外部消息的时候workflow优先于process builder

7.根据需求给出自动化处理的方案(参考6里的知识要点)

8.更新字段的具体细节(https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_triggers_order_of_execution.htm)


社交(3%)

1.社交功能及其使用案例

要点

1. 用户需要有社交账号才能看到社交网站的信息

2. 用户必须登陆他们自己的社交账号才能看到关于账户和联系人的社交信息

3.社交信息会在搜索一个或多个社交网络并指定要关联的社交档案后被导入账户和联系人记录上

4. 社交信息不会自动导入到账户和联系人记录上

5. 支持Facebook, Twitter, Youtube and Klout, 不再支持linkedin, lightning experience和salesforce app只支持twitter

6.激活Chatter的时候,如果你的公司Chatter用户少于16人,那么所有用户自动关注彼此还有最多25条最近使用的记录;如果你的公司有不少于16Chatter用户,他们会自动关注25条最近使用过的记录和多达25个公司内的用户,包括他们的经历,他经理的下属,他自己的下属,客户和机遇小组里的成员。

7. Post在个人页面的帖子不会触发电子邮件推送,因此不能确认跟进情况

8. Action的种类:

a. standard actions: 当chatter被激活的时候自动添加,可以修改他们的排列顺序但是不能修改这些动作的属性

b. nonstandard actions:可以调制的动作

c. default actions: Salesforce预先设置好的动作,需要添加需要的用户到对应的publisher layout

d.mobile smart actions: 和default actions一样预先设置好的动作,并且支持相同的对象范围

e. custom actions: 触发Lightning组件, Visualforce页面或者canvas应用。比如创建一个动作用来支持用户超过5千字的评论

f. productivity actions: Salesforce预先设置好的动作, 只支持特定的对象,不可修改或者删除

9. Approval in Chatter 的步骤:

a. 在chatter setting选择Allow Approval

b.设置审批帖子的模板

c.设置审批程序

d.确认对应的对象已经激活chatter feed tracking

10. 开通chatter最好的时间是after hour以减小对业务的干扰

11.Profile-Based Rollout Overview (分步部署Chatter)

From a high-level perspective, a profile-based rollout of Chatter consists of these steps:

You contact Salesforce, and ask us to enable a profile-based rollout of Chatter for your organization.

You determine which users should and shouldn’t have access to Chatter.

You review and modify existing custom user profiles and permissions sets. For example, verify that the Enable Chatter permission in a custom user profile or permission set has the desired setting.

You turn on Chatter for your organization.


用户界面(14%)

1. 用户界面定制选项

a.home page 不能使用record type

b.highlight panel由compact layout决定

c. Actions:可以放置在hightlights panel, Activity tab以及Chatter tab,不是所有的actions都支持lightning experience

d. Lightning Experince支持Blank Spaces, Canvas Apps

e. Custom Links可以在Details tab可以显示

2. 定制按钮,连接和动作的功能和使用案例

a. Actions display in the Global Action menu in the header (global publisher layout), on related lists, and on list view items as well as server places on a record page depends on the action's type.

b. Global Actions menu does not support the standard Chatter actions Post, File, Poll, Link, Question and Thanks

c. Object specific actions does not appear in the Global Actions menu.

d. Except for the Task object, only standard button actions are supported on list view items. Items in Tasks list views contain the full list of actions available for tasks.

e.Actions on home page shows on recommendations in the assistant

f. Actions on chatter page contain only standard actions, which can be managed via global publisher layout.

g. Actions on record page: The actions in the page-level action menu are a combination of the quick actions, productivity actions, and standard buttons. These actions appear in the order that they’re listed on the page layout. Although they’re quick actions, New Event and New Task don’t show up here.

3.在应用中设置lightning component选项的几种方案

4.根据需求选定适合的用户界面设计

报告

1. 说明常见报告时可以选用的功能,报告类型和仪表盘

报表类型概览


报表可以使用的筛选功能概览

移动

1.如何配置salesforce移动应用的使用界面

2. 根据需求,选择全局或者指定对象可用动作以及动作布局用以优化移动用户体验



应用开发  (8%)

1.描述主要的里程碑和管理应用生存周期的考虑事项

a. Plan (需求收集和分析,产品经理主导)-> Build(管理员和开发人员主导) -> Test (单元测试,功能测试和用户体验测试) -> Deploy (发布经理主导)

b. 变革管理框架的3部分: 1. Centre of Excellent; 2. Release management; 3. Design standard.

c. Release的3个级别:Daily (Bug修复和不需要正式发布管理的简单变革包括报表,面板,列表试图,电子邮件模板和用户管理),Minor(影响力有限的变化,需要测试但是需要的培训和变革管理有限,发布周期在几个星期以内),Major(重大影响的变革,包含设置改变和代码更新以及一个或者多个依赖关系。因为这种变革对用户体验和数据质量有重大影响,需要彻底的测试,培训和变革管理。这种发布往往以季度为周期)。对于minor和major的发布,最好固定在一个星期的某一天,并且避开节假日和其他重大活动。

d.两个开发人员的代码合并到QA环境里做质量检控然后推送到UAT环境力做用户测试,然后推送到预发布环境等待最后推送到生产环境中。

没有版本控制软件的环境示意图

e. 版本测试软件(比如git)可以合并多个开发人员更新的代码,可以进行针对性的测试并把正在开发的部分进行隔离。然后把一个测试发布部署到预发布环境里,如果成功,则推送到生产环境。

有版本控制软件的发布环境

2. 描述不同沙盒之间的差异和考虑事项

不同版本沙盒概览
不同版本沙盒的使用方式概览

3. 描述change sets的功能和考虑事项

a.特点:一、用点击方式完成部署;二、唯一不需要使用本地文件管理系统的部署方式;三、能够识别部署的依赖性组件,比如自定义字段依存于自定义对象;四、一次定义多次部署。

b.部署4步骤:一、在要发布的组织授权部署连接 (Production Org-> Setup -> Deployment Settings -> Specific Sandbox Org -> Allow Inbound Change; 二、创建并上传outbound change set (Sandbox Org-> Setup -> Outbound Change Sets-> New -> 给新的change set命名并保存->添加修改的组件-> 查看/添加依赖组件->点击上传并选择目标org (production org)->上传完成后有邮件通知;三、在production org验证inbound change sets: Production org -> Setup -> Inbound Change Sets -> specific inbound change set -> validate->view results;四、发布:Production org->Setup -> Inbound Change Sets -> Change Sets Awaiting Deployment list->specific inbound change set->Deploy (如果发布不成功则所有变化回滚,如果发布成功,则所有变化无法回滚)

c. change sets只包括你从setup菜单上进行的配置改变,并不不含记录数据。

d.change sets connection在目标org维护的时候并不可用,此时你只能在sandbox org里创建outbound change sets而不能进行上传

e.如果一个org没有沙盒,那么在deployment connection页面上就会显示Insufficient Privileges 错误

f.在验证和发布的时候发生错误时,发布过程不会自动重启,要确保你的org没有被所或者进入维护,不然你的org将无法访问。

g.用户名在复制到不同环境的时候会自动生成环境相关的后缀名,但是在change sets里面这种变化将会被无视

h. change sets最佳实践:一、部署所有依赖性部件;二、在outbound change sets里面包含用户的权限和访问设定(profile and permission sets);三、已经上传的change sets无法修改,但是给以将其克隆在增添额外的组件;四、用不同的命名区分global publisher layouts 和 Outlook publisher layouts 因为在change set里面不显示layout的类型;五、源org在验证outbound change sets的时候以及目标org在部署inbound change sets的时候会被锁定,锁定期间可以读写数据但是不能修改设定。因此部署要避开系统维护窗口。六、部署前一定要验证;七、上传的outbound change set或者部署的inbound change set的一个组件细节可以用XML的形式展示;八、限制change set一次不超过1万个文件,如果超过,考虑将邮件模板、报表和现实版的change sets独立出来,因为他们一般依赖性最少;九,不能用change set删除或者重命名组件,删除必须通过目标org的网页借口,重命名则实际为先删除在重新上传;在change sets里面包含字段类型更改一般要耗时更长,通常考虑在目标org手动更改字段数据类型;十,规划在目标org进行测试,all local Apex tests in that org are run by default if you’re deploying any Apex classes or triggers. If the target org is a sandbox, however, tests aren’t automatically run.

i. change set适用场景:从沙盒到生产场景的直接迁移;无需本地文件系统的改革管理;审核之前部署的变革;强制数据迁移的途径;部署相同的组件到不同的orgs

j.change set的限制:只能在沙盒和生产环境之前迁移,不同生产环境之间不可以;不能删除组件,只能手动删除;基于云,不易与版本控制软件联用

4. 描述使用托管packages的使用案例和考虑事项

非托管和托管包的区别

5.按照需求场景决定合适的部署计划


参考

1. 考纲:学习指南

2. 外部对象开发指南

3. Triggers and Order of Execution

4. SalesForce数据安全

5.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容