为什么可以';我不能在Salesforce中更新这些自定义字段吗?

为什么可以';我不能在Salesforce中更新这些自定义字段吗?,salesforce,Salesforce,您好, 我很困惑。我的任务是更新一个PHP脚本,该脚本使用BulkAPI将一些数据上传到Opportunity实体中 这一切都进行得很顺利,除了批量API为一些明确定义的自定义字段返回此错误: InvalidBatch : Field name not found : cv__Acknowledged__c 类似的 当我发现我使用的WSDL版本非常旧(合作伙伴WSDL)时,我想我终于发现了问题。因此,我立即重新生成了WSDL。唯一的问题是什么?企业、合作伙伴等……所有这些……都不包括这些字段。

您好, 我很困惑。我的任务是更新一个PHP脚本,该脚本使用BulkAPI将一些数据上传到Opportunity实体中

这一切都进行得很顺利,除了批量API为一些明确定义的自定义字段返回此错误:

InvalidBatch : Field name not found : cv__Acknowledged__c
类似的

当我发现我使用的WSDL版本非常旧(合作伙伴WSDL)时,我想我终于发现了问题。因此,我立即重新生成了WSDL。唯一的问题是什么?企业、合作伙伴等……所有这些……都不包括这些字段。他们都来自于共同立场,从简历开始_

我甚至试图在Workbench中的对象资源管理器和Force.com IDE中的模式资源管理器中找到它们

所以,请把你的经验借给我。如何更新这些值

提前谢谢

克里夫

证明我有正确访问权限的屏幕截图:

编辑--这是我的代码:

require_once 'soapclient/SforcePartnerClient.php';
        require_once 'BulkApiClient.php';

        $mySforceConnection = new SforcePartnerClient();
        $mySoapClient = $mySforceConnection->createConnection(APP.'plugins'.DS.'salesforce_bulk_api_client'.DS.'vendors'.DS.'soapclient'.DS.'partner.wsdl.xml');

        $mylogin = $mySforceConnection->login('redacted@redacted.com', 'redactedSessionredactedPassword');

        $myBulkApiConnection = new BulkApiClient($mylogin->serverUrl, $mylogin->sessionId);

        $job = new JobInfo();
        $job->setObject('Opportunity');
        $job->setOpertion('upsert');
        $job->setContentType('CSV');
        $job->setConcurrencyMode('Parallel');
        $job->setExternalIdFieldName('Id');
        $job = $myBulkApiConnection->createJob($job);

        $batch = $myBulkApiConnection->createBatch($job, $insert);

        $myBulkApiConnection->updateJobState($job->getId(), 'Closed');

        $times = 1;
        while($batch->getState() == 'Queued' || $batch->getState() == 'InProgress')
        {
            $batch = $myBulkApiConnection->getBatchInfo($job->getId(), $batch->getId());
            sleep(pow(1.5, $times++));
        }

        $batchResults = $myBulkApiConnection->getBatchResults($job->getId(), $batch->getId());

        echo "Number of records processed: " . $batch->getNumberRecordsProcessed() . "\n";
        echo "Number of records failed: " . $batch->getNumberRecordsFailed() . "\n";
        echo "stateMessage: " . $batch->getStateMessage() . "\n";

        if($batch->getNumberRecordsFailed() > 0 || $batch->getNumberRecordsFailed() == $batch->getNumberRecordsProcessed())
        {
            echo "Failures detected. Batch results:\n".$batchResults."\nEnd batch.\n";
        }
最后,发送CSV数据的一个示例:

"Id","AccountId","Amount","CampaignId","CloseDate","Name","OwnerId","RecordTypeId","StageName","Type","cv__Acknowledged__c","cv__Payment_Type__c","ER_Acknowledgment_Type__c"
"#N/A","0018000000nH16fAAC","100.00","70180000000nktJ","2010-10-29","Gary Smith $100.00 Single Donation 10/29/2010","00580000001jWnq","01280000000F7c7AAC","Received","Individual Gift","Not Acknowledged","Credit Card","Email"
"#N/A","0018000000nH1JtAAK","30.00","70180000000nktJ","2010-12-20","Lisa Smith $30.00 Single Donation 12/20/2010","00580000001jWnq","01280000000F7c7AAC","Received","Individual Gift","Not Acknowledged","Credit Card","Email"

我真的认为这是一个现场级安全问题。该字段是否包含在该用户配置文件的opportunity布局中?字段级安全性选择了最严格的选项,因此,如果您似乎可以从设置屏幕访问,但布局中未包含该选项,我认为系统不会授予您访问权限。

如果您确定您的用户配置文件具有对字段的FLS访问权限,并且分配的布局中包含字段,然后我建议研究一下所讨论的包的定义。我知道批量API通常允许在托管包中使用字段(我已经这样做了)

在这一点上,我的最佳猜测是,随着时间的推移,您的组织已经安装了此软件包的多个版本。通过组件弃用,包作者可能弃用了这些自定义字段。登录salesforce后,请看两个地方:

1.)包定义页面。它应该有关于第一次安装软件包时使用的软件包版本以及您现在使用的软件包版本的详细信息

2.)具有WSDL生成链接的页面。如果您选择生成企业WSDL,则应该转到一个包含下拉元素的页面,该元素允许您选择要使用的包版本。试着摆弄一下这些字段,看看是否可以显示这些字段


这些只是猜测。如果您找到更多信息,请告诉我,我可以尝试提供更多指导。

经过2周、4个案例、数十封电子邮件和电话、3个公告栏帖子和1个Stackoverflow问题,我终于找到了解决方案

最后问题很简单。(这让所有这些更加令人沮丧)

如上所述,我试图在Convio Common Ground包中实时更新的自定义字段。显然,我们的安装有2个此软件包的许可证。没有任何许可证分配给我的用户帐户

目前尚不清楚,除了API访问之外,没有许可证会带来什么好处/损失。正如本线程的其余部分所示,我能够以其他方式查看和更新字段

如果遇到此问题,可以在安装程序的“管理软件包”页面上查看许可证。深入到有问题的软件包,它应该列出有权使用它的用户

感谢SimonF在开发者力量公告栏上的专业和及时协助:

您应该检查字段上的字段级安全设置。您应该能够在使用合作伙伴WSDL时更新任何字段(回退到通用sObject,而不依赖Enterprise中明确列出的内容)。您是否尝试过使用普通(非批量)WebServicesAPI?不管这些字段是来自包还是自制的:如果Eclipse和Data Loader允许您处理它们,那么它们在普通API中是可见的。也许BulkAPI中有bug?Eclipse中的模式浏览器也没有显示它们。我觉得我缺少了一些迟钝的东西。可能是字段被您的配置文件的字段级安全性隐藏了,或者您正在查看其他登录名。我的配置文件是System Administrator ALT。一个自定义配置文件,似乎是System Administrator的100%克隆。我添加了屏幕截图,向您显示我的个人资料具有访问Opportunity所需的所有权限(字段级别和对象级别)。还有其他想法吗?我遗漏了什么吗?我验证了布局是否包含此字段。这甚至是必需的。还有其他想法吗(谢谢,丹。我今天会调查这个问题。我也有一张与SalesForce有关的票证,所以我一定会在找到解决方案后发布。:)这些字段在“当前”中一直列为可用。我确实尝试过回到以前的版本,但是WSDL是一样的。我注意到包的“API访问”设置为“不受限制”。单击“启用限制”将进入一个页面,其中列出了许多自定义字段,但没有我想要使用的字段。我没有启用限制,但我觉得奇怪的是,我感兴趣的领域不在列表中。知道吗?是的,这些限制是名为“包访问控制”的功能的一部分,它们旨在防止已安装包的API/Apex访问对该包之外的对象/字段执行不适当的操作。例如,如果包中包含自定义对象,则可以将对该包的访问限制为仅接触该自定义对象,而不接触帐户或联系人。我认为这根本不会影响你。您如何获取会话ID?你正在使用SOAP API登录吗?嗨,丹,刚才看到了这个响应。我正在做以下工作:$mySoapClient=$mySforceConnection->createConnection(APP.plugins.DS.salesforce\u bulk\u api\u client.DS.vendors.DS.soapclient.DS.partner.wsdl.xml');$mylogin=$mySforceConnection->login('blah@blah.org“,”修订版“)