# # PDF Action API Migration Guide

This chapter focuses on the migration of PDF Action related APIs from the previou version to the new version, aiming to assist developers in upgrading their code smoothly.

## # Changes in Action Retrieval and Manipulation APIs

### # Previous Version

    // Get Additional Action object
    Widget#getAdditionalAction(type)
    // Get Action object
    Widget#getAction();
    // Remove Additional Action object from a Link
    Link#removeAction(trigger, action);
    // Remove Additional Action object from a Screen
    Screen#removeAction(trigger, action);

### # New Version

    // Note: Here, Annot refers to Widget, Screen, Link, and Sound
    // Get Action information
    await Annot#getActionData();
    // Get all Action information (including Additional Action and regular Action)
    await Annot#getAllActionData();

    // Update a specific Action
    await Annot#updateAction(targetActionObjNumber, actionData);
    // Remove a specific Action
    await Annot#removeAction(targetActionObjNumber);

    // Get the AdditionalAction object
    const additionalAction = await Annot#getAdditionalAction();

    // Remove an Additional Action based on trigger type and Action object number
    await additionalAction.removeAction(trigger, targetActionObjNumber);
    // Add a new Action
    await additionalAction.addAction(trigger, actionSpec);
    // Update the information of a specific Action
    await additionalAction.updateActionData(trigger, targetActionObjNumber, actionData);
    // Override all Action for a specific trigger type
    await additionalAction.setAction(trigger, actionSpec);

### # Key Changes Description

- In the previous version, Action was accessed using `Widget#getAction` and `Widget#getAdditionalAction(type)` methods.

- In the new version, Action is managed uniformly through asynchronous methods of the `Annot` object, which includes Widget, Screen, Link, and Sound.

- The new version adds more granular capabilities for handling Action, such as batch retrieval, updates, and deletions.

- For operations related to AdditionalAction, the new version requires first obtaining the AdditionalAction object via the `Annot#getAdditionalAction()` method, followed by performing actions such as adding, removing, updating, and querying.

## # ActionCallbackManager.setEmbeddedGotoCallback - Callback Parameter Changes

### # Previous Version

In the previous version, the callback parameter was an `EmbeddedGotoAction`
(opens new window) object:

    const actionCallbackManager = actionpdfviewer.getActionCallbackManager();
    actionCallbackManager.setEmbeddedGotoCallback(async (action) => {
        console.log(action.getDestination());
    });

### # New Version

In the new version, the callback parameter is an `ExecuteActionOptions`
(opens new window) object:

    const actionCallbackManager = actionpdfviewer.getActionCallbackManager();
    actionCallbackManager.setEmbeddedGotoCallback(async (options) => {
        console.log(
            options.data,
            options.doc,
            options.ownerQuery,
            options.pdfViewer,
            options.trigger
        );
    });

#### # Major Changes Description

- The callback parameter in the new version is more comprehensive, including action data, document objects, and trigger sources, making it easier for developers to implement more complex business logic.
- For specific fields, please refer to the API Documentation
  (opens new window).

For more detailed information, please refer to the API Reference Documentation
(opens new window).