Проблема Adobe Salesforce при изменении идентификатора на имя - PullRequest
1 голос
/ 11 октября 2010

У меня проблема с преобразованием, например, поля AccountId в Контактах в Имя учетной записи из объекта Account.

Я пробовал следующий запрос:

выберите Имя, Account.Name из Контакта

Но когда я смотрю на консоль при отладке приложения, я вижу, что она была преобразована в

выберите Приветствие, Имя, Фамилия, AccountId из Entity_Contact

Таким образом, в результате отображается только идентификатор учетной записи, который я мог бы получить в первую очередь из записи контактов.

Есть ли способ получить имя учетной записи, чтобы я мог отобразить его в DataGrid.

Спасибо

Рой

1 Ответ

3 голосов
/ 15 октября 2010

Ваш синтаксис правильный.Класс DesktopWrapper Flashbuilder для Force.com напрямую взаимодействует с локальным хранилищем данных, которое в свою очередь обрабатывает синхронизацию с Force.com.К сожалению, в текущем выпуске запросы отношений не поддерживаются в локальном хранилище и из него.Вот почему вы видите ваш запрос «плоским».

Обратите внимание, что в окне консоли регистрируется перевод с SOQL на SQL.SQLl - это то, что выполняется для локального хранилища.

Если вам нужно отключить данные, вам потребуется выполнить два запроса через класс app.wrapper и сопоставить или объединить данные на клиенте.Поскольку ActionScript является динамическим, вы можете просто прикрепить данные учетной записи к контактным данным с соответствующим идентификатором учетной записи.

Вот пример того, как это может выглядеть:

            [Bindable]
        protected var myData:ArrayCollection = new ArrayCollection();

        protected function loginCompleteHandler( event : LoginResultEvent ) : void {
            CursorManager.removeBusyCursor();
            // When the login is complete the main state should be shown.
            currentState = "main";
            //Execute the contact Query
            app.wrapper.query("Select Id, FirstName, LastName, AccountId From Contact", 
                new AsyncResponder(contactQueryHandler, faultHandler, myData)
            );
        }

        // This function will iterate over the results creating a string value for the
        // "in" clause of the embedded Account query. It also creates a field on the 
        // Contact dynamic entity so that our data binding works after initially setting
        // the data provider variable.
        protected function contactQueryHandler(qr:ArrayCollection, token:Object):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
                myData.addItem(contact);   // Add contact to grid data data provider
            }
            acctIdss = acctIdss.substr(0, acctIdss.length - 1);
            // Query for the accounts based on the account ids found in the contact list
            app.wrapper.query("Select Id, Name From Account Where Id in (" + acctIdss + ")", 
                new AsyncResponder(accountQueryHandler, faultHandler));
        }

        // This function simply iterates over the results and then iterates over the data grid
        // data provider to set the Account name for the correct contact.  Since data binding has
        // already occurred, the account name will be automatically displayed in the grid.
        protected function accountQueryHandler(accounts:ArrayCollection, token:Object):void {
            for each (var account:DynamicEntity in accounts) {
                for each(var contact:DynamicEntity in myData) {
                    if (contact.AccountId == account.Id) {
                        contact.AccountName = account.Name;
                    }
                }                                            
            }
        }


    <s:Group includeIn="main"
         enabled="{!app.loginPending}"
         width="100%"
         height="100%">
    <s:layout>
        <s:BasicLayout/>
    </s:layout>
    <s:VGroup paddingTop="10"
              paddingLeft="10"
              paddingRight="10"
              paddingBottom="10" width="100%" height="100%">
        <mx:DataGrid id="dGrid" dataProvider="{myData}" width="100%" height="100%">
        </mx:DataGrid>
    </s:VGroup>
    <flexforforce:StatusBar left="0"
                            bottom="0"/>
</s:Group>

Если вывам не нужно иметь возможность работать в автономном режиме, вы можете использовать исходный запрос с объектом app.connection.

...