Perform bulk operations on a custom database table I have a custom database table. I implemented hook_views_data() to make it available with views.
/**
 * Implements hook_views_data().
 */
function uploader_views_data() {
  $data = array(
  'texts' =&gt; array(
        'table' =&gt; array(),
      ),
  );

  $data['texts']['table'] = array(
    'group' =&gt; t('Uploaded Texts'),
    'handler' =&gt; 'views_join',
  );

  $data['texts']['table']['base'] = array(
    'field' =&gt; 'txt_id',
    'title' =&gt; t('Texts'),
    'help' =&gt; t(&quot;Text ცხრილში ინახება ინფორმაცია ტექსტების შესახებ. მაგ: ავტორი, სათაური და ა.შ&quot;),
    'weight' =&gt; -10,
  );

  $data['texts']['txt_id'] = array(
    'title' =&gt; t('txt id'),
    'help' =&gt; t('ცხრილის უნიკალური ID-ი.'), // The help that appears on the UI,
    // Information for displaying the nid
    'field' =&gt; array(
      'handler' =&gt; 'views_handler_field_node',
      'click sortable' =&gt; TRUE,
    ),
    // Information for accepting a nid as an argument
    'argument' =&gt; array(
      'handler' =&gt; 'views_handler_argument_node_nid',
      'name field' =&gt; 'title', // the field to display in the summary.
      'numeric' =&gt; TRUE,
      'validate type' =&gt; 'nid',
    ),
    // Information for accepting a nid as a filter
    'filter' =&gt; array(
      'handler' =&gt; 'views_handler_filter_numeric',
    ),
    // Information for sorting on a nid.
    'sort' =&gt; array(
      'handler' =&gt; 'views_handler_sort',
    ),
  );

  $data['texts']['teqstis_saxelcodeba'] = array(
    'title' =&gt; t('ტექსტის სახელწოდება'),
    'help' =&gt; t('ნაბეჭდი ტექსტის სახელწოდება.'),
    'field' =&gt; array(
      'handler' =&gt; 'views_handler_field',
      'click sortable' =&gt; TRUE, // This is use by the table display plugin.
    ),
    'sort' =&gt; array(
      'handler' =&gt; 'views_handler_sort',
    ),
    'filter' =&gt; array(
      'handler' =&gt; 'views_handler_filter_string',
    ),
    'argument' =&gt; array(
      'handler' =&gt; 'views_handler_argument_string',
    ),
  );

  $data['texts']['xelnaceris_saxelcodeba'] = array(
    'title' =&gt; t('ხელნაწერის სახელწოდება'),
    'help' =&gt; t('ხელნაწერის სახელწოდება.'),
    'field' =&gt; array(
      'handler' =&gt; 'views_handler_field',
      'click sortable' =&gt; TRUE, // This is use by the table display plugin.
    ),
    'sort' =&gt; array(
      'handler' =&gt; 'views_handler_sort',
    ),
    'filter' =&gt; array(
      'handler' =&gt; 'views_handler_filter_string',
    ),
    'argument' =&gt; array(
      'handler' =&gt; 'views_handler_argument_string',
    ),
  );

  $data['texts']['type'] = array(
    'title' =&gt; t('Type'),
    'help' =&gt; t('ტექსტის ტიპი.'),
    'field' =&gt; array(
      'handler' =&gt; 'views_handler_field',
      'click sortable' =&gt; TRUE, // This is use by the table display plugin.
    ),
    'sort' =&gt; array(
      'handler' =&gt; 'views_handler_sort',
    ),
    'filter' =&gt; array(
      'handler' =&gt; 'views_handler_filter_string',
    ),
    'argument' =&gt; array(
      'handler' =&gt; 'views_handler_argument_string',
    ),
  );

  return $data;
}

I want to create a custom bulk operation on this table.
function uploader_action_info() {
  return array(
    'uploader_myaction' =&gt; array(
      'type' =&gt; 'entity',
      'label' =&gt; t('Do my action'),
      'configurable' =&gt; FALSE,
      'pass rows' =&gt; TRUE, //this will ensure that the entire views row is passed as part of the context in your action callback.
    ),
  );
}

The action callback is the following one.
function uploader_myaction($cmt, $context = array()) {
   drupal_set_message(t('uploader_myaction was called'));
}

When I try to add a field in the view fields, there is no Bulk operations: Content option.
I've had a similar problem.  It's not ideal behaviour, but when I created the field, save it (selecting no action, or an action at random), then edit it (unselecting the random action, if I did that), then my custom action shows up.