我使用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将这些记录标记为已更改,或者是否有更好的方法来实现此目标?
在此先感谢,非常感谢任何帮助。
罗伊
答案 0 :(得分:0)
我认为你不需要操纵底层对象。有两种方法可以在DataGrid中呈现数据。
选项1 - 创建另一个非托管的ValueObject,它包含您需要在DataGrid中显示的值。将值接收到新的ValueObject时复制它们。
选项2 - 在DataGridColumn上使用labelFunction,在呈现给定列中的每个单元格时从外部获取数据。