Добрый день.
Такой вопрос:
Сделал дополнительный фильтр на форме smmActivities --> TeamFilter. Смысл, показывать задания только тех работников, которые принадлежат к выбранной команде.
Работает, но почему-то только один раз. Если я выбираю другую команду или удаляю запись в фильтре, вижу пустой Grid.
Изменения в setupRanges на smmactivities_ds выглядит следующим способом:
X++:
datasourceForTeams = queryBuildDataSource.addDataSource(tablenum(emplTable));
datasourceForTeams.relations(true);
datasourceForTeams.joinMode(JoinMode::ExistsJoin);
.
.
.
rangeForTeams = SysQuery::findOrCreateRange(datasourceForTeams, fieldnum(emplTable, DispatchTeamId));
Изменения в методе executeQuery():
X++:
// If activities are not filtered on any employee
if (!emplFilter && !teamFilter)
{
// Enable/disable ranges
rangeForEmployee.enabled(false);
rangeForPrivate.enabled(false);
rangeForTeams.enabled(false);
rangeRecId.enabled(true);
// To show private and non-private activities for current employee AND non-private acitvities for other employees
qStr = strfmt('((%1 == "%2") || ((%1 != "%2") && (%3 != %4)))', fieldstr(smmActivities, ResponsibleEmployee), smmUtility::getCurrentContact(), fieldstr(smmActivities,Sensitivity), enum2int(smmSensitivity::Privat));
rangeRecId.value(qStr);
}
// If activities are filtered on any employee
else if(emplFilter && !teamFilter)
{
// Enable/disable ranges
rangeForEmployee.enabled(true);
rangeForPrivate.enabled(true);
rangeRecId.enabled(false);
rangeForTeams.enabled(false);
// Set value for filter on employee
rangeForEmployee.value(emplFilter);
// Private activities will be only visible to owner of activities
if (emplFilter != smmUtility::getCurrentContact())
{
rangeForPrivate.value(queryValue(!smmSensitivity::Privat));
}
else
{
rangeForPrivate.value(SysQuery::valueUnlimited());
}
}
else if(teamFilter && !emplFilter)
{
// Enable/disable ranges
rangeForEmployee.enabled(false);
rangeForPrivate.enabled(true);
rangeRecId.enabled(false);
rangeForTeams.enabled(true);
//
rangeForTeams.value(teamFilter);
teamFilterAnyType = teamFilter;
select emplTableloc where emplTableloc.DispatchTeamId == teamFilterAnyType;
if (emplTableloc.EmplId != smmUtility::getCurrentContact())
{
rangeForPrivate.value(queryValue(!smmSensitivity::Privat));
}
else
{
rangeForPrivate.value(SysQuery::valueUnlimited());
}
}
else if (teamFilter && emplFilter)
{
//Enable/disable ranges
rangeForEmployee.enabled(true);
rangeForPrivate.enabled(false);
rangeRecId.enabled(false);
rangeForTeams.enabled(true);
//
rangeForEmployee.value(emplFilter);
rangeForTeams.value(teamFilter);
}
На Контроле:
X++:
boolean modified()
{
boolean ret;
;
ret = super();
// Set team filter
teamFilter = teamFilterControl.text();
// Run query again with the new filtering
smmActivities_ds.executeQuery();
//info(strfmt("%1", teamFilter));
return ret;
}
Прошу совета, что я неправильно делаю.
Спасибо.