使用php获取salesforce依赖的选项列表

时间:2016-10-19 10:53:33

标签: php salesforce

我使用PHP代码使用描述“任务”获取选项列表及其依赖列表。它返回所有相关值,但我无法从响应中设置父值和子值。对于某些字段,Validfor选项为空。任何人都可以帮我在我的页面中显示所有依赖字段。

提前致谢!

1 个答案:

答案 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);

?>

希望有所帮助!