ComplexType プロパティに関するバグを発見しました。クライアント側のメタデータで複合プロパティ、つまり「isComplexType: true」として定義した他のオブジェクトのコレクションであるプロパティを持つオブジェクトがあります。ただし、複合型のすべてのプロパティは「未定義」に設定されます。少しデバッグを行ったところ、次のことがわかりました。
// target and source may not be entities that can also be complexTypes.
function updatePropertyFromRawEntity(dp, target, rawSource) {
var val = getPropertyFromRawEntity(rawSource, dp);
if (val === undefined) return;
if (dp.isComplexProperty) {
var coVal = target.getProperty(dp.name);
dp.dataType.dataProperties.forEach(function (cdp) {
// recursive call
updatePropertyFromRawEntity(cdp, coVal, val);
});
} else {
target.setProperty(dp.name, val);
}
}
rawSource パラメータは配列 (complexTypes の場合) はオブジェクトの配列です。したがって、問題は getPropertyFromRawEntity() を呼び出すときに、オブジェクトではなく配列を渡すことです。
function getPropertyFromRawEntity(rawEntity, dp) {
var propName = dp.nameOnServer || dp.isUnmapped && dp.name;
return parseValueForDp(rawEntity[propName], dp);
}
rawEntity[propName] は配列であるため、常に未定義になります。