示例#1
0
/**
 * 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());
    }
}