Невизуальный тэг, отвечающий за работу с источником данных.
datastore умеет выполнять 5 команд: refresh, delete, update, insert, check-unique. Для каждой команды свой вложенный тэг.
Полная запись:
<datastore master="..." master-link="..." onBeforeDelete onAfterDelete onBeforeInsert onAfterInsert onBeforeRefresh onAfterRefresh > <refresh source-type="sql | webdb" table-name="..." id-field="..." where="..." order-by="..." group-by="..." having="..." name="webdb_command_name" method="..."> SQL </refresh> <delete source-type="sql | webdb" table-name="..." id-field="..." where="..." name="webdb_command_name" method="..."> SQL </refresh> </datastore>
, где refresh.name по умолчанию: sql: «select * from » + table-name | webdb: «$» + table-name + ».view»
delete.name по умолчанию: sql: «delete from » + table-name + » where » + id-field + »=…» | webdb: «$» + table-name + ».delete» (id записи передается в параметре с именем id-field)
refresh.method, delete.method - ручные методы выполнения команд для сложных случаев
source-type - для каждого действия может быть свой. Как следствие, большая гибкость в работе.
master-link пишется в формате: sql: «local_field1:master_field_with_value1, local_field2:master_field_with_value2, …» | webdb: «param_name1:master_filed_with_value1, param_name2:master_field_with_value2, …»
Краткая запись:
<datastore table-name="..." id-field="..." source-type="..." master="..." master-link="..." name="webdb_refresh_command_name" where="..." order-by="..." group-by="..." having="..."> SQL </datastore>
здесь table-name, id-field, source-type - копируются во все тэги (<refresh>, <delete>)
Среднекраткая запись (префикс атрибута - это вложенный тэг):
<datastore refresh-table-name="..." refresh-id-field="..." ... delete-table-name="..." delete-type="..." ... ... >
Таким образом можно читать/писать в атрибуты вложенных тэгов.
Название | Тип | Описание |
---|---|---|
id | string | Идентификатор объекта. |
source-type | db | webdb | none | Тип источника данных. db - работа с СУБД, webdb - работа с прикладным вэб-сервером, none - генерация пустой таблицы размерностью datastore.cols x datastore.rows (если они указаны) |
cmd | string | Имя команды на Веб-сервере, в случае работы с WebDB |
query | string | Задает объект запроса для общения с СУБД. |
connect | string | Задает объект типа connect. |
sql | string | Текст запроса. По умолчанию, sql=«select * from » + <table-name> . Т.е. достаточно задать table-name и сделать refresh. ![]() |
table-name | string | Идентификатор объекта. |
id-field | string | Имя таблицы. Необходимо для выполнения операции «удалить запись». |
cols | string | Регулирует кол-во колонок. |
rows | string | Регулирует кол-во строк. (Рекомендуется использовать при описании view, в то время как add-row - во время работы) |
master | string | Ссылка на master datastore, datastore_id или view_id |
where | string | соответствующий кусок sql-запроса |
group-by | string | соответствующий кусок sql-запроса |
having | string | соответствующий кусок sql-запроса |
order-by | string | соответствующий кусок sql-запроса |
master-link | string | для организации связи master-detail sql: «local_field1:master_field_with_value1, local_field2:master_field_with_value2, …» webdb: «param_name1:master_filed_with_value1, param_name2:master_field_with_value2, …» |
parent-field | string | имя поля для возможности автоматического добавления новых дочерних записей в БД. |
last-generated-id | string | Возвращает последний сгенерированный id после сохранения новой записи. |
rows | number | Кол-во строк для ручной генерации пустой таблицы. |
cols | number | Кол-во колонок для ручной генерации пустой таблицы. |
Название | Тип | Описание |
---|---|---|
onBeforeRefresh | code | Событие возникает перед обновлением. Правила описания см. (Описание событий в ApplicationXML). |
onAfterRefresh | code | Событие возникает после обновления. Правила описания см. (Описание событий в ApplicationXML). |
onEmptyRefresh | code | Событие возникает при пустом результате запроса. Правила описания см. (Описание событий в ApplicationXML). |
onBeforeDelete | code | Событие возникает перед удалением записи. Правила описания см. (Описание событий в ApplicationXML). |
onAfterDelete | code | Событие возникает после удаления записи. Правила описания см. (Описание событий в ApplicationXML). |
onErrorDelete | code | Событие возникает, если sql-сервер вернул ошибку. Правила описания см. (Описание событий в ApplicationXML). |
datastore.checkUnique.onBeforeCheckUnique
datastore.checkUnique.onAfterCheckUnique
datastore.checkUnique.onErrorCheckUnique
datastore.update.onBeforeUpdate
datastore.update.onAfterUpdate
datastore.update.onErrorUpdate
datastore.update.log-datetime
datastore.update.log-datetime-field
Поддерживается связывание datastore по принципу master-detail.
Связывание описывается фактом вложения одного <datastore> в другой:
<datastore id="ds1" table-name="order_client"> <datastore id="ds2" table-name="order_client_detail" master-link="order_id:id"/> </datastore>
Во вложенном datastore будут загружены записи, связанные с первой записью верхнего datastore.
Количество вложений (связей master-detail) неограниченно.
Рекомендации по использованию datastore:
Если используется ручная установка данных view.setData(), то следует самостоятельно ставить курсор на первую запись.
Если используется datastore, он сам позаботится об этом.
Поддерживается зарезервированное слово 'last' в качестве первого индекса массивов datastore (view), query.
Поддерживаются параметры вида %my_param в произвольном месте sql-запроса. Подставляются значения, переданные в <datastore> в виде param:my_param=value.
size() - кол-во записей.
where(hash) - добавить дополнительное динамическое условие в секцию where в формате: local_field_name ⇒ value. Строковое value нужно добавлять с кавычками.
save() - сохранить изменения в текущем datastore и подчиненных ему в БД.
refresh() - обновить содержимое datastore. Содержимое подчиненных datastore будет обновлено автоматически (для первой записи в master datastore).
refreshSlaves() - обновить содержимое подчиненных относительно данного datastore.
refreshSlaves(rowNum) - обновить содержимое подчиненных относительно записи номер rowNum данного datastore.
addSlave(datastore) - добавить новый datastore в список подчиненных. возвращает список подчиненных datastore.
removeSlave(datastore | id) - удалить указанный datastore из списка подчиненных. возвращает список подчиненных datastore.
getSlaves() - возвращает список подчиненных datastore.
setParentDatastore(datastore) - установить связь данного подчиненного datastore с родительским (master).
getUpdatingId() - возвращает id записи, которая в данный момент обрабатывается (при удалении/обновлении/добавлении).
clearParams() - очищает значение параметров datastore. (Нужно вызывать вручную перед установкой параметров datastore, в случае работы с WebDB)
setParam(param_name, value) - установка параметра datastore. (в случае работы с WebDB)
restoreById(id_value_of_record) - возвращает запись из буфера удаленных записей в первичный буфер.
getMetadata() - возвращает метаданные.
getMetadata().addStringColumn(column_name) - добавляет колонку строкового типа.
getMetadata().addNumberColumn(column_name) - добавляет колонку целочисленного типа.
getMetadata().addDecimalColumn(column_name) - добавляет колонку числового типа с плавающей точкой.
getMetadata().addDateColumn(column_name) - добавляет колонку типа date.
getMetadata().addTimeColumn(column_name) - добавляет колонку типа time.
getMetadata().addDatetimeColumn(column_name) - добавляет колонку типа datetime.