Этот вопрос равен частям C # и Salesforce, возможно, есть решения, возможные с любой стороны.Предложения приветствуются!
Я пишу универсальный класс для чтения данных Salesforce.Подпись выглядит следующим образом:
public abstract class SalesforceReader<SalesforceObjectType, RecordType>
where SalesforceObjectType: sObject
Это позволяет мне использовать этот код позже:
List<RecordType> records = new List<RecordType>();
QueryResult queryResult = service.query(query);
foreach (sObject rawRecord in queryResult.records)
records.Add(ConvertRecord((SalesforceObjectType)rawRecord));
...
public abstract RecordType ConvertRecord(SalesforceObjectType record);
План состоит в том, чтобы написать реализации этого класса, которые знают, например, как анализироватьобъект Salesforce Lead
в RecordType
, который может быть базовой object[]
, Dictionary<string, value>
или полностью определенной структурой, как я выберу позже.
Пока что яЯ доволен моим блестяще элегантным решением.Моя награда Коди так же хороша, как и выиграна.Затем я пытаюсь написать реализацию.Это определение не годится:
class LeadReader: SalesforceReader<Lead, object[]>
Результат компиляции:
The type 'SalesforceExtractor.Salesforce.Lead' cannot be used as type
parameter 'SalesforceObjectType' in the generic type or method
'SalesforceUtilities.SalesforceReader<SalesforceObjectType,RecordType>'.
There is no implicit reference conversion from
'SalesforceExtractor.Salesforce.Lead' to
'SalesforceUtilities.Salesforce.sObject'.
Bummer.У меня должно быть ограничение where SalesforceObjectType: sObject
в абстрактном классе, чтобы я мог приводить sObjects, но поскольку преобразование не является неявным, его недостаточно для реализующего класса.
Нужно ли мне целовать мой аккуратный маленькийрешение до свидания, или есть способ спасти это?Это мой первый проект Salesforce, поэтому, если мне нужно подходить к чему-то другому, пожалуйста, дайте мне знать.
Для любителей плохого фильма / MST3K:
Где делать"а" нельзя "встретить на графике?