Я новичок в alfresco. У меня есть рабочий процесс с помощью кикстарта. Я развертываю его в общем ресурсе alfresco, он работает нормально. В форме рабочего процесса мне нужно умножить два значения текстового поля. Я хочу, чтобы результат умножения отображался в 3-м текстовом поле, как только введите возможны значения в первых двух текстовых полях без нажатия какой-либо кнопки? и как ?
Форма рабочего процесса Alfresco Добавление двух значений текстового поля и автоматическое отображение суммы в третьем текстовом поле
Ответы (1)
Вот несколько фрагментов из примера, который скрывает второе поле на основе раскрывающегося значения в первом поле. У вас есть аналогичное требование, так что это должно помочь.
Сначала отредактируйте конфигурацию формы share-config-custom.xml, чтобы указать, что ваши свойства должны использовать настраиваемые элементы управления формы. Это будет выглядеть примерно так:
<field id="sc:field2" label-id="prop.sc_field2" >
<control template="/com/someco/components/form/controls/dynamicField.ftl" >
<control-param name="maxLength">255</control-param>
</control>
</field>
В этом случае я собираюсь динамически скрыть sc:field2 на основе значения sc:field1. В вашем случае у вас есть три поля, с которыми вы имеете дело: два умножаются, а третье показывает результат. Вам, вероятно, нужен только настраиваемый элемент управления формой в третьем поле. Он может легко получить значения из двух других полей.
Теперь создайте настраиваемый элемент управления формы. В пользовательском элементе управления формой добавьте JavaScript, который привязывается к событию onChange ваших двух полей, чтобы вызвать пользовательскую функцию, которая вычисляет значение.
В моем примере с динамическим скрытым полем я делаю что-то подобное в своем пользовательском элементе управления формой с помощью JQuery:
<@markup id="js">
<@script type="text/javascript" src="${url.context}/res/jquery/jquery-1.6.2-min.js" group="form" />
</@>
<script type="text/javascript">//<![CDATA[
// grab the field1 dropdown element
var field1El = $("#template_x002e_edit-metadata_x002e_edit-metadata_x0023_default_prop_sc_field1");
// declare a function that knows how to show/hide the div
var toggleField2 = function(field1) {
if (field1 === "Show Field2") {
$("#field2").show();
} else {
$("#template_x002e_edit-metadata_x002e_edit-metadata_x0023_default_prop_sc_field2").val('');
$("#field2").hide();
}
}
// bind the field1 dropdown element's change event to a function that calls our toggle function
field1El.bind("change", function(e) {
var selected = $("option:selected", this);
var field2 = this.value;
toggleField2(field2);
});
// invoke the toggle function based on the current value of the dropdown before it is changed
// by the user, ie, when the form is first opened
toggleField2(field1El.find("option:selected").text());
//]]></script>
В вашем случае вы не показываете/скрываете поле на основе выпадающего значения, а вместо этого берете значение двух полей, умножаете их и устанавливаете в третьем поле, но применяется та же логика. Каждый раз, когда любое из двух полей изменяется, вы хотите пересчитать продукт и сохранить его в третьем поле.