Для запроса параметров отчетов, сценариев, действий, фильтрации справочников в системе Directum могут использоваться прикладные диалоги. Чтобы эти диалоги отображались в веб-клиенте, их нужно дополнительно вызывать. В результате при запуске отчета, справочника, действия или сценария будет отображаться диалог запроса параметров. Когда пользователь заполнит параметры, реквизиты диалога заполнятся введенными значениями. На основании этих данных сформируется отчет, откроется отфильтрованный справочник и т.д.
Если отчет запускается с закладки «Запустить» или по ссылке (ссылка копируется из десктоп-клиента и вставляется в браузер), то для вызова диалога укажите его имя в XML-файле веб-модуля:
<Reports>
<Report name="ReportName" getparams="fromdialog" dialogname="DialogName"/>
</Reports>
Если отчет запускается по кнопке на панели действий, то для показа диалога в веб-клиенте воспользуйтесь функциями клиентского API:
• | для аналитических отчетов: |
WebAccess.factories.reports("ReportName").queryParamsAndExecute().done(function(report) {
report.open();
});
• | для интегрированных отчетов: |
WebAccess.factories.reports("ReportName").queryParamsAndExecuteIntegrated().done(function(report) {
report.open();
});
При разработке отчетов, запрашивающих параметры с помощью прикладных диалогов, используйте прикладную функцию ShowDialog вместо вызова метода Show объекта IDialog. Если отчет запущен в веб-клиенте, то функция передаст значения, введенные в диалоге, в объект IDialog. Если отчет запущен в десктоп-клиенте, то функция покажет окно диалога. В результате в обоих случаях в дальнейшем расчете можно использовать свойства и методы IDialog, как если бы отчет разрабатывался только для использования в десктоп-клиенте. Данная рекомендация актуальна для отчетов, наличие запроса параметров для которых не зависит от каких-либо условий, т.е. происходит всегда.
// Создать и показать диалог запроса параметров.
Dialog = Dialogs.AssignmentExecutionDeadlineControl.CreateNew
ShowDialog(Dialog)
if Dialog.Result = mrOk or IsWebRuntimeContext()
StartDate = Dialog.Requisites('Date').AsString
EndDate = Dialog.Requisites('Date2').AsString
...
endif
Если нужно открыть отфильтрованный справочник, запросив параметры фильтрации в диалоге, укажите в XML-файле веб-модуля javascript-функцию, которая сработает перед открытием справочника:
<Extension
...
<RunTree>
<TreeNode type="Reference"
refcode="РАБ"
caption="ACTUAL_WORKERS"
filter='[СтатУтв]= "+" & [Состояние]="Д" '
jsaction="return ShowDialog(this);"/>
</RunTree>
</Extension>
function ShowDialog(ReferenceName) {
WA.FC.dialogs.getDialogByName('DialogName').done(function (dialog) {
dialog.show();
dialog.bind(dialog['class'].EVENT.AFTER_ACTION, function () {
var ref = WA.FC.references(ReferenceName).toURL();
ref.setParam('filter', '[Состояние]=' + dialog.form.requisites["Sost"].getValue());
ref.open();
});
});
return false;
};
Файл с текстом функции следует размещать в подпапке js корневой папки веб-сайта.
Для показа диалога вызовите функцию showDialogAndExecuteAction у текущего объекта:
WebAccess.current.showDialogAndExecuteAction('ActionName','DialogName')
Для работы с диалогом в действии используйте прикладную функцию ShowDialog (по аналогии с использованием для отчетов).
Примечание
Диалог в действии нельзя вызывать среди прикладных вычислений. Действие вызывается после вызова диалога.
Для показа диалога вызовите у указанного сценария функцию showDialogAndExecute:
WebAccess.factories.scripts("ScriptName").showDialogAndExecute('DialogName').done(function(data) { console.log(data);
});
Для работы с диалогом в сценарии используйте прикладную функцию ShowDialog (по аналогии с использованием для отчетов).
© Компания Directum, 2020 | Сообщество пользователей Directum |