You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CRM机会创建后插件开发求助:获取数据并保存接口返回ID

搞定CRM Post Operation Opportunity Create Plugin的两个核心需求

嘿,我来帮你解决剩下的两个关键问题:获取潜在客户名称,以及把Web服务返回的ID存到商机备注里。结合你已经完成的Web服务调用逻辑,咱们一步步来实现:

1. 获取你需要的潜在客户名称

首先得明确:你说的“潜在客户”是指商机(Opportunity)自身的名称,还是和商机关联的潜在客户(Lead)名称?两种情况的实现方式略有不同,我都给你列出来:

方式一:直接获取商机自身的名称

在Post Operation阶段,插件上下文的OutputParameters["Target"]里已经是创建完成的完整商机实体,直接读取name字段就行:

// 从服务提供者获取插件上下文
IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
// 拿到创建好的商机实体
Entity opportunity = (Entity)context.OutputParameters["Target"];
// 获取商机名称
string oppName = opportunity.GetAttributeValue<string>("name");

方式二:获取关联的潜在客户(Lead)名称

如果你的商机是从潜在客户转化来的,关联了Lead记录,那需要先读取商机的leadid关联字段,再查询Lead的名称:

// 接上面的代码,先判断商机是否关联了Lead
if (opportunity.Contains("leadid"))
{
    EntityReference leadRef = opportunity.GetAttributeValue<EntityReference>("leadid");
    // 获取组织服务实例
    IOrganizationService service = (IOrganizationService)serviceProvider.GetService(typeof(IOrganizationService));
    // 查询Lead的全名(fullname字段)
    Entity lead = service.Retrieve(leadRef.LogicalName, leadRef.Id, new ColumnSet("fullname"));
    string leadName = lead.GetAttributeValue<string>("fullname");
    // 现在leadName就是你要的潜在客户名称啦
}

小贴士:如果商机关联的是联系人(Contact),把leadid换成contactidfullname字段是通用的,不用改。

2. 把Web服务返回的ID保存到商机备注里

CRM里的“备注”对应的是annotation实体,咱们只需要创建一条新的Annotation记录,关联到当前商机,再把返回的ID填进去就行:

具体代码实现

假设你的Web服务返回的ID是string externalDbId = "WS-12345";(替换成你实际的返回值),代码如下:

// 接上面的service实例
Entity annotation = new Entity("annotation");
// 设置备注关联的商机
annotation["objectid"] = new EntityReference(opportunity.LogicalName, opportunity.Id);
annotation["objecttypecode"] = opportunity.LogicalName;
// 设置备注的标题和内容
annotation["subject"] = "自有数据库关联ID";
annotation["notetext"] = $"Web服务返回的数据库ID:{externalDbId}";
// 把备注保存到CRM
service.Create(annotation);

备选方案:保存到商机的自定义字段

如果你不想用备注,而是想把ID存到商机的自定义字段里(比如你新建了new_externaldatabaseid字段),可以直接更新商机实体:

Entity updateOpportunity = new Entity("opportunity", opportunity.Id);
updateOpportunity["new_externaldatabaseid"] = externalDbId;
service.Update(updateOpportunity);

整合到你的现有插件里

把上面的代码和你已经写好的Web服务调用逻辑整合起来,完整流程就是:

  1. 从插件上下文获取创建完成的商机实体
  2. 按需获取商机名称/关联潜在客户名称
  3. 调用Web服务把名称插入自有数据库,拿到返回的ID
  4. 创建备注(或更新自定义字段)保存这个ID

测试时要注意的点

  • 确保插件的执行账号有足够权限:读取Lead/Contact、创建Annotation、更新Opportunity的权限都得有
  • 因为是Post Operation阶段,商机已经完全创建,不用担心拿不到完整数据
  • 调试的时候可以开启CRM的插件追踪,方便排查报错

内容的提问来源于stack exchange,提问作者user3063952

火山引擎 最新活动