1

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

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

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

我觉得我已经很接近这个了。我有正确的 WSDL,它为我提供了 Task.java 类的额外方法,但无论我传入什么,它都会死掉。

这似乎不是一个很大的要求,但我很困惑要加入哪些点才能让它工作

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

4

2 回答 2

3

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

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

  1. 该字段是否在“新任务”页面上可见?
  2. “查看字段可访问性”按钮说什么?(将您自己的组织 ID 放在链接中,我使用了我的“na5”)
  3. 您是否知道用于通过 API 进行连接的用户的个人资料(例如“系统管理员”)?您能否在“设置字段级安全性”中验证此配置文件可以看到该字段(第一个复选框)并且未标记为只读(第二个复选框)?
  4. 您可以尝试将“呼叫”设置为该字段的默认值,看看会发生什么?
  5. 您可以尝试通过 Salesforce.com 数据加载器插入新任务吗?如果它可以工作,这意味着它自己的 API 是可以的(Data Loader 也使用 API),问题出在你的应用程序的某个地方。
  6. 如果您确实需要访问所谓的元数据以了解选项列表的可能值是什么,您可以使用 describe() 调用。应该可以帮助您入门,但正如我之前所说 - 据我所知,当您使用 API 时,选项列表值并没有真正强制执行。
  7. 愚蠢,但是......如果您的系统管理员没有放置任何修改此字段值的工作流程,请咨询他。并询问 Apex 开发人员是否在 Task 对象上有任何“插入前”触发器......

编辑:对于所有遇到 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.");

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

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

祝你好运。

于 2010-06-18T08:25:20.893 回答
-1

包含“Call”(默认为它)的 API 字段名称是 a ComboBox,而不是 a PickList,它被称为 Subject。

Task.Subject = 'Email';

如果您想设置默认值,请在 Salesforce 应用程序中进行:

Setup->Customize->Activities->Task Fields->Subject
于 2010-06-28T06:20:25.513 回答