Я использую Adobe Air для получения данных от SalesForce и представления их в сетке данных.
Я использую запрос для получения данных, а затем помещаю их в массив массивов, связанный с сеткой данных, это работает правильно, и данные отображаются.
Проблема в том, что я хочу преобразовать идентификатор учетной записи в событии, чтобы показать имя учетной записи. Для этого я использую следующий код: -
_serviceWrapper.query( "Select * From Event order by StartDateTime asc", new mx.rpc.Responder( eventQueryHandler, faultHandler ))}
protected function eventQueryHandler(qr:ArrayCollection):void {
var acctIdss:String = "";
for each(var contact:DynamicEntity in qr) {
if (contact.AccountId != null && acctIdss.indexOf(contact.AccountId) == -1) {
acctIdss += "'" + contact.AccountId + "',";
}
//contact.AccountName = ""; // Add field to contact for account name
TempGridProvider.addItem(contact); // Add contact to temp grid data data provider
//TempGridProvider.contact.AccountName = "";
}
acctIdss = acctIdss.substr(0, acctIdss.length - 1);
// Query for the accounts based on the account ids found in the contact list
_serviceWrapper.query("Select Id, Name, BillingCity From Account Where Id in (" + acctIdss + ")",
new SfdcAsyncResponder(Event2QueryHandler, faultHandler));
}
protected function Event2QueryHandler(accounts:ArrayCollection):void {
for each (var account:DynamicEntity in accounts) {
for each(var contact:DynamicEntity in TempGridProvider) {
if (contact.AccountId == account.Id) {
contact.AccountName = account.Name + " - " + account.BillingCity;
}
}
}
onQueryResult(TempGridProvider);
private function onQueryResult( rows : ArrayCollection ) : void {
// release previous query results
_serviceWrapper.releaseQueryResults( _gridDataProvider );
// populate datagrid
_gridDataProvider = rows;
// show message in status bar
var status : F3Message = new F3Message( F3Message.STATUS_INFO, "Query came back with " + ( _gridDataProvider == null ? 0 : _gridDataProvider.length ) + " " + _selectedEntity + "s" );
showStatus( status );
TempGridProvider = new ArrayCollection();;
}
Это работает и отображает имя учетной записи, проблема в том, что когда я использую этот сценарий, а затем синхронизирую изменения с SalesForce, все отображаемые записи определяются как требующие синхронизации, даже если они только отображались. *
Если я пропущу функцию eventQueryHandler и свяжу свой запрос с функцией OnQueryResult, проблем не будет, но может быть отображен только идентификатор учетной записи.
Как я могу остановить Air, помечая эти записи как измененные, или есть лучший способ добиться этого ??
Заранее спасибо, любая помощь очень ценится.
Рой