Задаю довольно таки распространенный вопрос, как ни странно, я не нашел подобной темы.
Допустим есть поле статус, при его изменении должно автозаполняться другое поле - дата(возможно текстовое или даже справочник). И сразу усложню задание, изменения должны вступить в силу когда поле статус меняет одно конкретное значение в другое(например из "В работе" в "Выполнено").
BPMonline 7.x
Заранее спасибо.
Нравится
Здравствуйте, данный кейс решается стандартной подпиской на событие. И выполнением интересующей Вас логики по событию.
Подписка на событие в том или ином виде проскакивала на форуме, к примеру:
http://www.community.terrasoft.ua/forum/topic/13908
А по скольку Вы говорите про статусы "В работе", "Выполнено" могу предположить что речь идет про карточку активности, а в ней уже есть, если посмотреть исходный код, в родительских схемах, атрибут:
[javascript]
"Status": {
"isRequired": true,
lookupListConfig: {
columns: ["Finish"]
},
dependencies: [
{
columns: ["Status"],
methodName: "onStatusChanged"
}
]
},
[/javascript]
В котором задан метод "onStatusChanged" на изменение данной колонки, и метод этот уже написан, достаточно его переопределить, и дописать недостающей логики.
К примеру:
[javascript]
define("ActivityPageV2", ["ActivityPageV2Resources", "GeneralDetails"],
function(resources, GeneralDetails) {
return {
entitySchemaName: "Activity",
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
]/**SCHEMA_DIFF*/,
attributes: {
"StatusValue": {
dataValueType: this.Terrasoft.DataValueType.TEXT
}
},
methods: {
onEntityInitialized: function() {
this.callParent(arguments);
var statusValue = this.get("Status");
this.set("StatusValue", statusValue);
},
onStatusChanged: function() {
this.callParent(arguments);
var oldStatus = this.get("StatusValue");
var statusValue = this.get("Status");
console.log("был: " + oldStatus.displayValue + ", стал: " + statusValue.displayValue);
// тут любая логика проверки, и установки
if (oldStatus.displayValue === "Не начата" && statusValue.displayValue === "В работе") {
this.set("DetailedResult", "Взята в работу");
}
this.set("StatusValue", statusValue);
}
},
rules: {},
userCode: {}
};
});
[/javascript]
"Щиголь Максим" написал:А по скольку Вы говорите про статусы "В работе", "Выполнено" могу предположить что речь идет про карточку активности
Это карточка заказа, нужно поставить дату окончания(текущую дату) в определенное поле когда статус стает определенным значением. Не знаю как это работает но у меня выбивает ошибку, с помощью вывода данных в консоль определил что выбивает на
"Щиголь Максим" написал:this.set("StatusValue", statusValue);
подумал раз это поле то и тип должен быть не DataValueType.TEXT а DataValueType.LOOKUP, но ничего не помогло, этот код: var statusValue = this.get("Status"); срабатывает(вывожу в консоль данные из statusValue)
[javascript]
this.set("StatusValue", statusValue);
[/javascript]
В данном месте ошибка может быть только по двум причинам:
1) неправильный контекст выполнения.
2) проблемы с аттрибутом StatusValue.
Предоставте скриншот ошибки в консоли браузера и, по возможности, код вашей реализации данной схемы для более детального анализа причин ошибки.
Получилось, поменял местами немного, написал так:
this.set("StatusValue", statusValue.displayValue);
а в остальных местах пользовался просто statusValue и oldStatus