/** * Does the actual work of PUTting * for asyncPUT funcitons and forwarding * on to the results page. * * @param unknown_type $apiCall * @param unknown_type $extId * @param unknown_type $fieldMap * @param unknown_type $csvArray */ function putAsync($apiCall, $extId, $fieldMap, $csvArray, $zipFile, $contentType) { $doingZip = isset($zipFile); if (!$doingZip && !($fieldMap && $csvArray && WorkbenchContext::get()->getDefaultObject())) { displayError("CSV file and field mapping not initialized or object not selected. Upload a new file and map fields.", true, true); } else { try { $job = new JobInfo(); $job->setObject(WorkbenchContext::get()->getDefaultObject()); $job->setOpertion($apiCall); $job->setContentType(isset($contentType) ? $contentType : ($doingZip ? "ZIP_CSV" : "CSV")); $job->setConcurrencyMode(WorkbenchConfig::get()->value("asyncConcurrencyMode")); if (WorkbenchConfig::get()->value("assignmentRuleHeader_assignmentRuleId")) { $job->setAssignmentRuleId(WorkbenchConfig::get()->value("assignmentRuleHeader_assignmentRuleId")); } if ($apiCall == "upsert" && isset($extId)) { $job->setExternalIdFieldName($extId); } $job = WorkbenchContext::get()->getAsyncBulkConnection()->createJob($job); } catch (Exception $e) { displayError($e->getMessage(), true, true); } if ($job->getId() == null) { displayError("No job id found. Aborting Bulk API operation.", true, true); } if ($doingZip) { try { WorkbenchContext::get()->getAsyncBulkConnection()->createBatch($job, $zipFile); } catch (Exception $e) { displayError($e->getMessage(), true, true); } } else { $csvHeader = array_shift($csvArray); $results = array(); while ($csvArray) { $sObjects = array(); $csvArrayBatch = array_splice($csvArray, 0, WorkbenchConfig::get()->value("asyncBatchSize")); $asyncCsv = array(); $asyncCsvHeaderRow = array(); foreach ($fieldMap as $salesforceField => $fieldMapArray) { if (isset($fieldMapArray['csvField'])) { if (isset($fieldMapArray['relationshipName']) && isset($fieldMapArray['relatedFieldName'])) { $asyncCsvHeaderRow[] = ($fieldMapArray['isPolymorphic'] ? $fieldMapArray['relatedObjectName'] . ":" : "") . $fieldMapArray['relationshipName'] . "." . $fieldMapArray['relatedFieldName']; } else { if (isset($salesforceField)) { $asyncCsvHeaderRow[] = $salesforceField; } } } } $asyncCsv[] = $asyncCsvHeaderRow; for ($row = 0; $row < count($csvArrayBatch); $row++) { //create new row $asyncCsvRow = array(); foreach ($fieldMap as $salesforceField => $fieldMapArray) { if (isset($fieldMapArray['csvField'])) { $col = array_search($fieldMapArray['csvField'], $csvHeader); if (isset($salesforceField) && isset($fieldMapArray['csvField'])) { if ($csvArrayBatch[$row][$col] == "" && WorkbenchConfig::get()->value("fieldsToNull")) { $asyncCsvRow[] = "#N/A"; } else { $asyncCsvRow[] = $csvArrayBatch[$row][$col]; } } } } //add row to the array $asyncCsv[] = $asyncCsvRow; } try { WorkbenchContext::get()->getAsyncBulkConnection()->createBatch($job, convertArrayToCsv($asyncCsv)); } catch (Exception $e) { displayError($e->getMessage(), true, true); } } } try { $job = WorkbenchContext::get()->getAsyncBulkConnection()->updateJobState($job->getId(), "Closed"); } catch (Exception $e) { displayError($e->getMessage(), true, true); } header("Location: asyncStatus.php?jobId=" . $job->getId()); } }