#database #alfresco #activiti
#База данных #на свежем воздухе #activiti
Вопрос:
У меня есть рабочий процесс Alfresco (5.2.4), который выполняется на движке activiti. Когда пользователь отправляет задачу и пользовательский блок задач завершен, я получаю эту ошибку:
2019-03-28 10:02:28,024 ERROR [impl.interceptor.CommandContext] [http-bio-8080-exec-17] Error while closing command context
org.apache.ibatis.exceptions.PersistenceException:
### Error updating database. Cause: org.postgresql.util.PSQLException: ERRORE: il valore è troppo lungo per il tipo character varying(255)
### The error may involve org.activiti.engine.impl.persistence.entity.HistoricTaskInstanceEntity.insertHistoricTaskInstance-Inline
### The error occurred while setting parameters
### SQL: insert into ACT_HI_TASKINST ( ID_, PROC_DEF_ID_, PROC_INST_ID_, EXECUTION_ID_, NAME_, PARENT_TASK_ID_, DESCRIPTION_, OWNER_, ASSIGNEE_, START_TIME_, CLAIM_TIME_, END_TIME_, DURATION_, DELETE_REASON_, TASK_DEF_KEY_, FORM_KEY_, PRIORITY_, DUE_DATE_, CATEGORY_, TENANT_ID_ ) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
### Cause: org.postgresql.util.PSQLException: ERRORE: il valore è troppo lungo per il tipo character varying(255)
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:172)
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:157)
at org.activiti.engine.impl.db.DbSqlSession.flushRegularInsert(DbSqlSession.java:830)
at org.activiti.engine.impl.db.DbSqlSession.flushPersistentObjects(DbSqlSession.java:811)
at org.activiti.engine.impl.db.DbSqlSession.flushInserts(DbSqlSession.java:794)
at org.activiti.engine.impl.db.DbSqlSession.flush(DbSqlSession.java:615)
Что касается того, что я проверил до сих пор, я обнаружил, что activiti автоматически сохраняет историю «шагов», которые выполняются внутри рабочего процесса, и из-за этого выдает ошибку.
Я хотел бы знать, есть ли какое-либо определение таблицы DB, которое я могу найти, чтобы определить, какой столбец может превышать общее количество символов 255.
В случае, если я не могу изменить свой код javascript по завершении задачи пользователя, есть ли способ увеличить это значение длины?
Спасибо
PS: Я нашел эту документацию для activiti, но там ничего нет об определении DB
Обновить
Я смог подключиться напрямую к моей activiti DB, выполнив поиск свойств соединений внутри alfresco-global.properties. Поэтому я могу видеть структуру таблицы и искать поля varchar (255). Их 7:
- Имя_
- владелец_
- назначенный_
- form_key_
- Категория_
- tenant_id_
Кто-нибудь знает, как просмотреть печать точного запроса, который выполняет activiti?
Ответ №1:
Я нашел причину ошибки моего activiti query в моем определении рабочего процесса. Проблема заключалась в неполном свойстве activiti:assignee. Я написал activiti:assignee="${mywf_assignee}"
вместо activiti:assignee="${mywf_assignee.properties.userName}"
. Таким образом, в основном запрос будет пытаться записать весь nodeRef внутри assignee_
столбца, который содержит более 255 символов.
К сожалению, я не нашел способа показать activiti завершенный sql-запрос.
Комментарии:
1. Хорошо, что вы нашли и исправили. Надеюсь, это будет полезно и кому-то еще