Показать сообщение отдельно
Старый 06.08.2009, 18:05   #1  
Dima_Dima is offline
Dima_Dima
Участник
 
144 / 11 (1) +
Регистрация: 09.10.2008
Дополнительный фильтр на smmActiviies форме.
Добрый день.

Такой вопрос:

Сделал дополнительный фильтр на форме 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;
}
Прошу совета, что я неправильно делаю.

Спасибо.