This is an old revision of the document!
В данном разделе описаны методы класса DBConnector для получения данных статей (как обычных полей, так и связей).
public DataTable GetContentData(string siteName, string contentName, string fields, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive, bool cacheResult, double cacheInterval, bool useClientSelection, bool withReset) public DataTable GetContentData(string siteName, string contentName, string fields, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive, bool cacheResult, double cacheInterval) public DataTable GetContentData(string siteName, string contentName, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive) public DataTable GetContentData(string siteName, string contentName, string fields, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive)
Данный метод был создан как упрощенный вариант получения данных из контента вместо более тяжелого Publishing Container для сайтов, построенных на объектах QP7. Но он может использоваться и для сайтов/приложений, созданных по другой технологии.
Метод возвращает не саму таблицу из кэша, а ее копию, так что ее можно изменять.
Для связей многие-ко-многим и многие-к-одному метод возвращает данные, которые реально хранятся в таблице контента.
Пример:
long total = 0; DataTable dt = cnn.GetContentData("Sandbox NET", "Events", "[content_item_id], [Title]", "[Location] = 1662", "[Modified] DESC", 1, 20, ref total, 1, "Published", 0, 0);
public DataTable GetCachedContentData(string siteName, string contentName, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive) public DataTable GetCachedContentData(string siteName, string contentName, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive, bool useClientSelection) public DataTable GetCachedContentData(string siteName, string contentName, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive, double cacheInterval) public DataTable GetCachedContentData(string siteName, string contentName, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive, double cacheInterval, bool useClientSelection) public DataTable GetCachedContentData(string siteName, string contentName, string fields, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive) public DataTable GetCachedContentData(string siteName, string contentName, string fields, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive, bool useClientSelection) public DataTable GetCachedContentData(string siteName, string contentName, string fields, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive, double cacheInterval) public DataTable GetCachedContentData(string siteName, string contentName, string fields, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive, double cacheInterval, bool useClientSelection) public DataTable GetCachedContentData(string siteName, string contentName, string fields, string whereExpression, string orderExpression, long startRow, long pageSize, ref long totalRecords, byte useSchedule, string statusName, byte showSplittedArticle, byte includeArchive, bool useClientSelection, bool withReset)
Аналог метода GetContentData, кэширующий результат во всех случаях (если кэширование не запрещено на уровне экземпляра класса DBConnector).
public string GetContentItemLinkIDs(string linkFieldName, long itemId) public string GetContentItemLinkIDs(string linkFieldName, string itemIds) public string GetContentItemLinkIDs(int linkId, long itemId) public string GetContentItemLinkIDs(int linkId, string itemIds) public string GetContentItemLinkIDs(int linkId, long itemId, bool isManyToMany) public string GetContentItemLinkIDs(int linkId, string itemIds, bool isManyToMany)
Получение данных для полей типа Many-to-Many и Many-to-One. Тип связи задается параметром isManyToMany (значение по умолчанию - true). Связь задается либо именем поля в контенте (параметр linkFieldName), либо идентификатором связи (параметр linkId).
Параметр linkId имеет разный смысл для полей типа Many-to-Many и Many-to-One: для Many-to-Many – это идентификатор связи (записи в таблице CONTENT_TO_CONTENT), для Many-to-One – это идентификатор базового поля One-to-Many (записи в таблице CONTENT_ATTRIBUTE). Эти идентификаторы хранятся в соответствующих полях контентной таблицы (CONTENT_NNN) и могут быть получены методом GetContentData, что позволяет избежать дополнительных запросов к базе.
Идентификатор статьи, для которой ищутся связи, можно задать параметром itemId. Если нужно найти связи сразу для нескольких статей, можно воспользоваться одной из перегруженных версий метода, принимающей параметр itemIds - строку идентификаторов статей через запятую.
Результат возвращается в виде строки идентификаторов, связанных статей через запятую. К результирующей строке всегда добавляется 0, так что строка никогда не пустая, и ее можно использовать в SQL-конструкции IN без дополнительного кода.
На поведение данного метода влияют свойства IsStage и CacheData.
Если IsStage == true
, то возвращаются текущие версии полей Many-to-Many и Many-to-One, иначе только опубликованные. Если CacheData == true
, то результат выполнения кэшируется на интервал времени InternalShortExpirationTime.
public string GetRealContentItemLinkIDs(string linkFieldName, long itemId) public string GetRealContentItemLinkIDs(string linkFieldName, string itemIds) public string GetRealContentItemLinkIDs(int linkId, long itemId) public string GetRealContentItemLinkIDs(int linkId, string itemIds) public string GetRealContentItemLinkIDs(int linkId, long itemId, bool isManyToMany) public string GetRealContentItemLinkIDs(int linkId, string itemIds, bool isManyToMany)
Поведение данного метода полностью совпадает с методом GetContentItemLinkIds, за исключением того, что результат его выполнения не кэшируется вне зависимости от свойства CacheData.
public string GetContentItemLinkQuery(string linkFieldName, long itemId) public string GetContentItemLinkQuery(string linkFieldName, string itemIds) public string GetContentItemLinkQuery(int linkId, long itemId) public string GetContentItemLinkQuery(int linkId, string itemIds) public string GetContentItemLinkQuery(int linkId, long itemId, bool isManyToMany) public string GetContentItemLinkQuery(int linkId, string itemIds, bool isManyToMany)
Метод похож на GetContentItemLinkIds, но он возвращает не результат запроса к базе, а сам SQL-запрос.
Discussion