2010-11-23 4 views
0

Ich verwende Adobe Air, um Daten von SalesForce abzurufen und in einem Datagrid anzuzeigen.Adobe Flex Salesforce-Problem beim Konvertieren von Kontonummern in Kontoname

Ich verwende eine Abfrage, um die Daten zu erhalten, und fügen Sie sie dann in eine Arraycollection, die an das Datagrid gebunden ist, das funktioniert ordnungsgemäß und die Daten werden angezeigt.

Das Problem ist, dass ich die Konto-ID in das Ereignis konvertieren möchte, um den Namen des Kontos anzuzeigen. Um dies zu tun ich den folgenden Code verwenden: -

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

Dies funktioniert und zeigt den Kontonamen, das Problem ist, dass, wenn ich dieses Skript verwenden und dann Sync Änderungen an Salesforce all Datensätze, die angezeigt wurden, werden identifiziert da sie synchronisiert werden müssen, auch wenn sie nur angezeigt wurden.

Wenn ich die Funktion eventQueryHandler überspringe und meine Abfrage mit der OnQueryResult-Funktion verknüpfe, gibt es kein Problem, aber nur die Kontonummer kann angezeigt werden.

Wie kann ich verhindern, dass Air diese Datensätze als geändert markiert, oder gibt es einen besseren Weg, dies zu erreichen?

Vielen Dank im Voraus, jede Hilfe wird sehr geschätzt.

Roy

+0

Sie möchten also ein DataGrid, das Felder von verschiedenen Objekten in verschiedenen Arrays anzeigt? –

+0

Ja, was ich tun möchte ist, ein Datagrid mit sagen Ereignisdetails anzuzeigen, aber anstatt nur die Kontonummer anzuzeigen, ich möchte den tatsächlichen Kontonamen anzeigen. Das Problem, das ich habe, ist, dass, wenn ich den Account-Namen zu dem zugrunde liegenden Datagrid-Array hinzufügen, dies als eine Änderung der Ereignisdaten kennzeichnet, und repliziert dann, wenn ich es repliziere jedes Ereignis, das angezeigt wurde – RoyK

Antwort

0

Ich glaube, Sie müssen nicht das zugrunde liegende Objekt manipulieren. Es gibt zwei Möglichkeiten, die Daten in einem DataGrid zu rendern.

Option 1 - Erstellen Sie ein weiteres nicht verwaltetes ValueObject, das die Werte enthält, die Sie im DataGrid anzeigen müssen. Kopieren Sie die Werte, wenn Sie sie in das neue ValueObject erhalten.

Option 2 - Verwenden Sie eine labelFunction auf der DataGridColumn, um die Daten extern abzurufen, wenn jede Zelle in einer bestimmten Spalte gerendert wird.