You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用C#通过SAP DI API添加营销活动时遇Invalid Activity Type错误

解决SAP DI API创建营销活动时的Invalid Activity Type错误

错误原因分析

你遇到的Invalid Activity Type [OCLG.CntctType]错误,核心问题出在循环内添加业务伙伴的逻辑错误:每次循环中你连续调用了三次oCampaign.CampaignBusinessPartners.Add(),这会创建三个独立的业务伙伴条目:

  • 第一个只设置了BPCode
  • 第二个只设置了CreateActivity
  • 第三个是完全空的条目

这种错误的条目构造方式会导致SAP系统在处理时,尝试读取未正确初始化的活动类型相关字段,从而抛出错误。

修复后的代码

将循环内的逻辑修改为每次创建一个完整的业务伙伴条目,再添加到集合中:

public bool CreateCampaign()
{
    try
    {
        System.Data.DataTable dtdiz;
        SapSDK.SAP_DI.Queries.GetSQLRes("exec [dbo].[Getcards] ".ToString(), out dtdiz);
        if (dtdiz.Rows.Count == 0)
        {
            CustomLog.MyLogger.error("exec [dbo].[Getcards]  : dtdiz not found");
            return false;
        }
        SAPbobsCOM.CampaignsService oCampaignService = SapSDK.SapCon.getInstance.oCompany.GetCompanyService().GetBusinessService(SAPbobsCOM.ServiceTypes.CampaignsService);
        SAPbobsCOM.Campaign oCampaign = oCampaignService.GetDataInterface(SAPbobsCOM.CampaignsServiceDataInterfaces.csCampaign);
        SAPbobsCOM.CampaignParams oCampaignParams = (SAPbobsCOM.CampaignParams)oCampaignService.GetDataInterface(SAPbobsCOM.CampaignsServiceDataInterfaces.csCampaignParams);
        
        oCampaign.TargetGroupType = SAPbobsCOM.TargetGroupTypeEnum.tgtCustomer;
        oCampaign.StartDate = DateTime.Today;
        oCampaign.FinishDate = DateTime.Today.AddYears(1);
        oCampaign.Remarks = "This is a test for Campaign";
        oCampaign.CampaignName = "TEST Campaign 111";
        
        for (int i = 0; i < dtdiz.Rows.Count; i++)
        {
            // 创建单个业务伙伴条目,一次性设置所有必要属性
            SAPbobsCOM.CampaignBusinessPartner bpEntry = oCampaign.CampaignBusinessPartners.Add();
            bpEntry.BPCode = dtdiz.Rows[i][0].ToString();
            bpEntry.CreateActivity = SAPbobsCOM.BoYesNoEnum.tNO;
        }

        //oCampaign.CampaignItems.Add().ItemCode = "A00001";
        //  oCampaign.AttachementsEntry = 2; // AbsEntry from the OATC Table
        oCampaignService.Add(oCampaign);
        return true;
    }
    catch (Exception ex) 
    {
        CustomLog.MyLogger.error(ex);
        return false;
    }
}

额外检查项

  • 确认Getcards存储过程返回的BPCode都是有效的客户类型(因为你设置了TargetGroupType = tgtCustomer),如果包含供应商或其他类型BP,需要调整目标组类型。
  • 若后续需要为BP创建活动(CreateActivity = tYES),则必须额外设置ActivityType字段,指定有效的活动类型代码(可从SAP的活动类型配置中获取)。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:57:20