Подскажите пожалуйста, запутался совсем.
Есть сущности UsrVacancies, UsrCandidates и UsrVacancyCandidates. На основе UsrVacancyCandidates сделана деталь. Заходишь на вакансию, и можешь ассайнить кандидатов, одного или нескольких. Если кандидат УЖЕ добавлен для вакансии, то должно быть невозможно добавить этого же кандидата дважды или более.
Когда нажимаешь "Add" в детали, там есть лукапное поле Candidate (имя - UsrCandidates). Что я хочу сделать - чтобы в этом лукапе НЕ отображались те кандидаты, что УЖЕ добавлены для ЭТОЙ вакансии, т.е. отфильтровать его.
Для этого я должен получить список тех кандидатов, что уже добавлены для этой вакансии, и наложить фильтр на лукап - показывать всех кандидатов, КРОМЕ уже добавленных.
Вот как должно быть. Обратите внимание на переменную "candidates", где я захардкодил айдишники.
attributes: {
"UsrCandidates": {
dataValueType: Terrasoft.DataValueType.LOOKUP,
lookupListConfig: {
filter: function() {
var candidates = ["5d4d6b06-4de2-4d23-8e6e-f2ab624af5d0", "3c6f72a7-3218-4f23-b96a-e344bac099f4", "a9b68651-d313-4c83-9007-31a659547bd5"];
var filterGroup = new Terrasoft.createFilterGroup();
var filter1 = Terrasoft.createColumnInFilterWithParameters(
"Id",
candidates);
filter1.comparisonType = Terrasoft.ComparisonType.NOT_EQUAL;
filterGroup.add("filter1", filter1);
return filterGroup;
}
}
}
},
Однако, мне нужно получить эти айдишники, зная Id текущуй вакансии. Вот ESQ запрос, который возвращает эти айдишники.
getCurrentlyAssignedCandidates: function(vacancyId, callback) {
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "UsrVacancyCandidates"
});
esq.addColumn("UsrCandidates", "CandidateId");
esq.filters.add(
"filter1",
this.Terrasoft.createColumnFilterWithParameter(
Terrasoft.ComparisonType.EQUAL,
"UsrVacancies",
vacancyId
)
);
esq.getEntityCollection(function(result) {
var candidates = [];
if (result.success) {
result.collection.each(function(item) {
candidates.push(item.get("CandidateId"));
});
callback.call(this, candidates);
}
});
}
Однако, если вызывать callback в "filter", то он выполняется асинхронно, и сама функция выполняется асинхронно. Получается, что функция "filter" возвращает фильтр (который включает в себя ВСЕХ кандидатов) раньше, чем выполняется callback. Т.е. ничего не фильтруется.
Подскажите, пожалуйста, как это реализовать.
Заранее благодарю!