Javascript.Объекты
Материал из Hivext Wiki
Работа с объектами
В настоящем уроке продолжим рассматривать примеры использования сервиса Структур на Javascript.
Смотрим документацию
Документация сервиса Структуры.
Для урока выбраны методы:
- CreateObject - создание объекта;
- SetProperty - установить значение свойства;
- GetProperty - получить значение свойства;
- GetObject - получить объект заданного типа по идентификатору;
- GetObjects - получение массива объектов заданного типа;
- GetObjectsByCriteria - получение массива объектов заданного типа и критерия;
- DeleteObjectsByCriteria - удалить объекты заданного типа и критерия.
Важно обратить внимание на особенности работы c объектами:
- Все объекты создаются для заданного идентификатора приложения (APPID);
- Права читать, редактировать и удалять объекты имеет пользователь который создал данный объект;
- Физически создание нового объекта это новая запись в базе данных.
Теоретическая часть закончена, переходим к практической.
Приступаем к разработке
Чтобы вызывать методы сервисов, необходимо получить идентификатор приложения (см. Начинаем разработку).
Помним что идентификатор приложения обязательный параметр у всех методов.
В данном примере воспользуемся гостевым аккаунтом, который используется для тестов.
Разработчик: guest@guest.com
Пароль: guest
Для разработчика guest@guest.com уже создан идентификатор приложения (APPID): 9106d759b6a3ae4b1a790d7b3b78fb23.
Этот идентификатор можно использовать на любом домене. Итак у нас все есть чтобы перейти непосредственно к созданию новых объектов.
// Идентификатор приложения для которого будем создавать объекты.
var sAppid = "9106d759b6a3ae4b1a790d7b3b78fb23";
var sSession; // Здесь будем хранить идентификатор сессии пользователя.
var nUid; // Здесь будем хранить идентификатор пользователя.
var sName; // Здесь будем хранить имя пользователя.
//
// Начнем сеанс пользователя.
//
Users.Authentication.Signin(sAppid, "guest@guest.com", "guest", function(oResponse) {
if(oResponse.result === 0) { // Аутентификация прошла успешно.
// Сохраняем информацию о пользователе.
sSession = oResponse.session;
sUid = oResponse.uid;
sName = oResponse.name;
//
// До начала работы с объектами необходимо подготовить нужный тип данных.
// Пример подготовки нового типа данных для хранения сообщений пользователей.
//
// var oFields = {
// Uid : "int", - идентификатор автора
// Name : "string", - имя автора
// Subject : "string", - тема сообщения
// Content : "string" - текст сообщения
// }
//
// var sFields = toJSON(oFields);
//
// Создаем новый тип данных Post с полями указанными в строке sFields.
// Data.Base.DefineType(sAppid, sSession, "Post", sFields, function(oResponse) {});
//
//
// Приступаем к созданию объекта типа Post.
//
// Значения свойств объекта можно передать в формате JSON сразу при создании объекта.
var oData = {
Uid : sUid,
Name : sName,
Subject : "Тема поста",
Content : "Здесь можно разместить много текста или тегов и текста"
}
var sData = toJSON(oData);
//
// Создаем объект типа Post.
//
Data.Base.CreateObject(sAppid, sSession, "Post", sData, function(oResponse) {
if(oResponse.result === 0) { // Объект создан успешно.
// oResponse.id - идентификатор объекта.
//
// Значения свойств объектов также можно задавать через метод SetProperty.
//
Data.Base.SetProperty(sAppid, sSession, "Post", oResponse.id,
"Subject", "Новая тема", function(oResponse) {
if(oResponse.result === 0) { // Свойство установлено.
}
});
//
// И получать через метод GetProperty.
//
Data.Base.GetProperty(sAppid, sSession, "Post", oResponse.id,
"Name", function(oResponse) {
if(oResponse.result === 0) { // Свойство получено.
// oResponse.value - значение свойства.
}
});
}
});
//
// Рассмотрим несколько вариантов выборки объектов.
//
// Все методы выборки (кроме GetObject) содержат необязательные параметры from и count,
// они используются для постраничной выборки объектов.
// Если реальное число объектов меньше чем задано в count,
// то вернется количество объектов попавшее в диапазон from, from + count.
//
// Метод GetObject - возвращает объект указанного типа и идентификатора.
//
Data.Base.GetObject(sAppid, sSession, "Post", nId, function(oResponse) {
if(oResponse.result === 0) { // Объект выбран успешно.
// oResponse.object - объект.
}
});
//
// Метод GetObjects - возвращает объекты указанного типа.
// В примере ниже выбирается 10 объектов типа Post с индекса 0.
//
Data.Base.GetObjects(sAppid, sSession, "Post", 0, 10, function(oResponse) {
if(oResponse.result === 0) { // Объекты выбраны успешно.
// oResponse.objects - массив объектов.
}
});
//
// Метод GetObjectsByCriteria - возвращает объекты указанного типа и критерия.
// Для критериев используется SQL подобный синтаксис.
//
//
// Запросить все посты автора Joe.
//
sCriteria = "Name LIKE 'Joe'";
Data.Base.GetObjectsByCriteria(sAppid, sSession, "Post", sCriteria, function(oResponse) {
if(oResponse.result === 0) { // Объекты выбраны успешно.
// oResponse.objects - массив объектов.
}
});
//
// Запросить все посты содержащие в теме или тексте слово hivext, без учета регистра.
//
sCriteria = "Subject ILIKE '%hivext%' OR Content ILIKE '%hivext%'";
Data.Base.GetObjectsByCriteria(sAppid, sSession, "Post", sCriteria, function(oResponse) {
if(oResponse.result === 0) { // Объекты выбраны успешно.
// oResponse.objects - массив объектов.
}
});
//
// Удалим все объекты для типа Post.
//
sCriteria = "id IS NOT NULL";
// или
sCriteria = "id > 0";
Data.Base.DeleteObjectsByCriteria(sAppid, sSession, "Post", sCriteria, function(oResponse) {
if(oResponse.result === 0) { // Объекты удалены успешно.
// oResponse.count - количество удаленных объектов.
}
});
//
// Все объекты типа также удаляются, если удаляется тип данных.
//
Data.Base.UndefineType(sAppid, sSession, "Post", function(oResponse) {});
//
// Завершим сеанс пользователя.
//
Users.Authentication.Signout(sAppid, sSession, function(oResponse) {});
}
});
String.prototype.replaceAll = function(s1, s2) { return this.split(s1).join(s2); }
function toJSON(obj) {
switch(typeof obj) {
case "function" : return obj.toString();
case "string" : return "\"" + obj.replaceAll("\"", "\\\"") + "\"";
case "object" :
var str = "";
if(obj == null) return "null";
if(obj instanceof Array) {
for (var i = 0, l = obj.length; i < l; i++) str += ", " + toJSON(obj[i])
if (str.length > 0) str = str.substring(1);
return "[ " + str + " ]";
}
for (var i in obj) str += ", " + i + " : " + toJSON(obj[i]);
return "{ " + (str.length > 0 ? str.substring(1) : str) + " }";
}
return obj;
}
