После того, как вы инициировали цепочку документооборота, вам нужно сохранить возвращенный messageId, к примеру «6c3a7be9-26aa-4327-bb10-6f4807739675». С помощью него можно запросить статус документов и подпись для уже подписанных. Примечание. Новый WordPress продолжает портить кусочки исходного кода в текстах заметок, добавляя закрывающие теги для того, что он считает тегами. Если знаете, как это победить, пишите в комментариях.
По messageId можно получить Message:
DiadocMessage_GetApiProtos.Message message = diadocApi .getMessageClient() .getMessage(currentBoxId, messageId); |
currentBoxId — тот ящик, с которого была инициирована цепочка документооборота.
Из сообщения можно достать список сущностей и отфильтровать:
List<diadocmessage_getapiprotos.entity> fileList = message .getEntitiesList() .stream() .filter(entity -> (entity.getEntityType() // неподписанный контрагентом файл имеет пустое имя файла! .equals(DiadocMessage_GetApiProtos.EntityType.Attachment) && StringUtils.isBlank(entity.getFileName()))) .collect(Collectors.toList());</diadocmessage_getapiprotos.entity> |
Заполнить списки с подписанными и неподписанными файлами можно так:
List<entitywrapper> unsigned = new ArrayList<>(); List<entitywrapper> signed = new ArrayList<>(); fileList.forEach(fileEntity -> { Entity wrapper = new EntityWrapper(); DiadocMessage_GetApiProtos.Entity parent = getEntityWithId(fileEntity.getParentEntityId(), message); if (parent != null) { wrapper.setEntityId(parent.getEntityId()); wrapper.setFilename(parent.getFileName()); wrapper.setEntityType(parent.getEntityType().name()); wrapper.setAttachmentType(parent.getAttachmentType().name()); DiadocMessage_GetApiProtos.Entity signatureEntity = getSignatureEntityForFileEntity(parent.getEntityId(), currentBoxId, message); if (signatureEntity == null) { unsigned.add(wrapper); } else { signed.add(wrapper); } } }); public static DiadocMessage_GetApiProtos.Entity getSignatureEntityForFileEntity(String fileEntityId, String currentBoxId, DiadocMessage_GetApiProtos.Message message) { Optional<diadocmessage_getapiprotos.entity> optional = message .getEntitiesList() .stream() .filter(entity -> entity.getParentEntityId().equals(fileEntityId) & !entity.getSignerBoxId().equals(currentBoxId) & entity.getEntityType().equals(DiadocMessage_GetApiProtos.EntityType.Signature)) .findFirst(); if (optional.isPresent()) { return optional.get(); } else { return null; } } public static DiadocMessage_GetApiProtos.Entity getEntityWithId(String entityId, DiadocMessage_GetApiProtos.Message message) { Optional<diadocmessage_getapiprotos.entity> optional = message .getEntitiesList() .stream() .filter(entity -> entity.getEntityId().equals(entityId)) .findFirst(); if (optional.isPresent()) { return optional.get(); } else { return null; } } </diadocmessage_getapiprotos.entity></diadocmessage_getapiprotos.entity></entitywrapper></entitywrapper> |
Класс EntityWrapper:
public class EntityWrapper { private String entityId; private String entityType; private String attachmentType; private String filename; //(геттеры и сеттеры) } |
Теперь вы можете составить с помощью списка unsigned напоминание контрагенту о том, что ему нужно подписать документы.