Требуется реализовать предопределенный поиск заданий, задач, документов, записей справочников в зависимости от ИД текущего пользователя.
Вариант 1. Результаты поиска отображаются в модальном окне
Модальное окно можно открывать различными способами: по кнопке/гиперссылке в карточках документов и записей справочников, по кнопке на панели действий в списке записей справочника или в проводнике. Суть заключается в том, что из JS вызывается сценарий, который возвращает ИД документов.
Прикладной сценарий
Создать сценарий:
// Загрузить описание поиска и получить список критериев.
SearchFactory = Application.SearchFactory
SearchDesciption = SearchFactory.Load('EDOCUMENT_SEARCH')
Criteria = SearchDesciption.SearchCriteria
// Отобрать документы, автором которых является текущий пользователь.
AuthorCriterion = Criteria.Add('ISBEDocAuthor')
UserName = Application.Connection.UserName
AuthorCriterion.Add(ServiceFactory.GetUserByName(UserName).Code)
// Отобрать документы, созданные за последнюю неделю.
CreatedCriterion = Criteria.Add('ISBEDocCreateDate')
CreatedCriterion.AddRange(Today() - 7; Today())
// Получить найденные данные.
FindDocs = SearchDesciption.Execute()
// Заполнить массив, состоящий из ИД найденных документов.
DocsId = ArrayOf()
i = 0
foreach Doc in FindDocs
DocsId = AddElementToArray(DocsId; Doc.ID)
i = i + 1
endforeach
// Вернуть массив с ИД документов.
Result = DocsId
JS
WebAccess.services.script.run("WASearchGetDocs",{})
.success(function (result) {
// Проверить полученные из сценария данные.
if (typeof result === 'undefind' || result.Count === 0) {
// Если за последнюю неделю не было измененных документов,
// вывести сообщение, что документы не найдены.
var toast = new WA.CMP.NTF.Toast()
toast.showMessage("Документы не найдены.");
} else {
// Сгенерировать форму с найденными документами и показать ее в диалоге.
var CP = WA.CMP;
var form = new CP.forms.FormBuilder("last_edit_edoc");
var docObjectLinks = [];
// Для каждого найденного значения сформировать ссылку на документ.
result.forEach(function (item) {
docObjectLinks.push({ "ID": item, "Kind": OBJECT_TYPE.EDOCUMENT });
});
form.addObjectList("Docs", OBJECT_TYPE.EDOCUMENT, docObjectLinks, true);
var dialog = new CP.dialogs.BaseDialog();
dialog.title = L("LAST_OPENED_DOCS");
dialog.html = form.render();
dialog.width = 600;
dialog.isShowCancelButton = true;
dialog.show();
};
})
.fail(function (res) {
console.log('FAIL');
})
Результат:
|
Вариант 2. Панель поиска в проводнике
Требуется в панель Найти добавить кнопку для поиска по записям справочника РКК с реквизитами для поиска Работник и Номер регистрации. В критериях поиска реквизит Работник будет заполняться работником текущего пользователя.
XML
<Extension name="MyExt" title="My_Extension" jsfile="/js/myext.js" class="DIRECTUM.WebAccess.Company.Services,DIRECTUM.WebAccess.Company" >
<SideBar>
<ToolItem type="Search" name="MySearch" tooltip="MySearch" icon="/App_Sprites/SidebarAndExtensions/EDocumentSearch_24.png">
<Criterion name="Работник">
<requisite type="Reference" refcode="РКК" name="Работник" />
</Criterion>
<Criterion name="RRC_REG_NUM">
<requisite type="Reference" refcode="РКК" name="Дополнение" />
</Criterion>
</ToolItem>
</SideBar>
</Extension>
JS
(function (global) {
WA.ready(function () {
WA.CR.sideBar.tabs.MySearch.bind('click', function () {
setTimeout(function () {
fillWorkerReq();
}, 100);
});
});
});
function fillWorkerReq() {
var ajaxData = {
'ReferenceCode': 'РАБ',
'FilterExpression': '[Пользователь]= ' + WA.CR.user.ID,
'FilterValue': '',
'Requisites': ['ИД', 'Наименование'],
'RecordsCount': 1,
'StartFromRecord': 0,
'SortIndex': 0,
'SortDirection': 'desc'
};
WA.SRV.call("/Reference.asmx/GetRecords", ajaxData).done(function (res) {
if (res) {
var id = res[0].Requisites[0].Value;
var displayValue = res[0].Requisites[1].Value;
$('#MySearchРаботник').data('ReferenceSelectInstance').setValue([id, displayValue, displayValue, {}])
}
});
}
Результат:
|