Adobe Flex Salesforce问题将帐户ID转换为帐户名称

时间:2010-11-23 11:22:02

标签: flex flash air adobe salesforce

我使用Adobe Air从SalesForce获取数据,并将其显示在数据网格中。

我正在使用查询来获取数据,然后将其放入绑定到数据网格的数组集合中,这样可以正常工作并显示数据。

问题是我想转换事件中的帐户ID以显示帐户名称。为此,我使用以下代码: -

   _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函数,那么没有问题,但只能显示帐户ID。

如何阻止Air将这些记录标记为已更改,或者是否有更好的方法来实现此目标?

在此先感谢,非常感谢任何帮助。

罗伊

1 个答案:

答案 0 :(得分:0)

我认为你不需要操纵底层对象。有两种方法可以在DataGrid中呈现数据。

选项1 - 创建另一个非托管的ValueObject,它包含您需要在DataGrid中显示的值。将值接收到新的ValueObject时复制它们。

选项2 - 在DataGridColumn上使用labelFunction,在呈现给定列中的每个单元格时从外部获取数据。