moysklad-sdk v0.3.132
Moysklad-Sdk
Библиотека для упрощения взаимодействия между МоимСкладом и другими приложениями. Поддерживает работу со всеми основными сущностями и предоставляет дополнительные методы.
- Создание новых документов
- Редактирование существующих документов
- Дополнительные методы для манипуляции с документами
- Rich-query фильтрации на основе реплики в MongoDB
- LiveQuery
- Websocket event listeners
TODO
- Установка библиотеки через npm
- Разобраться, на чьей стороне (бек или сдк) заниматься преобразованием данных, парсингом и составлением фильтров. Принято решение сделать всю логику на стороне SDK, оставить прокси максимально безмозглым, чтобы не разносить логику по двум местам и иметь возможность всё дебажить прямо на клиенте.
- Добавить метод, отдающий структуру документа (fields, types, etc.)
- Кроссбраузерность и кроссплатформенность
Установка
Используя npm:
npm install moysklad-sdkПодключение
import SDK, { initSDK } from 'moysklad-sdk';
// Вызывается один раз для всего проекта
initSDK({
    // Опции подключения
    secret: <SECRET_KEY>
});
// Синглтон экземпляр  библиотеки
console.log('SDK', SDK);Разработка
Запуск сборщика rollup в режиме watch
npm run devКомпиляция в прод
npm run build
npm publishДемо (Должен быть запущен Moysklad-Sync)
npm run demoПримеры использования
Изменение существующего заказа покупателю.
const customerorder = await SDK.Entity.Customerorder.load({
    name: 'Test order',
});
await customerorder.setStore({
    name: 'Другой склад',
});
await customerorder.save();Создание нового заказа покупателю.
const customerorder = await SDK.Entity.Customerorder.create({
    name: 'New order',
});
await customerorder.setStore({
    name: 'Другой склад',
});
await customerorder.save();Поиск документов:
В качестве аргументов поиска может быть указано одно из следующих значений, в порядке приоритета:
- ID объекта
- Массив для агрегации
- Объект для фильтрации
Лимит поиска нужно обязательно указывать в явном виде.
// Поиск по ID
const organization = await SDK.Entity.Organization.load('07bbe005-8b17-11e7-7a34-5acf0019232a');
// Поиск с фильтрацией
const counterparty = await SDK.Entity.Counterparty.load({
    name: 'Розничный покупатель',
});
// Поиск с агрегацией
const counterparty = await SDK.Entity.Counterparty.load([
    {
        $match: {
            name: 'Розничный покупатель',
        },
    },
]);
// Поиск с фильтрацией по ссылке.
const customerorder = await SDK.Entity.Customerorder.loadList(
    {
        agent: counterparty,
    },
    {
        limit: 10,
    },
);Объект у которого в фильтре передан объект, содержащий ...meta.href будет автоматически сокращён по правилу:
Object.keys(filter).forEach(key => {
    if (filter[key].meta && filter[key].meta.href) {
        filter[`${key}.meta.href`] = filter[key].meta.href.split('?')[0];
        delete filter[key];
    }
});
filter = {
    meta: {
        href: 'https://online.moysklad.ru/api/remap/1.2/entity/store/<STORE_ID>?expand=parent',
        type: 'store',
        ...
    },
    id: '<STORE_ID>',
    name: 'xxxx',
    ...
}
filter = {
    'meta.href': 'https://online.moysklad.ru/api/remap/1.2/entity/store/<STORE_ID>'
}Таким образом можно передавать для фильтрации другие документы:
const targetStore = await SDK.Entity.Store.load({
    name: 'Со склада',
});
const sourceStore = await SDK.Entity.Store.load({
    name: 'На склад',
});
await SDK.Entity.Move.load({
    targetStore,
    sourceStore,
});- Добавил декораторы свойств и reflect-metadata
- Глянуть на https://stackblitz.com/edit/typescript-teougc для продвинутых мета
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago