Один из способов борьбы с этим (и избежать дополнительного выполнения запроса следящей на обновления), чтобы использовать метод расширения, чтобы включать любые дополнительные навигационные свойства следующим образом:
myapp.BrowseCOAMissingHoldingCompanies.VW_ChartOfAccountsWithMissingHoldingCompanies_ItemTap_execute = function (screen) {
var accountName = screen.VW_ChartOfAccountsWithMissingHoldingCompanies.selectedItem.AccountFullName;
return myapp.activeDataWorkspace.Accounting360Data.FindChartOfAccountsMappingByAccountName(
accountName
).expand(
"RelatedEntity," +
"AnotherRelatedEntity," +
"AnotherRelatedEntity/SubEntity"
).execute().then(function (query) {
var coa = query.results[0];
return myapp.showAddEditChartOfAccountsMapping(coa, {
beforeShown: function (addEditScreen) {
addEditScreen.ChartOfAccountsMapping = coa;
},
afterClosed: function() {
screen.VW_ChartOfAccountsWithMissingHoldingCompanies.refresh();
}
});
});
}
Как вы еще не упомянутое имя навигационных свойств вашего объекта, я использовал coa.RelatedEntity, coAAnotherRelatedEntity и coAnotherRelatedEntity.SubEntity в приведенном выше примере.
Этот метод распространяется по методу LightSwitch intellisense (в msls -?.?.? - vsdoc.js). Он расширяет результаты путем включения дополнительных свойств навигации с использованием выражения, определяемого опцией системного запроса OData $ expand, и он принимает единственный параметр «Расширение выражения OData (список имен навигационных свойств, разделенных запятыми)».
Причина, по которой принудительное обновление coa также заполняет навигационные свойства, заключается в том, что метод обновления LightSwitch неявно расширяет все свойства навигации (при условии, что вы не укажете параметр navigationPropertyNames при вызове обновления). Ниже показана внутренняя реализация методы LightSwitch обновления (с неявным расширением поведения исполняющего если параметр navigationPropertyNames равно нуль):
function refresh(navigationPropertyNames) {
var details = this,
properties = details.properties.all(),
i, l = properties.length,
property,
propertyEntry,
query;
if (details.entityState !== _EntityState.unchanged) {
return WinJS.Promise.as();
}
if (!navigationPropertyNames) {
navigationPropertyNames = [];
for (i = 0; i < l; i++) {
property = properties[i];
propertyEntry = property._entry;
if (isReferenceNavigationProperty(propertyEntry) &&
!isVirtualNavigationProperty(propertyEntry)) {
navigationPropertyNames.push(propertyEntry.serviceName);
}
}
}
query = new _DataServiceQuery(
{
_entitySet: details.entitySet
},
details._.__metadata.uri);
if (navigationPropertyNames.length > 0) {
query = query.expand(navigationPropertyNames.join(","));
}
return query.merge(msls.MergeOption.unchangedOnly).execute();
}
Однако, если принять подход обновления, вы будете выполнять дополнительную ненужный операции запроса.
У вас есть доступ к определению 'FindChartOfAccountsMappingByAccountName'? –
В lightwitch все, что вы можете получить, это скриншот, к сожалению. Он не делает ничего интересного, кроме принятия одного параметра и возврата единственного результата. – Yishai