Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Подгрузка метаданных для расширенного доступа к атрибутам #15

Closed
wmakeev opened this issue May 29, 2015 · 1 comment

Comments

@wmakeev
Copy link
Owner

wmakeev commented May 29, 2015

Для более гибкой работы с атрибутами объектов, требуются данные из метаданных аккаунта: EmbeddedEntityMetadata и CustomEntityMetadata.

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

Пример в синхронном режиме:

Создаем клиент

var client = require('moysklad-client').createClient();

Подгружаем метаданные (в данном примере синхронно) и получаем последний обновленный заказ покупателя

client.loadMetadata();
var order = client.max('customerOrder', 'updated');

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

// Получение значения атрибута по имени
var shippingAddress = order.getAttr('Адрес доставки').valueString;  // → г.Ставрополь, ул. Ленина, 200

// через универсальный метод .getValue
var shippingAddress = order.getAttr('Адрес доставки').getValue();  // → г.Ставрополь, ул. Ленина, 200

// или методом .getAttrValue
var shippingAddress = order.getAttrValue('Адрес доставки');  // → г.Ставрополь, ул. Ленина, 200

Если пользовательское поле типа "Справочник", то методы getAttrValue и getValue вернут идентификатор сущности связанного элемента справочника.

var shippingTypeUuid = order.getAttr('Способ доставки').getValue(); // → 08ed3f99-3e2f-11e3-f600-7054d21a8d1e
wmakeev added a commit that referenced this issue Jun 1, 2015
Централизованное указание основных провайдеров при создании клиента. Более удобное тестирование #15
wmakeev added a commit that referenced this issue Jun 1, 2015
Централизованное указание основных провайдеров при создании клиента. Более удобное тестирование #15
wmakeev added a commit that referenced this issue Jun 1, 2015
Централизованное указание основных провайдеров при создании клиента. Более удобное тестирование #15
wmakeev added a commit that referenced this issue Jun 1, 2015
wmakeev added a commit that referenced this issue Jun 1, 2015
Централизованное указание основных провайдеров при создании клиента. Более удобное тестирование #15
@wmakeev
Copy link
Owner Author

wmakeev commented Apr 2, 2016

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

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

Для решения таких задач лучше воспользоваться специальными вспомогательными методами и "помощью" ленивого загрузчика #26 (таким скриптам вполне достаточно синхронного режима).

@wmakeev wmakeev closed this as completed Apr 2, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant