Warum kann ich nicht aktualisieren, werden diese benutzerdefinierten Felder in Salesforce?
Grüße,
Nun, ich bin verwirrt. Ich wurde beauftragt mit der Aktualisierung ein PHP-Skript, dass verwendet die BulkAPI an einem einfachen Beispiel: einige Daten in der Entität "Verkaufschance".
Dies ist alles gut, außer, dass die Bulk-API ist wieder dieser Fehler für einige klar definierte benutzerdefinierte Felder:
InvalidBatch : Field name not found : cv__Acknowledged__c
Und ähnliches.
Dachte ich, schließlich fand ich das problem, wenn ich vor der WSDL-version war ich mit war ziemlich alt (Partner-WSDL). Also ich umgehend regeneriert die WSDL. Nur problem? Enterprise, Partner, etc....alle von Ihnen...nicht diese Felder. Sie kommen alle aus der Gemeinsamen Basis-Paket und beginnen Sie mit cv_
Ich sogar versucht, Sie zu finden in dem Objekt-explorer in der Workbench, sowie die schema-explorer in Force.com IDE.
So, bitte...Leih mir deine Erfahrung. Wie kann ich update diese Werte?
Vielen Dank im Voraus!
Clif
Screenshots um zu beweisen, ich habe den richtigen Zugriff:
EDIT -- Hier ist mein code:
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('[email protected]', '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";
}
Und schließlich ein Beispiel für die CSV-Daten gesendet:
"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"
- Sie sollten überprüfen, den Field level security Einstellungen auf den Feldern.
- Sie sollten in der Lage sein, zu aktualisieren Feld bei der Partner-WSDL (fallback generic sObject, ohne sich auf was auch immer explizit aufgeführt wird Sie in Enterprise). Haben Sie versucht, die Arbeit mit normalen (nicht-Massengut) webservices-API? Egal, ob die Felder stammen aus Paket oder sind selbst gemacht: wenn Eclipse und Data Loader erlauben, Sie an Ihnen zu arbeiten, dann sind Sie sichtbar in der normalen API. Vielleicht gibt es einen bug in der bulk-API?
- Das schema explorer in Eclipse nicht zeigen Sie. Ich fühle mich wie ich bin etwas fehlt, verzögert.
- Entweder die Felder sind standardmäßig ausgeblendet field level security für Ihr Profil, oder du suchst in einer anderen Anmeldung.
- Mein Profil ist Systemadministrator ALT. Ein benutzerdefiniertes Profil, das scheint zu sein, ein 100% - Klon des System-Administrators. Ich habe screenshots Hinzugefügt um zu zeigen, dass mein Profil hat alle Zugang notwendig, um die Möglichkeit (sowohl Feld-Ebene und Objekt-Ebene). Irgendwelche anderen Ideen? Bin ich etwas fehlt?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach 2 Wochen, 4 Fälle, Dutzende von e-mails und Anrufe, 3-bulletin-board-Beiträge und 1 Stackoverflow-Frage, ich habe endlich eine Lösung.
Das problem war ganz einfach, in dem Ende. (das macht das alles umso mehr frustrierend)
Wie gesagt, die benutzerdefinierten Felder, die ich versuchte, zu aktualisieren, Leben in der Convio Common Ground-Paket. Anscheinend ist unsere Installation hat 2 Lizenzen für dieses Paket. Die Lizenzen zugewiesen wurden mein Benutzerkonto.
Es ist nicht klar, was ist wirklich gewonnen/verloren von nicht mit die andere Lizenz als API-Zugriff. Wie der rest dieses Threads zeigt, war ich in der Lage, um zu sehen, und aktualisieren Sie die Felder in jeder anderen Hinsicht.
Wenn Sie auf diese anzeigen, können Sie die Lizenzen Verwalten-Pakete-Seite im Setup-Programm. Drill-through, um das Paket in Frage, und es sollte die Benutzer auflisten, die lizenziert sind, zu verwenden.
Dank SimonF die professionelle und rasche Hilfe auf der Entwickler-Force Foren:
http://boards.developerforce.com/t5/Perl-PHP-Python-Ruby-Development/Bulk-API-So-frustrated/m-p/232473/highlight/false#M4713
Ich wirklich denke, das ist eine Feld-Ebene Sicherheit in Frage. Ist das Feld enthalten in der Möglichkeit, das layout für das user-Profil? Field level security nimmt die restriktivste option, so dass, wenn Sie scheinen, haben den Zugriff von setup-Bildschirm, aber es ist nicht in das layout, ich denke nicht, dass das system Ihnen den Zugriff.
Wenn Sie sicher sind, dass Ihr Benutzer-Profil hat der FLS Zugriff auf die Felder und die zugeordneten layouts enthalten die Felder, dann würde ich vorschlagen, Blick in die definition des Pakets in Frage. Ich weiß, die bulk-API ermöglicht die Verwendung der Felder in verwalteten Paketen in der Regel (ich habe dies getan).
Meine beste Vermutung an dieser Stelle ist, dass Ihr org installiert hat mehrere Versionen dieses Paket im Laufe der Zeit. Durch die Komponente abgeschwächt, es ist möglich, das Paket Autor veraltet diese benutzerdefinierten Felder. Werfen Sie einen Blick auf zwei Orte, sobald Sie sich angemeldet haben, in salesforce:
1.) Die Paket-definition Seite. Es sollten Einzelheiten über das, was Paket-version wurde verwendet, wenn das Paket zum ersten mal installiert und das, was Paket-version, die Sie jetzt steht.
2.) Die Seite mit der WSDL-Generierung links. Wenn Sie zum generieren der enterprise WSDL, sollten Sie ergriffen werden, um eine Seite mit dropdown-Elemente, mit denen Sie auswählen, welche Paket-version zu verwenden. Versuchen Sie das hantieren mit diesen zu sehen, wenn Sie die Felder zu zeigen.
Diese sind nur Vermutungen. Wenn Sie mehr Informationen, lassen Sie mich wissen, und ich kann versuchen, zusätzliche Orientierungshilfen zu geben.