我使用PHP代码使用描述“任务”获取选项列表及其依赖列表。它返回所有相关值,但我无法从响应中设置父值和子值。对于某些字段,Validfor选项为空。任何人都可以帮我在我的页面中显示所有依赖字段。
提前致谢!
答案 0 :(得分:3)
经过一段时间研究和挣扎同一个问题后,我遇到了以下网站,其中包含一个解决方案,并详细解释了他们是如何实现的:
http://jaswinderjohal.com/salesforce-dependent-list-php/
该解决方案使用Salesforce PHP Metadata API中提供的describeSObject
方法。我通过稍微修改在提供的链接上给出的代码来开发完整的脚本(如下所示)。
该脚本返回一个JSON编码的数组数组,其中每个子数组只包含两个项目;第一项是父类别选项列表值的名称,第二项是包含适用于该父值的子选项列表值的名称的数组。当然,JSON编码是可选的,只需删除echo json_encode($finalApplicableOptions);
行(这样做只是为了演示输出的样子)。
示例脚本输出:
[["Category 1",["Cat1 Child1", "Cat1 Child2", ... ]],["Category 2",["Cat2 Child1", "Cat2 Child2", ... ]], ...]
好像你需要描述“任务”对象,所以只需使用$mySforceConnection->describeSObject('Task')
,如下面的脚本所示。
然后,请务必更改"Parent_Category_Name_Goes_Here"
占位符字符串以匹配父字段的“name”属性,并更改"Child_Category_Name_Goes_Here"
占位符字符串以匹配子字段的“name”属性,按顺序指定您希望获得相关选项列表值的字段。
<?php
// ** Create $mySforceConnection here as normal **
$result = $mySforceConnection->describeSObject('Task');
$finalApplicableOptions = array(array());
for($i=0; $i < count($result->fields); $i++){
if($result->fields[$i]->name == "Parent_Category_Name_Goes_Here"){
$sub = count($result->fields[$i]->picklistValues);
for($j=0;$j < $sub; $j++){
$finalApplicableOptions[$j][0] = $result->fields[$i]->picklistValues[$j]->label;
$finalApplicableOptions[$j][1] = array();
}
}
}
for($i=0;$i < count($result->fields); $i++){
if($result->fields[$i]->name == "Child_Category_Name_Goes_Here"){
for($j=0;$j < count($result->fields[$i]->picklistValues); $j++){
$byteArr = $result->fields[$i]->picklistValues[$j]->validFor;
$maparray = array();
$map = "";
foreach(str_split($byteArr) as $c)
$maparray [] = sprintf("%08b", ord($c));
$map = implode("", $maparray);
for ($k = 0; $k < strlen($map); $k++){
if($map{$k} == "1")
$finalApplicableOptions[$k][1][] =
$result->fields[$i]->picklistValues[$j]->label;
}
}
}
}
echo json_encode($finalApplicableOptions);
?>
希望有所帮助!