我希望你们中的一个能够帮助我解决这个脚本问题
在我的一个相关性中,我有一个像这样保存的参数……
C_RegionValue = “N/A”
但是,当我需要将此值替换为我的一个URL时,N / A需要更改为N%2FA 因此,我通过以下方式完成此任务:
if ( (strcmp("N/A", lr_eval_string("{C_RegionValue}"))) == 0){
lr_save_string("N%2FA", "C_RegionValue");
}
这正常工作
do_create_RegionString.c(16): Notify: Saving Parameter "C_RegionValue = N/A".
do_create_RegionString.c(18): Notify: Parameter Substitution: parameter "C_RegionValue" = "N/A"
do_create_RegionString.c(19): Notify: Saving Parameter "C_RegionValue = N%2FA".
我甚至可以在后续调用中再次使用该新参数
lr_param_sprintf("temp_RString", "&vs_geoType_%d=Region&vs_geo_%d=%s", i, i,
lr_eval_string("{C_RegionValue}"));
do_create_RegionString.c(23): Notify: Parameter Substitution: parameter "C_RegionValue" = "N%2FA"
do_create_RegionString.c(23): Notify: Saving Parameter "temp_RString = &vs_geoType_6=Region&vs_geo_6=N%2FA".
但是由于某些原因,我无法在此通话中使用它
lr_param_sprintf(lr_eval_string("{RegionString}"), lr_eval_string("{P_RGet_TmpVal}{temp_RString}"));
没有错误,它永远不会保存新值,它会正确替换所有内容,但永远不会保存该值。 我知道这段代码可以正常工作,因为它在调用之前已经执行了5次。
do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "RegionString" = "PickAnyRegion_XL"
do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "P_RGet_TmpVal" = "&vs_geoType_0=Region&vs_geo_0=Global (All Regions)&vs_geoType_1=Region&vs_geo_1=E&vs_geoType_2=Region&vs_geo_2=GC&vs_geoType_3=Region&vs_geo_3=I&vs_geoType_4=Region&vs_geo_4=NA&vs_geoType_5=Region&vs_geo_5=SA"
do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "temp_RString" = "&vs_geoType_6=Region&vs_geo_6=N%2FA"
如果我不将其值更改为N%2FA并将其保留为N / A,或者即使我使用相同的If语句并将其值更改回N / A,它也将变得更加奇怪,一切正常…
do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "RegionString" = "PickAnyRegion_XL"
do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "P_RGet_TmpVal" = "&vs_geoType_0=Region&vs_geo_0=Global (All Regions)&vs_geoType_1=Region&vs_geo_1=E&vs_geoType_2=Region&vs_geo_2=GC&vs_geoType_3=Region&vs_geo_3=I&vs_geoType_4=Region&vs_geo_4=NA&vs_geoType_5=Region&vs_geo_5=SA"
do_create_RegionString.c(35): Notify: Parameter Substitution: parameter "temp_RString" = "&vs_geoType_6=Region&vs_geo_6=N/A"
do_create_RegionString.c(35): Notify: Saving Parameter "PickAnyRegion_XL = &vs_geoType_0=Region&vs_geo_0=Global (All Regions)&vs_geoType_1=Region&vs_geo_1=E&vs_geoType_2=Region&vs_geo_2=GC&vs_geoType_3=Region&vs_geo_3=I&vs_geoType_4=Region&vs_geo_4=NA&vs_geoType_5=Region&vs_geo_5=SA&vs_geoType_6=Region&vs_geo_6=N/A".
这里有任何想法或想法吗?
编辑:
这是一个更好的例子
Action()
{
lr_save_string("N/A","C_RegionValue");
lr_save_string("XL_PickAnySearch", "RegionString");
lr_save_string("&vs_geoType_0=Region&vs_geo_0=test","temp_RString");
lr_save_string(lr_eval_string("{temp_RString}"), "XL_PickAnySearch");
/*
Lines 12-13 section will convert N/A into N%2FA, if left uncommented Line 20
will not save the string, if commented line 20 will save the string
*/
web_convert_param("C_RegionValue", "SourceEncoding=PLAIN",
"TargetEncoding=URL", LAST);
lr_param_sprintf("temp_RString", "&vs_geoType_%d=Region&vs_geo_%d=%s", 1, 1,
lr_eval_string("{C_RegionValue}"));
lr_param_sprintf("P_RTmpVal", "{%s}", lr_eval_string("{RegionString}"));
lr_param_sprintf("P_RGet_TmpVal", "%s", lr_eval_string(lr_eval_string("{P_RTmpVal}")));
lr_param_sprintf(lr_eval_string("{RegionString}"), lr_eval_string("{P_RGet_TmpVal}{temp_RString}"));
return 0;
}
答案 0 :(得分:2)
编辑:您能在上一次通话中错过%s吗?
lr_param_sprintf(lr_eval_string(“ {RegionString}”),“%s” ,lr_eval_string(“ {P_RGet_TmpVal} {temp_RString}”)));
我不确定我是否理解您的问题,但我会尽力为您提供一些指导。
1)lr_param_sprintf
将参数名称作为第一个参数,但是您似乎想在lr_param_sprintf(lr_eval_string("{RegionString}"), ...
中向其发送一个已评估的参数
也许您是说lr_param_sprintf("RegionString",...)
?
2)将“ N / A”更改为“ N%2FA”被称为URL编码。您可以在没有if的情况下使用内置函数来执行此操作。参见示例:
lr_save_string("N/A","C_RegionValue");
web_convert_param("C_RegionValue", "SourceEncoding=PLAIN",
"TargetEncoding=URL", LAST);
lr_save_string("CA","C_RegionValue");
web_convert_param("C_RegionValue", "SourceEncoding=PLAIN",
"TargetEncoding=URL", LAST);
输出:
Action.c(3): Notify: Saving Parameter "C_RegionValue = N/A".
Action.c(5): web_convert_param started [MsgId: MMSG-26355]
Action.c(5): Notify: Saving Parameter "C_RegionValue = N%2FA".
Action.c(5): web_convert_param was successful [MsgId: MMSG-26392]
Action.c(9): Notify: Saving Parameter "C_RegionValue = CA".
Action.c(10): web_convert_param started [MsgId: MMSG-26355]
Action.c(10): Notify: Saving Parameter "C_RegionValue = CA".
Action.c(10): web_convert_param was successful [MsgId: MMSG-26392]
我们建议先进行所有操作,仅在最终URL就绪时才调用web_convert_param
。
希望这会有所帮助。