2010-11-23 26 views
0

J'utilise Adobe Air pour obtenir des données de SalesForce et les présenter dans une grille de données.Problème d'Adobe Flex Salesforce lors de la conversion des ID de compte en nom de compte

J'utilise une requête pour obtenir les données, puis les placer dans une collection de tableaux liée à la grille de données, cela fonctionne correctement et les données sont affichées.

Le problème est que je veux convertir l'identifiant de compte dans l'événement pour afficher le nom du compte. Pour ce faire, je suis en utilisant le code suivant: -

_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();; 
    } 

Cela fonctionne et affiche le nom du compte, le problème est que lorsque j'utilise ce script et puis synchroniser les modifications à SalesForce tous les enregistrements qui ont été affichés sont identifiés comme ayant besoin d'être syncronisés même s'ils ont seulement été affichés.

Si j'oublie la fonction eventQueryHandler et lie ma requête à la fonction OnQueryResult, il n'y a pas de problème, mais seul l'identifiant de compte peut être affiché.

Comment puis-je empêcher Air de marquer ces enregistrements comme ayant changé, ou existe-t-il un meilleur moyen d'y parvenir?

Merci d'avance, toute aide est grandement appréciée.

Roy

+0

Vous souhaitez donc avoir un DataGrid qui affiche les champs de différents objets dans différents tableaux? –

+0

Oui, ce que je veux être en mesure de faire est de montrer une grille de données avec les détails de l'événement, mais au lieu de montrer simplement l'identifiant du compte, je veux montrer le nom du compte. Le problème que j'ai, c'est que lorsque j'ajoute le nom du compte au tableau de données de base sous-jacent, il marque cela comme une modification des données de l'événement, puis réplique chaque événement qui a été affiché – RoyK

Répondre

0

Je pense que vous avez besoin de ne pas manipuler l'objet sous-jacent. Il existe deux options pour obtenir les données à rendre dans un DataGrid.

Option 1 - Créez un autre ValueObject non géré qui contient les valeurs que vous devez afficher dans le DataGrid. Copiez les valeurs lorsque vous les recevez dans le nouvel objet ValueObject.

Option 2 - Utilisez une fonction labelFunction sur DataGridColumn pour extraire les données de manière externe lorsque chaque cellule d'une colonne donnée est affichée.