我使用PHP代码来获取picklist和它们的依赖列表,使用描述“任务”。它返回所有依赖值,但我无法从响应中设置父值和子值。某些字段的Validfor选项为空。任何人请帮助我显示在我的网页上的所有依赖领域。提前感谢!
vngu2lb81#
在研究和解决同一问题一段时间后,我偶然发现了以下网站,其中包含一个解决方案沿着他们如何实现的很好的解释:http://jaswinderjohal.com/salesforce-dependent-list-php/该解决方案使用Salesforce PHP Metadata API中提供的describeSObject方法。我通过稍微修改提供的链接中给出的代码开发了完整的脚本(如下所示)。该脚本返回一个JSON编码的数组数组,其中每个子数组仅包含两个项;第一项是父类别选择列表值的名称,第二项是包含应用于该父值的子选择列表值的名称的数组。当然,JSON编码是可选的,只需删除echo json_encode($finalApplicableOptions);行(这样做只是为了演示输出的样子)。脚本输出示例:
describeSObject
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”属性,以指定您希望获取哪些字段的相关选择列表值。
$mySforceConnection->describeSObject('Task')
"Parent_Category_Name_Goes_Here"
"Child_Category_Name_Goes_Here"
<?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); ?>
希望有帮助!
1条答案
按热度按时间vngu2lb81#
在研究和解决同一问题一段时间后,我偶然发现了以下网站,其中包含一个解决方案沿着他们如何实现的很好的解释:
http://jaswinderjohal.com/salesforce-dependent-list-php/
该解决方案使用Salesforce PHP Metadata API中提供的
describeSObject
方法。我通过稍微修改提供的链接中给出的代码开发了完整的脚本(如下所示)。该脚本返回一个JSON编码的数组数组,其中每个子数组仅包含两个项;第一项是父类别选择列表值的名称,第二项是包含应用于该父值的子选择列表值的名称的数组。当然,JSON编码是可选的,只需删除
echo json_encode($finalApplicableOptions);
行(这样做只是为了演示输出的样子)。脚本输出示例:
看起来您需要描述“Task”对象,因此只需使用
$mySforceConnection->describeSObject('Task')
,如下面的脚本所示。然后,确保更改"Parent_Category_Name_Goes_Here"
占位符字符串以匹配父字段的“name”属性,并更改"Child_Category_Name_Goes_Here"
占位符字符串以匹配子字段的“name”属性,以指定您希望获取哪些字段的相关选择列表值。希望有帮助!