что значит этот код ?

Доброе время суток... что значит кусок кода

 Utils.GetDatasetByCode("ds_Incident", "IncidentMark");

понятно что в первой строке выбирается ДатаСет по "ds_Incident", но что значит второй параметр ""IncidentMark" ?

Нравится

8 комментариев

Вообще, посмотрите в Utils и определите, где используется второй параметр. Обычно он служит в качестве ключа в кеше для получаемого экземпляра.

IncidentMark - поле в датасете Инциденты (оценка инцидента).

Сергей, хотелось бы уточнить, откуда данная строка кода?

"Alimova Anna" написал:Сергей, хотелось бы уточнить, откуда данная строка кода?

Анна, добрый день... это строка из кода web-формы.
собственно если бы она звучала как

Utils.GetDatasetByCode("ds_Incident");

Мне было бы понятно, но что значит второй параметр... Станислав написал что это ключеове поле, но каково его назначение ?

Файл Utils.cs описівает функцию следующим образом:

    public static DBDataset GetDatasetByCode(string DatasetCode, string Key) {
        DBDataset Dataset = (DBDataset)GetTSServiceByCode(DatasetCode, Key);
        if (Key != "") {
            Dataset.Close();
        }
        return Dataset;
    }

В данном случае IncidentMark - ключевое поле, т.е. поле по которому мы будем отличать один элемент датасета от другого.

"Alimova Anna" написал: поле по которому мы будем отличать один элемент датасета от другого.

ок, спасибо... чуток попозже "переварю" эту информацию

Сергей, метод GetTSServiceByCode кеширует сервисы. Второй параметр необязателен. Если его не указывать, то при первом вызове создастся новый экземпляр и занесется в кэш, а при втором будет использован этот же экземпляр, который был помещен в кеш. Таким образом в двух разных местах программного кода будет использован один и тот же экземпляр сервиса. Если в одном месте Вы наложили фильтры, то в другом месте они Вам могут мешать, тогда в каждом из этих мест Вы добавляете второй параметр и получаете отдельные, но при этом все же кешируемые экземпляры сервисов.

все-таки осталось недопонимание...
web-форма

DBDataset Incident = Utils.GetDatasetByCode("ds_Incident", "AddRemindingToIncident");
CoreUtils.ApplyDatasetFilter(Incident, "ID", IncidentID, true);
....

AddRemindingToIncident - вообще не понятно что такое... нет такого значения в БД. ( искал поиском в файлах в выгруженных XML ) ключевое поля это просто набор символов ?
т.е. "Incident" будет хранить выборку из таблицы инцидентов, с фильтром по ключу IncidentID ?
но тогда какая область жизни и видимости этой выборки - до закрытия окна браузера ?

помимо GetDatasetByCode когда еще записывается в кеш выборка ?
правильно понимаю что при ApplyDatasetFilter должны также кешироваться значения

экземпляры сервисов = какой нибудь SELECT из БД ?

"Sergey Panin" написал: нет такого значения в БД

И это хорошо, т.к. верно
"Sergey Panin" написал:ключевое поля это просто набор символов

произвольный набор символов и чаще всего используется в качестве ключа имя функции, внутри которой происходит вызов.
"Sergey Panin" написал:т.е. "Incident" будет хранить выборку из таблицы инцидентов, с фильтром по ключу IncidentID ?

Не совсем. сервис датасета не хранит данные, это экземпляр класса Dataset, который хранит ссылку на экземпляр класса SelectQuery, выполнив метод которого Execute(), можно получить данные, но сами данные они не хранят.
"Sergey Panin" написал:помимо GetDatasetByCode когда еще записывается в кеш выборка ?

Все методы не назову, но Вы и сами можете кешировать сервисы, а следовательно где угодно.
"Sergey Panin" написал:правильно понимаю что при ApplyDatasetFilter должны также кешироваться значения

Нет, поскольку значения не хранятся, а эта функция только изменяет объект даже не столько сам Dataset, сколько SelectQuery, на который он ссылается.
"Sergey Panin" написал:экземпляры сервисов = какой нибудь SELECT из БД

Экземпляр сервиса это экземпляр объекта соответствующего класса. Бывают сервисы запроса (SelectQuery), набора данных (Dataset), окна(Window) и т.д. В случае SelectQuery он содержит такие поля как From, коллекцию колонок, коллекцию фильтров и т.д., а также метод, выполнив который можно получить какой-нибудь SELECT из БД. В общем случае можно сказать, что сервис SelectQuery содержит запрос в разобранном виде.

Показать все комментарии