После исследования и борется с той же проблемой в течение некоторого времени, я наткнулся на следующий веб-сайт, который содержал решение наряду с хорошим объяснением того, как они достигли этого:
http://jaswinderjohal.com/salesforce-dependent-list-php/
Решение использует describeSObject
, предоставленный в API метаданных Salesforce PHP. Я разработал полный скрипт (показано ниже), слегка изменив код, указанный в предоставленной ссылке.
Сценарий возвращает массив массивов, закодированный 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"
в соответствии с свойством «имя» родительского поля и изменить строку-заполнитель "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($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);
?>
Надеюсь, что это поможет!
Извините, E. Ответ Паркера должен быть обозначен как ** правильный **, если он подходит для вас. – statosdotcom