Update issue history after copy attachment

I used Jira API to write a function to copy attachments to another issue like below:

public void copyAttachmentsToAnotherIssueWithKey(
            final String targetIssueKey,
            final List<Long> attachmentIds
    ) {
        ApplicationUser currentUser = jiraAuthenticationContext.getLoggedInUser();
        List<Attachment> attachments = attachmentIds.stream().map(attachmentManager::getAttachment).collect(Collectors.toList());
        attachments.forEach(attachment -> attachmentManager.copyAttachment(attachment, currentUser, targetIssueKey));
    }

It copied successfully, but in the ‘History’ of the target issue, there is no update.

Furthermore, when I used JQL search with ‘attachments is not EMPTY’, the target issue was not in the results although the attachments already exist in the target issue.

Could you provide me with a solution? Thanks.

I found the solution to update the changelog with ChangeItemBean and IssueUpdater.

Issue targetIssue = issueManager.getIssueObject(targetIssueKey);
        attachments.forEach(attachment -> {
            attachmentManager.copyAttachment(attachment, currentUser, targetIssueKey);
            Issue issue = attachment.getIssueObject();
            List<ChangeItemBean> changeItemBeans = changeHistoryManager.getChangeItemsForField(issue, "Attachment");
            if (!changeItemBeans.isEmpty()) {
                ChangeItemBean latestChangeItemBean = changeItemBeans.get(changeItemBeans.size() - 1);
                ChangeItemBean newChangeItemBean = new ChangeItemBean();
                newChangeItemBean.setFieldType(ChangeItemBean.STATIC_FIELD);
                newChangeItemBean.setField("Attachment");
                newChangeItemBean.setFrom(latestChangeItemBean.getFrom());
                newChangeItemBean.setFromString(latestChangeItemBean.getFromString());
                newChangeItemBean.setTo(attachment.getId().toString());
                newChangeItemBean.setToString(attachment.getFilename());
                newChangeItemBean.setCreated(new Timestamp(System.currentTimeMillis()));
                List<ChangeItemBean> newChangeItemBeans = new ArrayList<>();
                newChangeItemBeans.add(newChangeItemBean);
                
                IssueUpdateBean issueUpdateBean = new IssueUpdateBean(targetIssue, targetIssue, EventType.ISSUE_UPDATED_ID, currentUser);
                issueUpdateBean.setChangeItems(newChangeItemBeans);
                issueUpdateBean.setDispatchEvent(true);
                issueUpdateBean.setParams(MapBuilder.build("eventsource", IssueEventSource.ACTION));
                issueUpdater.doUpdate(issueUpdateBean, true);
            }
        });

Thanks, everybody for taking a look at my problem.