为什么我不能在Salesforce中更新这些自定义字段?

时间:2010-12-21 06:25:44

标签: salesforce

问候, 好吧,我很困惑。我的任务是更新一个PHP脚本,该脚本使用BulkAPI将一些数据插入到Opportunity实体中。

除了Bulk API为某些明确定义的自定义字段返回此错误外,一切顺利:

InvalidBatch : Field name not found : cv__Acknowledged__c

类似。

当我发现我使用的WSDL版本相当陈旧时,我认为我终于找到了问题(Partner WSDL)。所以我迅速重新生成了WSDL。唯一的问题?企业,合作伙伴等......所有这些......都不包括这些领域。它们都来自Common Ground软件包,以cv _

开头

我甚至试图在Workbench中的对象资源管理器以及Force.com IDE中的架构资源管理器中找到它们。

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

提前致谢!

克里夫

屏幕截图,以证明我有正确的访问权限 alt text alt text alt text

编辑 - 这是我的代码:

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"

3 个答案:

答案 0 :(得分:8)

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

最后问题很简单。 (这使所有这一切更令人沮丧)

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

由于没有API访问以外的许可证,目前尚不清楚真正获得/丢失的是什么。正如本线程的其余部分所示,我能够以其他方式查看和更新​​字段。

如果遇到此问题,可以在“设置”的“管理包”页面上查看许可证。深入查看相关软件包,它应列出获得许可使用它的用户。

alt text

感谢SimonF在Developer Force公告板上的专业和及时的帮助: http://boards.developerforce.com/t5/Perl-PHP-Python-Ruby-Development/Bulk-API-So-frustrated/m-p/232473/highlight/false#M4713

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您确定您的用户的个人资料对字段具有FLS访问权限,并且指定的布局包含字段,那么我建议您查看相关软件包的定义。我知道批量API允许通常使用托管包中的字段(我已经这样做了。)

我最好的猜测是你的组织随着时间的推移安装了这个包的多个版本。通过组件弃用,包作者可能会弃用这些自定义字段。登录salesforce后,请查看两个位置:

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

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

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