Как в цепочке документооборота Диадок найти неподписанные контрагентом документы

После того, как вы инициировали цепочку документооборота, вам нужно сохранить возвращенный 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 -&gt; (entity.getEntityType()
                                    // неподписанный контрагентом файл имеет пустое имя файла!
                                    .equals(DiadocMessage_GetApiProtos.EntityType.Attachment) &amp;&amp; StringUtils.isBlank(entity.getFileName())))
                            .collect(Collectors.toList());</diadocmessage_getapiprotos.entity>

Заполнить списки с подписанными и неподписанными файлами можно так:

List<entitywrapper> unsigned = new ArrayList&lt;&gt;();
List<entitywrapper> signed = new ArrayList&lt;&gt;();
fileList.forEach(fileEntity -&gt; {
    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 -&gt; entity.getParentEntityId().equals(fileEntityId)
                        &amp; !entity.getSignerBoxId().equals(currentBoxId)
                        &amp; 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 -&gt; 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 напоминание контрагенту о том, что ему нужно подписать документы.

You can leave a response, or trackback from your own site.

Leave a Reply