2010-11-23 11 views
0

Adob​​e Airを使用してSalesForceからデータを取得し、DataGridに表示しています。Adob​​e Flex SalesforceでアカウントIDをアカウント名に変換するときの問題

データを取得するためにクエリを使用していて、データグリッドにバインドされている配列コレクションに配置すると、正しく動作し、データが表示されます。

問題は、イベントのアカウント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を停止するにはどうすればよいですか、これを実現するにはより良い方法がありますか?

ご協力いただきありがとうございました。

Roy

+0

異なる配列の異なるオブジェクトのフィールドを表示するDataGridを使用したいと思いますか? –

+0

はい、私ができることをしたいのは、イベントの詳細を含むデータグリッドを表示することですが、アカウントIDを表示するだけではなく、実際のアカウント名を表示したいのです。 問題は、基になるデータグリッド配列にアカウント名を追加すると、イベントデータの変更としてフラグが立てられ、レプリケートすると表示されたすべてのイベントがレプリケートされるということです – RoyK

答えて

0

私はあなたが基本的なオブジェクトを操作する必要はないと思う。 DataGridでデータをレンダリングするには、2つのオプションがあります。

オプション1 - DataGridに表示する必要がある値を保持する別の管理されていないValueObjectを作成します。値を新しいValueObjectにコピーすると、値がコピーされます。

オプション2 - DataGridColumnでlabelFunctionを使用して、特定の列の各セルがレンダリングされたときにデータを外部から取得します。

関連する問題