class_docstr: Execute a Salesforce Bulk API and pushes results to xcom.
  
  .. seealso::
      For more information on how to use this operator, take a look at the guide:
      :ref:`howto/operator:SalesforceBulkOperator`
  
  :param operation: Bulk operation to be performed
      Available operations are in ['insert', 'update', 'upsert', 'delete', 'hard_delete']
  :param object_name: The name of the Salesforce object
  :param payload: list of dict to be passed as a batch
  :param external_id_field: unique identifier field for upsert operations
  :param batch_size: number of records to assign for each batch in the job
  :param use_serial: Process batches in serial mode
  :param salesforce_conn_id: The :ref:`Salesforce Connection id <howto/connection:SalesforceHook>`.
docstr: Makes an HTTP request to Salesforce Bulk API.
  
  :param context: The task context during execution.
  :return: API response if do_xcom_push is True
code: def execute(self, context: Context):
      """
      Makes an HTTP request to Salesforce Bulk API.
  
      :param context: The task context during execution.
      :return: API response if do_xcom_push is True
      """
      sf_hook = SalesforceHook(
          salesforce_conn_id=self.salesforce_conn_id
      )
      conn = sf_hook.get_conn()
  
      result = []
      if self.operation == "insert":
          result = conn.bulk.__getattr__(self.object_name).insert(
              data=self.payload,
              batch_size=self.batch_size,
              use_serial=self.use_serial,
          )
      elif self.operation == "update":
          result = conn.bulk.__getattr__(self.object_name).update(
              data=self.payload,
              batch_size=self.batch_size,
              use_serial=self.use_serial,
          )
      elif self.operation == "upsert":
          result = conn.bulk.__getattr__(self.object_name).upsert(
              data=self.payload,
              external_id_field=self.external_id_field,
              batch_size=self.batch_size,
              use_serial=self.use_serial,
          )
      elif self.operation == "delete":
          result = conn.bulk.__getattr__(self.object_name).delete(
              data=self.payload,
              batch_size=self.batch_size,
              use_serial=self.use_serial,
          )
      elif self.operation == "hard_delete":
          result = conn.bulk.__getattr__(self.object_name).hard_delete(
              data=self.payload,
              batch_size=self.batch_size,
              use_serial=self.use_serial,
          )
  
      if self.do_xcom_push and result:
          return result
  
      return None
  
file_path: airflow/airflow/providers/salesforce/operators/bulk.py
imports: from __future__ import annotations
  from typing import TYPE_CHECKING
  from airflow.models import BaseOperator
  from airflow.providers.salesforce.hooks.salesforce import SalesforceHook
label_desc: Use image node_id 3 for calling the SalesforceBulkOperator obj's underlying member method code with example usage: obj.execute(context) and returns: None, result