# Wiki.macro.finishEdit

URL: https://docs.ones.cn/developer/abilities/web-sdk/wiki-macro-finish-edit

Finish macro editing, keep confirmed content and release the collaboration lock. This method does not automatically save the app form.

## Requirements

| ONES | `@ones-open/web-sdk` |
| --- | --- |
| `7.45.0+` | `0.0.20+` |

Declare and enable a [Wiki custom macro](https://docs.ones.cn/developer/abilities/extensions/wiki-macro/) . Each method targets the calling entry's macro instance and does not accept another macro's ID. Public sharing, mobile and search do not load the macro runtime and cannot call these methods.

## Signature

```ts
interface MacroAPI {
  finishEdit(): Promise<void>
}
```

## Parameters

No parameters. Do not pass form content, callbacks or macro IDs.

## Returns and behavior

`Promise<void>` resolves after pending saves finish, the session ends and undo records are combined. Wiki then closes the edit entry; the app does not need to close the host dialog.

Call only from the macro's active edit entry. Unsaved form fields are not read. Call [`saveData`](https://docs.ones.cn/developer/abilities/web-sdk/wiki-macro-save-data/) first when changes must be saved.

## Errors

| Error code | Meaning and trigger | Recommended handling |
| --- | --- | --- |
| `READ_ONLY` | Called from the render entry, or the macro is no longer writable, edit permission was lost or login credentials are unavailable. | Keep form content and do not report completion early; verify edit state after restoring access. |
| `SESSION_EXPIRED` | The edit session is missing, finished or expired, or the editor was destroyed while waiting for collaboration updates. | Stop using the old session; reopen the page or macro editor and check what was saved. |
| `REVISION_CONFLICT` | The current macro revision differs from the session record, or another operation changed session state. | Read current content and review differences instead of repeatedly submitting the old session. |
| `COMMIT_UNKNOWN` | A previous save or this finish operation is unconfirmed, or the server acknowledged it but the corresponding collaboration revision did not arrive within the wait period. This does not prove finishing failed. | Keep current state and retry `finishEdit` to confirm the original operation; do not switch to cancellation or open another session. |
| `MACRO_UNAVAILABLE` | The runtime, macro block, app or a dependency is unavailable, or macro availability authorization failed. | Verify page and session state after recovery before continuing. |

`finishEdit` first confirms any pending save. It can therefore also return that save's `INVALID_JSON` , `DATA_TOO_LARGE` , `INVALID_EXPORT_SPEC` , `RESOURCE_NOT_ACCESSIBLE` or `CARD_UPDATE_FAILED` ; see the [`saveData` error table](https://docs.ones.cn/developer/abilities/web-sdk/wiki-macro-save-data/#errors) for their meaning and handling. Call this method only after `saveData` succeeds.

Catch failures with `try / catch` ; see [Catching errors](https://docs.ones.cn/developer/abilities/web-sdk/wiki-macro-types/#calling-and-catching-errors) for the error object contract.

## Examples

### Install via package manager

```ts
import { Wiki } from '@ones-open/web-sdk'
import type { WikiMacroContent } from '@ones-open/web-sdk'

async function submit(content: WikiMacroContent) {
  try {
    await Wiki.macro.saveData(content)
    await Wiki.macro.finishEdit()
  } catch (error) {
    console.error(error)
  }
}
```

### Use via external script

```html
<script src="https://unpkg.com/@ones-open/web-sdk@0.0.20/dist/index.iife.js"></script>
<script>
  ;(async function () {
    await window.SDK.Wiki.macro.finishEdit()
  })().catch(console.error)
</script>
```

## Related documentation

- [Macro types and fields](https://docs.ones.cn/developer/abilities/web-sdk/wiki-macro-types/)
- [ONES.getExtensionContext](https://docs.ones.cn/developer/abilities/web-sdk/get-extension-context/)
- [Wiki custom macro capability](https://docs.ones.cn/developer/abilities/extensions/wiki-macro/)
