使用SalesForce的Web服务来创建和设置任务的类型

时间:2010-06-18 04:29:09

标签: api web-services task salesforce

我通过Java使用SalesForce API SOAP API成功创建了一个Task。

然而,我的问题是我似乎无法设置它的类型。它们都默认为“呼叫”,但我真的希望它们是“电子邮件”。

有人能指出我可以做到这一点的方向吗?我认为它与RecordTypeMapping有关,但我对如何在我的Java代码中使用它来查找特定类型的任务类型感到困惑。

我觉得我已经离这么近了。我有正确的WSDL,它给了我在Task.java类上的额外方法,但无论我传入什么,它都会死掉。

这似乎不是一个巨大的问题,但我很困惑,加入哪些点来让它工作

任何帮助将不胜感激。感谢

2 个答案:

答案 0 :(得分:3)

此字段可通过API获得,与其他任何字段一样。您的问题与RecordTypes没有任何关系(当您通过API插入记录时,您可以将任何您想要的字符串作为选项列表值)。

所以,让我们从核对清单开始,如果这没有帮助,我们会考虑更多选项:)

  1. “新任务”页面上的字段是否可见?
  2. "View field accessibility"按钮说什么? (将您自己的组织ID放在链接中,我使用了我的“na5”)
  3. 您是否知道用于通过API连接其凭据的用户的个人资料(例如“系统管理员”)?你可以在"Set Field-Level security"验证此配置文件是否可以看到此字段(第一个复选框)并且它没有标记为只读(第二个复选框)?
  4. 您是否可以尝试将“呼叫”设置为此字段的默认值,看看会发生什么?
  5. 您是否可以尝试通过Salesforce.com数据加载器插入新任务?如果它可以工作,那就意味着它自己的API就可以了(Data Loader也使用了API),问题出在你的app中。
  6. 如果您确实需要访问所谓的元数据以了解选项列表的可能值,您可以使用describe()调用。 This应该让你开始,但正如我之前所说 - 据我记得,当你使用API​​时,选项列表值并没有真正强制执行。
  7. 愚蠢,但是......如果他没有放置任何修改此字段值的工作流程,请咨询您的系统管理员。并询问Apex开发人员是否在Task对象上有任何“before insert”触发器......
  8. 编辑,对于所有遇到Salesforce集成问题的用户(特别是“我创建了一个新的自定义字段,似乎我可以查询它,但我没有看到它返回结果“)还有几个步骤:

    如果您正在使用企业WSDL - 请记得下载新副本。 Java,C#等人们需要从wsdl重新生成他们的类(再次“消耗”它们)以便查看新字段。 PHP用户不应该担心(上次我已经检查过所有内容都是在“PHP工具包”中运行的...当然如果你实际上已经从WSDL中生成了一些东西 - 再做一遍)。但是在PHP的情况下,似乎WSDL可以以某种方式缓存在您的应用程序中。重启服务器以确保使用新的wsdl?


    花了我比预期更长的时间(Apache Axis 2生成的代码与Axis 1.x使用的代码完全不同)+我遇到了其他一些干扰,但我已经检查了它。

    简而言之:它是通过API提供的正常字段,适用于我。

    请确保您的企业WSDL包含类似于

    的行
    <complexType name="Task">
        <complexContent>
            <extension base="ens:sObject">
                <sequence>
                    <element name="Account" nillable="true" minOccurs="0" type="ens:Account"/>
                    (...)
                    <element name="Type" nillable="true" minOccurs="0" type="xsd:string"/>
                    (...)
                </sequence>
            </extension>
        </complexContent>
    </complexType>
    

    如果是 - 从中​​重新生成Java类。如果没有 - 下载新的WSDL。

    使用Apache Axis2和enterprise.wsdl,我能够创建这样的示例代码:

    Task task = Task.Factory.newInstance();
    task.setType("Alan's Email");   // Not a valid picklist value, just to prove that these don't matter when we use API.
    task.setWhatId("0067000000AH3ME"); // An Opportunity Id ("Burlington Textiles" in my test org) to which this task will be related.
    task.setStatus("Not Started");
    task.setPriority("Normal");
    task.setDescription("A new Task has been created with methods from Enterprise WSDL.");
    

    您可以下载整个测试项目(相当大)here。如果您习惯使用Axis 1.x样式(大多数Salesforce API示例都是使用旧Axis编写的),代码很可能看起来很奇怪,但我向您保证它对我有用。

    如果您仍然需要帮助 - 我想我们必须直接联系?

    祝你好运。

答案 1 :(得分:-1)

包含“调用”(默认为)的API字段名称为ComboBox,而不是PickList,并且称为“主题”。

Task.Subject = 'Email';

如果要设置默认值,请在Salesforce应用程序中执行此操作:

Setup->Customize->Activities->Task Fields->Subject