使用php获取salesforce相关的picklist

hjzp0vay  于 2023-04-28  发布在  PHP
关注(0)|答案(1)|浏览(95)

我使用PHP代码来获取picklist和它们的依赖列表,使用描述“任务”。它返回所有依赖值,但我无法从响应中设置父值和子值。某些字段的Validfor选项为空。任何人请帮助我显示在我的网页上的所有依赖领域。
提前感谢!

vngu2lb8

vngu2lb81#

在研究和解决同一问题一段时间后,我偶然发现了以下网站,其中包含一个解决方案沿着他们如何实现的很好的解释:
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", ... ]], ...]

看起来您需要描述“Task”对象,因此只需使用$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(base64_decode($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);

?>

希望有帮助!

相关问题