(彼らは人口だかどうか)あなたがアップに読んでください「Dynamic Apex」および「describe」操作
Map<String, Schema.SObjectField> fieldsMap = Schema.SObjectType.Account.fields.getMap();
そして、あなたはのsObjectsで動作しますが、一部でない場合、あなたはマップキー
for(String field : fieldsMap.keyset()){
System.debug(field + ': ' + accounts[i].get(field));
}
に繰り返すことができます。このような何かはあなたのオブジェクトのすべてのAPI名を取得しますあなたが制御できないクラス(つまり、内部実装を変更してMap<String, String>
を使用してキーと値のペアなどを格納するだけでは意味がありません)。これはうまくいく可能性があります。アペックスには反射がありません。
public with sharing class Stack47339633{
public String name, some, other, property;
public Integer someInt;
public Date d;
}
Stack47339633 obj1 = new Stack47339633();
obj1.name = 'hello';
obj1.some = 'world';
obj1.someInt = 13;
obj1.d = System.today();
Stack47339633 obj2 = new Stack47339633();
obj2.name = 'hello';
obj2.some = 'stackoverflow';
obj2.someInt = -7;
obj2.d = System.today();
// Let's treat them as JSON objects...
Map<String, Object> o1 = (Map<String,Object>) JSON.deserializeUntyped(JSON.serialize(obj1));
Map<String, Object> o2 = (Map<String,Object>) JSON.deserializeUntyped(JSON.serialize(obj2));
Map<String, Object> o3 = new Map<String, Object>();
// ...compare, write identical fields to result object
for(String s : o1.keyset()){
System.debug(s + ':' + o1.get(s) + ' == ' + o2.get(s) + '?');
if(o1.get(s) == o2.get(s)){
System.debug('match!');
o3.put(s, o1.get(s));
}
}
// and cast that result object back to real class instance
Stack47339633 obj3 = (Stack47339633) JSON.deserialize(JSON.serialize(o3), Stack47339633.class);
System.debug('Full result: ' + obj3);
System.debug('Name : ' + obj3.name);
System.debug('someint : ' + obj3.someInt);
System.debug('d : ' + obj3.d);
これはJSONに戻って戻ってきますが、完成していますが、それは完了です。 シリアライゼーションが失敗する場合があります(例えば、this
の参照を保持しています)。transient
とマークされていると生き残れないかもしれませんが、もっと良い選択肢はないと思います。また、これらの
チェック:
ありがとう! これらのオブジェクトの文字列を設定する方法がわかりません。 これは、アカウントオブジェクトではなく、文字列属性を持つカスタム外部クラスです。したがって、dataGetはクラスになり、名前は文字列になります。 EX:if(accts [i] .get(field)= 3 {accts [i + 1] .get(field)= 'NUM3'}。エラーは、私が理解している表現を設定できないということです。そのフィールドをdataGet.nameを表す方法でどのように参照するのですか? –