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

Обобщить код с разными типами (сущностями)

Есть такой код:

List <Object1__c> listOfObject1 = Database.query('SELECT CreatedDate, Float__c FROM Object1__c ' );

калькуляция с полем CreatedDate и Float__c


List <Object2__c> listOfObject2 = Database.query('SELECT CreatedDate, Float__c FROM Object2__c ' );

калькуляция с полем CreatedDate и Float__c


хочу обобщить этот код, выведя все вычисление в метод.

пробую так:

if(objectType == 'Object1__c') List<Object1__c> listRecords = new List<Object1__c>();
else if(objectType == 'Object2__c') List<Object2__c> listRecords = new List<Object2__c>();

и далее работать с listRecords как обычно, но нет, не компилируется.

ну ладно, давайте обратимся к записям как sObject

List <sObject> listRecords  = Database.query('SELECT CreatedDate, Float__c FROM '+ objectType );

обратиться то можно, а вот работать с полями - нельзя.

можно конечно попробовать привести sObject к конкретному типу и делать калькуляцию, но здесь будет не меньше кода чем было, нет обобщения.

есть идеи?

спасибо

Есть такой код:

[code]List <Object1__c> listOfObject1 = Database.query('SELECT CreatedDate, Float__c FROM Object1__c ' );

калькуляция с полем CreatedDate и Float__c 


List <Object2__c> listOfObject2 = Database.query('SELECT CreatedDate, Float__c FROM Object2__c ' );

калькуляция с полем CreatedDate и Float__c[/code] 


хочу обобщить этот код, выведя все вычисление в метод.

пробую так:

[code]if(objectType == 'Object1__c') List<Object1__c> listRecords = new List<Object1__c>();
else if(objectType == 'Object2__c') List<Object2__c> listRecords = new List<Object2__c>();[/code]

и далее работать с listRecords как обычно, но нет, не компилируется.

ну ладно, давайте обратимся к записям как sObject

[code]List <sObject> listRecords  = Database.query('SELECT CreatedDate, Float__c FROM '+ objectType );[/code]

обратиться то можно, а вот работать с полями - нельзя.

можно конечно попробовать привести sObject к конкретному типу и делать калькуляцию, но здесь будет не меньше кода чем было, нет обобщения.

есть идеи?

спасибо

get у sObject

get у sObject

Дима Лисовский
get у sObject

оказывает у sObject есть много годных методов...

[quote="Дима Лисовский"]get у sObject[/quote]

[img]http://imgdesc.ru/images/2014/04/27/643db29c67a97eba219c7fdedb1e385d.jpeg[/img]

оказывает у sObject есть много годных методов... 

работал сегодня с классом к которому обращаются многие тригеры для того, чтобы создать share запись ("мануально зашерить" запись).

так вот - все эти __share объекты - оно совершенно однотипные, с одинаковыми полями.

поэтому создаю __share запись так:

sObject share = (sObject)Type.forName( namesTypes.get(recType) ).newInstance();

share.put('ParentId', recID);
...
insert share;

а для удаления кверю их в Лист <sObject> и удаляю.

Ляпота...

работал сегодня с классом к которому обращаются многие тригеры для того, чтобы создать share запись ("мануально зашерить" запись).

так вот - все эти __share объекты - оно совершенно однотипные, с одинаковыми полями.

поэтому создаю __share запись так:

[code]sObject share = (sObject)Type.forName( namesTypes.get(recType) ).newInstance();

share.put('ParentId', recID);
...
insert share;[/code]

а для удаления кверю их в Лист <sObject> и удаляю.

Ляпота...

Den Brown
работал сегодня с классом к которому обращаются многие тригеры для того, чтобы создать share запись ("мануально зашерить" запись).

так вот - все эти __share объекты - оно совершенно однотипные, с одинаковыми полями.

поэтому создаю __share запись так:

sObject share = (sObject)Type.forName( namesTypes.get(recType) ).newInstance();

share.put('ParentId', recID);
...
insert share;

а для удаления кверю их в Лист <sObject> и удаляю.

Ляпота...


Все правильно! Нужно любить абстракции, они делают жизнь проще и лучше)

[quote="Den Brown"]работал сегодня с классом к которому обращаются многие тригеры для того, чтобы создать share запись ("мануально зашерить" запись).

так вот - все эти __share объекты - оно совершенно однотипные, с одинаковыми полями.

поэтому создаю __share запись так:

[code]sObject share = (sObject)Type.forName( namesTypes.get(recType) ).newInstance();

share.put('ParentId', recID);
...
insert share;[/code]

а для удаления кверю их в Лист <sObject> и удаляю.

Ляпота...[/quote]
Все правильно! Нужно любить абстракции, они делают жизнь проще и лучше)

Gres
Все правильно! Нужно любить абстракции, они делают жизнь проще и лучше)

размер кода уменьшился в десять раз. Как и время его последующего обслуживания.

[quote="Gres"]Все правильно! Нужно любить абстракции, они делают жизнь проще и лучше)[/quote]

размер кода уменьшился в десять раз. Как и время его последующего обслуживания.

Den Brown
размер кода уменьшился в десять раз. Как и время его последующего обслуживания.

Хоть кто-то меня понимает)

[quote="Den Brown"]размер кода уменьшился в десять раз. Как и время его последующего обслуживания.[/quote]
Хоть кто-то меня понимает)

Gres
Den Brown
размер кода уменьшился в десять раз. Как и время его последующего обслуживания.

Хоть кто-то меня понимает)

К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?

[quote="Gres"][quote="Den Brown"]размер кода уменьшился в десять раз. Как и время его последующего обслуживания.[/quote]
Хоть кто-то меня понимает)[/quote]

К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?

wilder
Gres
Den Brown
размер кода уменьшился в десять раз. Как и время его последующего обслуживания.

Хоть кто-то меня понимает)

К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?

Прокатит, если наследуются от одного базового класса

[quote="wilder"][quote="Gres"][quote="Den Brown"]размер кода уменьшился в десять раз. Как и время его последующего обслуживания.[/quote]
Хоть кто-то меня понимает)[/quote]

К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?[/quote]

Прокатит, если наследуются от одного базового класса

Gres
Хоть кто-то меня понимает)

Почему кто-то? Все понимают, но пока этого не осознают.
Я постоянно использую Object и sObject.
Особенную нежность испытываю к Map<String, Object> и люблю из них строить различные сложные структуры (без создания всяких DTO)

[quote="Gres"]Хоть кто-то меня понимает)[/quote]
Почему кто-то? Все понимают, но пока этого не осознают.
Я постоянно использую Object и sObject.
Особенную нежность испытываю к Map<String, Object> и люблю из них строить различные сложные структуры (без создания всяких DTO)

wilder
К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?

ООП же

[quote="wilder"]К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?[/quote]
ООП же

Gres
wilder
К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?

ООП же

Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.

[quote="Gres"][quote="wilder"]К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?[/quote]
ООП же[/quote]

Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.

wilder
Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.

На апексе всегда можно сериализовать в JSON, а потом десериализовать в мапу)

[quote="wilder"]Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.[/quote]
На апексе всегда можно сериализовать в JSON, а потом десериализовать в мапу)

wilder
Gres
wilder
К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?

ООП же

Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.


А это уже рефлексия, которой как раз нет

[quote="wilder"][quote="Gres"][quote="wilder"]К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?[/quote]
ООП же[/quote]

Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.[/quote]
А это уже рефлексия, которой как раз нет

Maxim Elets
wilder
Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.

На апексе всегда можно сериализовать в JSON, а потом десериализовать в мапу)

А если десериализовывать в untype map можно еще долго наслаждаться разбором типа данных

[quote="Maxim Elets"][quote="wilder"]Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.[/quote]
На апексе всегда можно сериализовать в JSON, а потом десериализовать в мапу)[/quote]
А если десериализовывать в untype map можно еще долго наслаждаться разбором типа данных