Проблема Adobe Flex Salesforce при преобразовании идентификаторов учетных записей в имя учетной записи - PullRequest
0 голосов
/ 23 ноября 2010

Я использую 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, помечая эти записи как измененные, или есть лучший способ добиться этого ??

Заранее спасибо, любая помощь очень ценится.

Рой

1 Ответ

0 голосов
/ 27 ноября 2010

Я думаю, вам не нужно манипулировать базовым объектом. Существует два варианта получения данных для отображения в DataGrid.

Вариант 1. Создайте еще один неуправляемый объект ValueObject, содержащий значения, которые необходимо отобразить в DataGrid. Скопируйте значения при их получении в новый ValueObject.

Вариант 2. Использование функции labelFunction в DataGridColumn для извлечения данных извне при визуализации каждой ячейки в данном столбце.

...