Есть такой код:
[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 к конкретному типу и делать калькуляцию, но здесь будет не меньше кода чем было, нет обобщения.
есть идеи?
спасибо
[quote="Дима Лисовский"]get у sObject[/quote]
[img]http://imgdesc.ru/images/2014/04/27/643db29c67a97eba219c7fdedb1e385d.jpeg[/img]
оказывает у sObject есть много годных методов...
работал сегодня с классом к которому обращаются многие тригеры для того, чтобы создать share запись ("мануально зашерить" запись).
так вот - все эти __share объекты - оно совершенно однотипные, с одинаковыми полями.
работал сегодня с классом к которому обращаются многие тригеры для того, чтобы создать share запись ("мануально зашерить" запись).
так вот - все эти __share объекты - оно совершенно однотипные, с одинаковыми полями.
поэтому создаю __share запись так:
[code]sObject share = (sObject)Type.forName( namesTypes.get(recType) ).newInstance();
share.put('ParentId', recID);
...
insert share;[/code]
а для удаления кверю их в Лист <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]
Все правильно! Нужно любить абстракции, они делают жизнь проще и лучше)
размер кода уменьшился в десять раз. Как и время его последующего обслуживания.
[quote="Gres"]Все правильно! Нужно любить абстракции, они делают жизнь проще и лучше)[/quote]
размер кода уменьшился в десять раз. Как и время его последующего обслуживания.
[quote="Gres"][quote="Den Brown"]размер кода уменьшился в десять раз. Как и время его последующего обслуживания.[/quote]
Хоть кто-то меня понимает)[/quote]
К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?
размер кода уменьшился в десять раз. Как и время его последующего обслуживания.
Хоть кто-то меня понимает)
К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?
Прокатит, если наследуются от одного базового класса
[quote="wilder"][quote="Gres"][quote="Den Brown"]размер кода уменьшился в десять раз. Как и время его последующего обслуживания.[/quote]
Хоть кто-то меня понимает)[/quote]
К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?[/quote]
Прокатит, если наследуются от одного базового класса
Хоть кто-то меня понимает)
Почему кто-то? Все понимают, но пока этого не осознают. Я постоянно использую Object и sObject. Особенную нежность испытываю к Map<String, Object> и люблю из них строить различные сложные структуры (без создания всяких DTO)
[quote="Gres"]Хоть кто-то меня понимает)[/quote]
Почему кто-то? Все понимают, но пока этого не осознают.
Я постоянно использую Object и sObject.
Особенную нежность испытываю к Map<String, Object> и люблю из них строить различные сложные структуры (без создания всяких DTO)
К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?
[quote="Gres"][quote="wilder"]К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?[/quote]
ООП же[/quote]
Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.
Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.
На апексе всегда можно сериализовать в JSON, а потом десериализовать в мапу)
[quote="wilder"]Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.[/quote]
На апексе всегда можно сериализовать в JSON, а потом десериализовать в мапу)
К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?
ООП же
Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.
[quote="wilder"][quote="Gres"][quote="wilder"]К сожалению такой подход прокатывает только с обьектами а с классами нет. Или я чего-то не знаю?[/quote]
ООП же[/quote]
Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.[/quote]
А это уже рефлексия, которой как раз нет
Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.
На апексе всегда можно сериализовать в JSON, а потом десериализовать в мапу)
А если десериализовывать в untype map можно еще долго наслаждаться разбором типа данных
[quote="Maxim Elets"][quote="wilder"]Ну на сколько я знаю в нормальных языках можно динанически получать доступ к свойствам класса.[/quote]
На апексе всегда можно сериализовать в JSON, а потом десериализовать в мапу)[/quote]
А если десериализовывать в untype map можно еще долго наслаждаться разбором типа данных