在salesforce phptoolkit中如何获得动态下拉值

时间:2011-04-13 20:21:07

标签: php soap salesforce

  • 我想知道如何根据其他字段检索动态下拉列表的值。例如:如果“子类别”依赖于“类别”下拉列表,我如何获得“子类别”的值。

  • 还想知道如何找到“Case”的所有字段,这些字段是提交新“Case”所必需的。我正在尝试使用phptoolkit这样做但我没有找到关于它的好文档。

1 个答案:

答案 0 :(得分:3)

PHP工具包本质上是一个WSDL SOAP包装器,因此适用于salesforce API Web服务的任何内容都适用于PHP工具包。

以下是解决问题的程序(我没有PHP示例):

  1. 调用describeSObject以检索有关对象的信息
  2. describesObjectResult.Fields中的每个字段都有三个重要属性,creatablenillabledefaultedOnCreate。如果是可创造的而不是无法支付而且没有默认,则必须提供一个值,这将回答问题#2
  3. 如果字段类型是选项列表或多列表,则字段“picklistValues包含PicklistEntry元素列表。如果选项列表依赖于每个条目,则在validFor属性中包含base64编码的位图。位置i的每个位是0或1,对应于选项列表条目是否适用于位置i处的主选项列表输入。
  4. 您必须对位图进行解码并使用它来确定可以使用此特定条目的主要选项列表条目。不幸的是,它是唯一的方式。
  5. 我可以通过javascript告诉你我是如何做到的(lstCategorieslstSubcategoriesPickListEntry的数组),lstApplicableSubs创建了子类别列表对于每个类别。这应该为您提供解码方法:

        var b64 = new sforce.Base64Binary("");
        lstApplicableSubs = new Array(lstCategories.length);
        for (var i = 0; i < lstApplicableSubs.length; i++) lstApplicableSubs[i] = new Array();
        for (i = 0; i < lstSubCategories.length; i++)
        {
            var map = b64.decode(lstSubCategories[i].validFor);
            for (var j = 0; j < lstCategories.length; j++)
            {
                var bits = map.charCodeAt(j >> 3);
                if ((bits & (0x80 >> (j & 0x07))) != 0) lstApplicableSubs[j].push(lstSubCategories[i]);
            }
        }