Регистрация  |  Вход

Отслеживание изменений обекта

Здравствуйте!
Есть обект в базе, который содуржыт 150 полей. Тепер на вф странице юзер водин информацию в ети поля, и если были какието изменения, то нужно делать апдейт. Можно както ето реализовать красиво?
Просто есть идея сделать 150 дополнительных полей(property), и в них смотреть:
if (value != someField) {isChange = true;...;}

И если isChange = true, то в таком случае деалть апдейт.

Всегда делать апдейт не подходит, нужно сделать имено "ленивый" апдейт.

Здравствуйте!
Есть обект в базе, который содуржыт 150 полей. Тепер на вф странице юзер водин информацию в ети поля, и если были какието изменения, то нужно делать апдейт. Можно както ето реализовать красиво?
Просто есть идея сделать 150 дополнительных полей(property), и в них смотреть:
if (value != someField) {isChange = true;...;}

И если isChange = true, то в таком случае деалть апдейт.

Всегда делать апдейт не подходит, нужно сделать имено "ленивый" апдейт.

talex
Здравствуйте!
Есть обект в базе, который содуржыт 150 полей. Тепер на вф странице юзер водин информацию в ети поля, и если были какието изменения, то нужно делать апдейт. Можно както ето реализовать красиво?
Просто есть идея сделать 150 дополнительных полей(property), и в них смотреть:
if (value != someField) {isChange = true;...;}

И если isChange = true, то в таком случае деалть апдейт.

Всегда делать апдейт не подходит, нужно сделать имено "ленивый" апдейт.

Делай WorkFlow на отлавливание изменений в конкретных полях и в зависимости от этого обновляй что хочешь. Самый простой и быстрый метод.

[quote="talex"]Здравствуйте!
Есть обект в базе, который содуржыт 150 полей. Тепер на вф странице юзер водин информацию в ети поля, и если были какието изменения, то нужно делать апдейт. Можно както ето реализовать красиво?
Просто есть идея сделать 150 дополнительных полей(property), и в них смотреть:
if (value != someField) {isChange = true;...;}

И если isChange = true, то в таком случае деалть апдейт.

Всегда делать апдейт не подходит, нужно сделать имено "ленивый" апдейт.[/quote]

Делай WorkFlow на отлавливание изменений в конкретных полях и в зависимости от этого обновляй что хочешь. Самый простой и быстрый метод.

Точнее, есть страница редактирования обекта, на ней 150 полей, этого обекта, и если какое-то поле изменилось, то нужно сделать update етого обекта. На странице пока что просто стоят input'и с value="ourRecord.someField", где ourRecord обект с базы который нужно обновить, если были изменения.

Точнее, есть страница редактирования обекта, на ней 150 полей, этого обекта, и если какое-то поле  изменилось, то нужно сделать update етого обекта. На странице пока что просто стоят input'и с value="ourRecord.someField", где ourRecord обект с базы который нужно обновить, если были изменения.

wilder
talex
Здравствуйте!
Есть обект в базе, который содуржыт 150 полей. Тепер на вф странице юзер водин информацию в ети поля, и если были какието изменения, то нужно делать апдейт. Можно както ето реализовать красиво?
Просто есть идея сделать 150 дополнительных полей(property), и в них смотреть:
if (value != someField) {isChange = true;...;}

И если isChange = true, то в таком случае деалть апдейт.

Всегда делать апдейт не подходит, нужно сделать имено "ленивый" апдейт.

Делай WorkFlow на отлавливание изменений в конкретных полях и в зависимости от этого обновляй что хочешь. Самый простой и быстрый метод.


Про WorkFlow даже не подумал что можно сделать . Если через код то тебе надо тогда два объекта один который в базе,другой ты например создаешь на страницы.И потом их сравниваешь через мета данные

Пример:
fieldMap = Schema.SObjectType.someSobject.fields.getMap();

update someRecords(sobject source ,sobject target){

for (string key : fieldMap.keySet()) {
Schema.SObjectField f = fieldMap.get(key);
Boolean access = f.getDescribe().isAccessible();


if ((access) && (key != 'ownerId')) {
Object valueSource = source.get(key);
Object valueTarget = target.get(key);

if ((valueSource != valueTarget) && (valueSource != null)) {
if (((valueTarget == false) || (valueTarget == true))) {

target.put(key, valueTarget);
} else {
target.put(key, valueSource);
}

}
Почти что готовый пример для тебя, я насколько помню тебе достаточно иметь ID объекта и значение тех филдов которые изменили что бы его за Update тить.

[quote="wilder"][quote="talex"]Здравствуйте!
Есть обект в базе, который содуржыт 150 полей. Тепер на вф странице юзер водин информацию в ети поля, и если были какието изменения, то нужно делать апдейт. Можно както ето реализовать красиво?
Просто есть идея сделать 150 дополнительных полей(property), и в них смотреть:
if (value != someField) {isChange = true;...;}

И если isChange = true, то в таком случае деалть апдейт.

Всегда делать апдейт не подходит, нужно сделать имено "ленивый" апдейт.[/quote]

Делай WorkFlow на отлавливание изменений в конкретных полях и в зависимости от этого обновляй что хочешь. Самый простой и быстрый метод.[/quote]
Про WorkFlow даже не подумал что можно сделать :) . Если через код то тебе надо тогда два объекта один который в базе,другой ты например создаешь на страницы.И потом их сравниваешь через мета данные

Пример:
fieldMap = Schema.SObjectType.someSobject.fields.getMap();

update someRecords(sobject source ,sobject target){

 for (string key : fieldMap.keySet()) {
            Schema.SObjectField f = fieldMap.get(key);  
            Boolean access = f.getDescribe().isAccessible();
			
			
	    if ((access) && (key != 'ownerId')) {
	    Object valueSource = source.get(key);
	    Object valueTarget = target.get(key);

            if ((valueSource != valueTarget) && (valueSource != null)) {
	                	if (((valueTarget == false) || (valueTarget == true))) {
	                				
	                		target.put(key, valueTarget);
	                	} else {
	                		target.put(key, valueSource);
	                	}

}
Почти что готовый пример для тебя, :D  я насколько помню тебе достаточно иметь ID объекта и значение тех филдов которые изменили что бы его за Update тить.

Sergey Prichepo, Спасибо огромное , ето то чно нужно.

Sergey Prichepo, Спасибо огромное :D , ето то чно нужно.