热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Salesforce中实施CampaignInfluence模型注意事项

【前言】:在19年8月份的时候,为地产行业客户实施了一套简要的CampaignInfluence模型,目的是帮助房产公司市场部同事了解什么类型的Campaign有助于产生新的商机,

前言】:在19年8月份的时候,为地产行业客户实施了一套简要的Campaign Influence模型,目的是帮助房产公司市场部同事了解什么类型的Campaign有助于产生新的商机,及最终成单(即了解客户成功购买归因,通过哪些市场活动触点最终进入销售关键节点),并最终计算ROI (Return On Investment)。项目落地后的一段时间工作重心放在了金融行业客户上,到21年回归地产项目数月后,在调查代码覆盖问题,及影响范围和程度时,偶然看到了相关代码的变动,因此重新测试发现确实存在一些亟待解决的问题。

模型简述】:

模型要素:这个模型涉及到4个要素
#1. Campaign Influence Model
#2. Contact
#3. Campaign
#4. Opportunity

从数据模型角度理解如下图(1)所示:

从画面角度理解如下图(2, 3)所示:

现存问题】:在下图(4)的Campaign Detail页面上,我们发现Opportunities in Campaign数量为1而实际根据4个要素,压根没找到对应数据。

问题归因】:

在Org迁移的时候,担当同学忘记在新Org配置自定义Campaign Influence Model,因此该业务模块中的数据是按照Salesforce初始化的标准Model处理数据的。

使用标准Model时,即便删除了图(3)中的Opportunity上的Primary Campaign Source,这时系统自动移除了图(2)中Camapign底下的Influenced Opportunities,但是图(3)中的Opportunity的Campaign Influence并未自动移除,而图(4)中的INFULENCED OPPORTUNITIES查询的是CampaignInfluence表,因此因并未移除造成rollup INFLUENCED OPPORTUNITIES值时,图(4)中的Opportunities in Campaign显示为1 -> 与事实不符。

最终,要让SF标准行为符合预期(清除primary campaign on opp -> 删除CampaignInfluence表记录),只需要创建自定义的Model即可,如下图(5)所示:

关于使用Model的一些考虑】:Implement Custom Campaign Influence Models with Apex Triggers

Considerations for Implementing Custom Campaign Influence Models

Note that the Primary Campaign Source model’s influence records are recalculated when any of these events occur.

Changing any Customizable Campaign Influence settingUpdating an opportunity’s Close DateAdding or removing members from campaignsDeleting or undeleting accounts or opportunities

During such a recalculation, some existing campaign influence records for the Primary Campaign Source model may be deleted and re-created. Because the approach described here creates records for your custom model whenever Primary Campaign Source records are created, it’s possible that duplicate influence records can be created against your custom model.

To avoid this duplicate record creation, include validation checks in your own Apex code to make sure you're not inserting a record with the same modelId + opptyId + campaignId + contactId into the same model. If you find that a record already exists, perform an update operation on the record instead.

 


推荐阅读
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 全面介绍Windows内存管理机制及C++内存分配实例(四):内存映射文件
    本文旨在全面介绍Windows内存管理机制及C++内存分配实例中的内存映射文件。通过对内存映射文件的使用场合和与虚拟内存的区别进行解析,帮助读者更好地理解操作系统的内存管理机制。同时,本文还提供了相关章节的链接,方便读者深入学习Windows内存管理及C++内存分配实例的其他内容。 ... [详细]
  • mysql触发器怎么写
    数据库|mysql教程mysql数据库-mysql教程触发器是与MySQL数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
author-avatar
WingKeii-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有