Marketing Cloud模板邮件预览报错求助(ContentBlockByID异常)
问题描述
在Marketing Cloud创建「模板式邮件」时,预览环节触发报错,错误信息如下:
The subscriber preview failed to generate. Review the details, correct all issues, and try again.
An error occurred when attempting to evaluate a ContentBlockByID function call. Function Call: ContentBlockbyID("38330") See inner exception for details.
ID:38330对应头部模板,该模板已在现有模板邮件中正常使用,但新建邮件预览时触发此错误。头部模板的AMPscript代码如下:
%%[ var @DE_TermsManagement set @DE_TermsManagement = "DEV_DE_CashBack_TermsManagement" var @DE_OperationMaster set @DE_OperationMaster = "DEV_DE_CashBack_OperationMaster" var @DE_AMPErrorLog set @DE_AMPErrorLog = "DEV_DE_MCConnect_AMPscript_ErrorLog" var @SearchWord_SmartRescue set @SearchWord_SmartRescue = "○○詳細" var @Now set @Now = DateAdd(Now(), 15, "H") var @ErrorFlag set @ErrorFlag = 0 var @OperationName set @OperationName = Lookup(@DE_OperationMaster, "OperationName", "Media", "MAIL", "SendContent", emailname_) var @TermsURL_CashBack var @TermsURL_SmartRescue set @TermsURL_CashBack = Lookup(@DE_TermsManagement, "URL", "規約分類", "CB", "規約パターン", ▽▽▽) set @TermsURL_SmartRescue = Lookup(@DE_TermsManagement, "URL", "規約分類", "OP", "規約パターン", @SearchWord_SmartRescue) /* 【処理:データ取得に関するエラーチェック】 */ if Empty(@OperationName) then set @ErrorFlag = 1 endif if Empty(@TermsURL_CashBack) then set @ErrorFlag = 1 endif /* 【処理:送信中止】 */ /* □エラーチェックが失敗した場合、意図的にエラーを起こす */ if @ErrorFlag != 0 then InsertDE(@DE_AMPErrorLog,,,,,, @OperationName) RaiseError("エラーが発生した為、プレビュー及び送信を中止します。", True) endif ]%%
解决对策
1. 修复AMPscript占位符问题
代码中set @TermsURL_CashBack = Lookup(..., "規約パターン", ▽▽▽)里的▽▽▽是未替换的占位符,会直接导致Lookup函数执行失败,触发RaiseError,进而让ContentBlockByID调用报错(内容块内AMPscript执行出错)。
- 将
▽▽▽替换为实际的变量或固定值,比如对应的数据列值或预设规则标识。
2. 验证预览时的emailname_变量
@OperationName = Lookup(@DE_OperationMaster, ..., "SendContent", emailname_)中,预览模式下emailname_可能为空或与现有邮件的emailname_值不同,导致Lookup返回空值,触发ErrorFlag=1后执行RaiseError。
- 预览时手动指定
emailname_测试值,比如在代码开头添加set emailname_ = "测试邮件名称"(测试后删除),验证Lookup是否能正常返回值。 - 检查
DEV_DE_CashBack_OperationMaster数据扩展,确认存在对应新建邮件emailname_的记录。
3. 检查内容块权限与引用
虽然内容块38330在现有邮件中可用,但新建邮件可能存在权限或引用问题:
- 确认新建邮件所在文件夹与内容块38330的文件夹权限一致,确保当前用户能访问该内容块。
- 尝试重新插入内容块38330到新建邮件中,避免引用路径出错。
4. 修正错误日志写入逻辑
当前代码中InsertDE(@DE_AMPErrorLog,,,,,, @OperationName)参数格式错误,InsertDE需要按顺序指定列名和对应值,否则无法正确写入错误日志,难以排查具体错误原因。
- 修正为标准格式,比如
InsertDE(@DE_AMPErrorLog, "OperationName", @OperationName, "ErrorTime", @Now),方便查看是哪个Lookup操作失败导致的错误。
临时替代方案
如果紧急需要创建邮件,可临时注释错误检查和RaiseError部分,先完成邮件创建,后续再调试:
%%[ var @DE_TermsManagement set @DE_TermsManagement = "DEV_DE_CashBack_TermsManagement" var @DE_OperationMaster set @DE_OperationMaster = "DEV_DE_CashBack_OperationMaster" var @DE_AMPErrorLog set @DE_AMPErrorLog = "DEV_DE_MCConnect_AMPscript_ErrorLog" var @SearchWord_SmartRescue set @SearchWord_SmartRescue = "○○詳細" var @Now set @Now = DateAdd(Now(), 15, "H") var @ErrorFlag set @ErrorFlag = 0 var @OperationName set @OperationName = Lookup(@DE_OperationMaster, "OperationName", "Media", "MAIL", "SendContent", emailname_) var @TermsURL_CashBack var @TermsURL_SmartRescue // 临时替换占位符为测试值 set @TermsURL_CashBack = Lookup(@DE_TermsManagement, "URL", "規約分類", "CB", "規約パターン", "测试规则标识") set @TermsURL_SmartRescue = Lookup(@DE_TermsManagement, "URL", "規約分類", "OP", "規約パターン", @SearchWord_SmartRescue) /* 【処理:データ取得に関するエラーチェック】 */ if Empty(@OperationName) then set @ErrorFlag = 1 endif if Empty(@TermsURL_CashBack) then set @ErrorFlag = 1 endif /* 【処理:送信中止】 */ /* □エラーチェックが失敗した場合、意図的にエラーを起こす */ /* if @ErrorFlag != 0 then InsertDE(@DE_AMPErrorLog, "OperationName", @OperationName, "ErrorTime", @Now) RaiseError("エラーが発生した為、プレビュー及び送信を中止します。", True) endif */ ]%%
内容的提问来源于stack exchange,提问作者LEON.jp

