Таким образом, вы можете связать свое приложение и организацию

Здесь, во второй части нашей серии из трех частей, мы продолжаем опираться на основы разработки Android с помощью Salesforce Mobile SDK. В первой части мы рассмотрели настройку проекта и создание макета, который извлекает данные из Salesforce, используя Kotlin в качестве языка программирования.

Прежде чем мы продолжим разработку полной стратегии мобильной синхронизации, мы сначала создадим наше мобильное приложение, позволяющее редактировать и создавать данные в нашей организации Salesforce.

Редактирование данных

Установив представление, давайте посмотрим, как мы можем редактировать данные. В идеале мы хотим сохранить тот же формат списка, но сделать его таким, чтобы, если пользователь коснется имени, он мог его отредактировать. Затем эти изменения должны быть отправлены обратно в Salesforce.

Для этого нам нужно сделать несколько вещей. Во-первых, нам нужно переопределить поведение списка по умолчанию, чтобы сделать элементы редактируемыми. Затем, после завершения редактирования записи, нам нужно сделать вызов API Salesforce для обновления данных.

Как и прежде, начнем с макета. Создайте в app/res/layout файл с именем broker_item.xml и вставьте в него следующие строки:

Затем создайте файл в app/java/com.example.sfdc с именем BrokerListAdapter.kt и вставьте в него это:

В экосистеме Android адаптер определяет функциональность элемента пользовательского интерфейса. Здесь мы создали новый адаптер, который переопределяет определенное поведение ArrayAdapter. Мы добавили функцию setClient, которая повторно использует тот же клиент Salesforce API, который нам нужен для заполнения списка в MainActivity.

Функция map связывает имя брокера с его идентификатором пользовательского объекта — причина, по которой это происходит, скоро станет очевидной.

getView — это место, где происходит основная деятельность. Самая важная строка связана с RestRequest.getRequestForUpdate. Клиент вызывает это для обновления данных Salesforce; для этого требуется имя пользовательского объекта, его идентификатор и значение для замены (в данном случае имя).

Это событие происходит, когда срабатывает afterTextChanged; то есть после того, как пользователь завершил обновление имени брокера. В реальной производственной среде вам необходимо проверить коды состояния на наличие потенциальных ошибок API, но для краткости мы опустили какую-либо проверку ответов.

В MainActivity нам нужно использовать этот адаптер. Во-первых, в верхней части определения класса измените listAdapter на BrokerListAdapter вместо ArrayAdapter, например:

class MainActivity : SalesforceActivity() {
   private var client: RestClient? = null
   private var listAdapter: ArrayAdapter<String>? = null
   private lateinit var listAdapter: BrokerListAdapter
    ...

Модификатор lateinit позволяет вам инициализировать ненулевой тип вне конструктора. Затем замените две функции onResume на эти:

Наконец, нам нужно отслеживать настоящее имя брокера вместе с его идентификатором записи. Для этого мы можем просто сохранить его в словаре, который поддерживает BrokerListAdapter. В sendRequest замените там цикл for на этот:

for (i in 0..records.length() - 1) {
   listAdapter.add(records.getJSONObject(i).getString("Name"))
   listAdapter.map(records.getJSONObject(i).getString("Name"), records.getJSONObject(i).getString("Id"))
}

Идите вперед и запустите приложение, и элементы вашего списка можно будет редактировать. Внесите изменения, а затем приготовьтесь, потому что все вот-вот станет диким. Вернитесь в свою временную организацию и нажмите на вкладку Брокеры в приложении Dreamforce. Ваши изменения должны быть отражены здесь на платформе Salesforce!

Добавление данных

Мы можем редактировать записи, но что, если нам нужно добавить нового брокера? Формат для этого очень похож на логику, которую мы использовали для выборки и редактирования записей. Давайте быстро пройдемся по шагам.

Откройте main.xml и вставьте эти строки прямо перед ListView:

Здесь мы добавили кнопку, которая будет вызывать функцию с именем onAddBrokerClick при каждом ее нажатии. В MainActivity мы определим этот метод:

Да это оно! Те поля, которые мы определили, относятся непосредственно к пользовательскому объекту. Установив для Id значение null, мы сообщаем API, что это новая запись. Если вы добавите новую строку, отредактируете ее, а затем вернетесь в свою временную организацию, вы увидите, что новые данные появятся в сети.

Продолжение следует…

Основываясь на том, что мы сделали в прошлый раз, в этом посте мы смогли отредактировать и добавить данные брокера в наше мобильное приложение, а затем увидеть их отражение в Salesforce. Довольно аккуратно!

Однако это только одностороннее изменение данных — из приложения в организацию. Как насчет отправки данных из организации в приложение? Кроме того, как мы можем решить сетевые проблемы, характерные только для мобильных телефонов, такие как проблемы с подключением или одновременное изменение полей несколькими людьми?

Мы рассмотрим эти очень реальные проблемы в нашем заключительном посте!