Событие обновления CE: есть ли способ передать значения свойств до / после в рабочий процесс?

Я настроил подписку рабочего потока FileNet на события Add, Update и Delete. Рабочий процесс вызывает компонент Java для отправки уведомления (третьей стороне).

Мы хотели бы видеть значения свойств "до" и "после" в уведомлении о событиях "Обновление".

У объекта "Событие", запускающего подписку, есть член "Модифицированные свойства", поэтому я надеялся, что смогу просто создать соответствующий строковый массив "Modified Properties" в рабочем процессе и получить карту подписки "Update.ModifiedProperties = ModifiedProperties". К сожалению, "Modified Properties" события дает только значение NEW, а не значение "before". <= Так что я не вижу способа получить значения "до / после" непосредственно из подписки...

Похоже, что объект "UpdateEvent" также имеет член "OriginalObject"... и я мог бы использовать Java API для получения значения "before" из OriginalObject.

Вопрос: звучит ли это правдоподобным способом получения значений свойств документа до / после?

Вопрос: Есть идеи, как передать объект "OriginalObject" из подписки в рабочий процесс, чтобы компонент Java мог использовать его?

Целевая платформа - P8 5.2.1; Я занимаюсь разработкой на P8 5.5.

2 ответа

Решение

Вы правы, единственный путь к исходным значениям - через объект OriginalObject. И самый быстрый способ получить данные для рабочего процесса - использовать подписываемый объект.

Следовательно, решение вашей проблемы - определить пользовательский объект, содержащий свойства, описывающие новые и старые значения свойств. Вы создаете этот пользовательский объект в пользовательском обработчике событий, который запускается при событии обновления из документа. Здесь вы можете заполнить свойства пользовательского объекта, используя оригинальный объект:

Document document = (Document) event.get_OriginalObject();;
Iterator<?> iterator = event.get_ModifiedProperties().iterator();
while (iterator.hasNext()) {
    String modifiedProperty = (String) iterator.next();

    // TODO: Fetch the values from the original object 
    // and set them on the custom object. The details depend
    // on the data structure you choose.
}

Затем вы создаете подписку Workflow, запускаемую при создании пользовательского объекта. Вы можете сопоставить свойства вашего пользовательского объекта с полями данных вашего рабочего процесса. В рабочем процессе, который запущен, вы можете определить вложение и указать, что пользовательский объект является исходным вложением. Используя методы очереди CE_Operation, вы можете теперь и удалить пользовательский объект, когда ваша обработка будет завершена.

      if(objEvent instanceof UpdateEvent) { try { String strModifiedProperties = ""; UpdateEvent updateEvent = (UpdateEvent) objEvent; StringList propertyNames = updateEvent.get_ModifiedProperties(); Iterator iterModifiedProps = propertyNames.iterator(); while(iterModifiedProps.hasNext()) { String modifiedProperty = (String) iterModifiedProps.next(); strModifiedProperties = strModifiedProperties+modifiedProperty+","; } strModifiedProperties = strModifiedProperties.substring(0, strModifiedProperties.lastIndexOf(",")); } catch (Exception e) { System.out.println("onEvent : Exception while executing UpdateEvent: "+e.getMessage()); } }
Другие вопросы по тегам