foxylinkio / foxylink Goto Github PK
View Code? Open in Web Editor NEWAn easy way to handle integration tasks in a reliable way and run them on 1C:Enterprise server
Home Page: https://pbazeliuk.com
License: Other
An easy way to handle integration tasks in a reliable way and run them on 1C:Enterprise server
Home Page: https://pbazeliuk.com
License: Other
Необходима возможность использовать определенный канал обмена, который работает с помощью базовой авторизации.
При использовании быстрого вывода, если вложенная группировка имеет одинаковое наименование
как и поле на этом же уровне, вывод может не соответствовать ожидаемому. Проходит удаление определенной части информации.
При использовании последовательного вывода, если вложенная группировка имеет одинаковое наименование
как и поле на этом же уровне, может быть выведено два поля с одинаковым наименованием
на текущем уровне, что противоречит формату JSON.
Контроль декларативного описания формата должен соответствовать RFC.
Контроль должен происходит при попытке передать через хранилище значений дерево формата
#18 Сообщения должны отправляться только в транзакции, если TransactionActive() возвращает False, должна быть вызвана исключительная ситуация
Необходимо проработать систему с использованием статусов сообщений, особенно актуально для файлового варианта работы
Например, application/json.
Это необходимо, если каналу нужно конвертировать содержимое в свой формат или он не поддерживает доступный формат.
Media-Type должен заполнятся при создании нового обмена, если он не был заполнен ранее он должен заполнится при записи обмена.
Так же должен быть механизм регистрации обработчиков чтения медиа типов
Расчет оптимального количества фоновых заданий должен быть основан на статистических данных и должен автоматически изменяется с определенным периодом (например, каждый час)
После обработки команды ExportObject, если пользователь нажимает на сообщение должен открываться каталог с файлом.
Необходимо удалять незначащие символы при создании декларативного описания формата обмена.
Текущий список синонимов:
Synonyms = New Map;
Synonyms.Insert("ССЫЛКА", "REF");
Synonyms.Insert("REF", "ССЫЛКА");
Необходимо создать тесты для проверки декларативного описания JSON
"Create"
15.3
true
false
null
{
"Id": "1231",
"SyncToken": "SyncToken",
"Name": "Garden Supplies",
"Sku": "01254001",
"ItemCategoryType": "Goods",
"PurchaseCost": 100,
"MetaData": {
"CreateTime": "2013-05-05T00:00:00",
"LastUpdate": "2017-05-05T00:00:00"
},
"IncomeAccountRef": {
"value": 12313,
"name": "pikabu"
}
}
При записи набора записей регистра сведений, должно быть создано:
Create
для записей которых не было при обработке события ПередЗаписью
, и которые появились при обработке событияПриЗаписи
набора.Update
для записей которые были при обработке события ПередЗаписью
, и которые присутствуют при обработке события ПриЗаписи
набора.Delete
для записей которые были при обработке события ПередЗаписью
, и которые исчезли при обработке события ПриЗаписи
.Необходимо реализовать подписку на события справочников и документов.
Приоритет должен задаваться в настройках обмена для каждой комбинации обмен+метод+канал
Ожидаемый тип | Значение 1С | Возможные значения JSON |
---|---|---|
String | Undefined | null , "" |
String | Null | null , "" |
Number | Undefined | null , minvalue , maxvalue |
Number | Null | null , minvalue , maxvalue |
Integer (draft-07) | Undefined | null , minvalue , maxvalue |
Integer (draft-07) | Null | null , minvalue , maxvalue |
Boolean | Undefined | null , true , false |
Boolean | Null | null , true , false |
Это необходимо что бы не было необходимости создавать объект чтения\записи формата несколько раз.
Базовый свойства необходимо создавать на уровне Trigger
и должны дополнятся при оповещении каналов NotifyChannels
.
В форме декларативного описания API JSON нельзя удалить RootItem
Когда есть 2 различных обмена, один из которых отключен, события регистрируется для всех каналов для каждого обмена. Правильное поведение события регистрируются только для включенного канала.
APITemplateColumns
может видоизменяется, возможно это поведение не актуально, так как уже быстрый вывод уже не существует.
В дереве APISchema
необходимо дать возможность пользователю произвольно перетягивать части формата JSON
Контроль результата должен соответствовать описанию RFC
Это изменения необходимо для упрощения редактирования формата.
Необходима поддержка типа Array для DataProcessorJSON когда используется декларативное описание обмена.
Если все элементы попадают на уровень группировки массива, тогда схема вывода процессора компоновки данных изменяется из:
Begin; Begin; BeginAndEnd; Begin; Begin;
на Begin; BeginAndEnd; Begin;
И соответственно массив выводиться не верно в JSON
Модуль: FL_Events.EnqueueEvent
Необходимо добавить заполнение аргумента для ссылочных типов, так как они нигде далее не заполняются.
ElsIf FL_CommonUse.IsReferenceTypeObjectByMetadataObjectName(
InvocationData.MetadataObject) Then
InvocationData.SourceObject = Source.Ref;
EndIf;
Модуль: FL_BackgroundJob.FillParameterValueFromArguments
Не верное условие, если параметр содержит искомый тип, значение не должно обнулятся
If Parameter.ValueType.ContainsType(TypeOf(Value)) Then
Value = Undefined;
EndIf;
Необходимо вынести функционал каналов обмена из справочника настройки обменов. Один и тот же канал может использоваться в большом количестве настроек обменов.
В схеме компоновки данных должны присутствовать группировка в структуре отчета с указанным именем RootItem
, а так же поле в выбранных полях с таким же псевдонимом (RootItem
). Результат выполнения схемы компоновки данных должен содержать только один элемент иначе будет ошибка вывода в формат JSON.
"Строка"
является корректным выводом15.5
является корректным выводомtrue
является корректным выводомfalse
является корректным выводомnull
является корректным выводомПри выборе событий на которые подписывается обмен, необходимо иметь возможность фильтрации. Например, в системе QB покупатели (customers) и поставщики (vendors) разные справочники, а в конфигурации Small Business / 1C:Drive / SERP это один объект который разделяется специальным флагом.
Catalogs.FL_Exchanges.Events
добавить поля EventFilterDCSchema
, EventFilterDCSettings
Catalogs.FL_Messages.QueryTextExchangeEndpoint
и Catalogs.FL_Messages.QueryTextExchangeEndpoints
должны так же возвращать настройки фильтров, если они есть.
Catalogs.FL_Messages.RouteToEndpoints
если задана схема компоновки данных фильтра и настройки компоновки данных фильтра, должна быть выполнена проверка с десериализированными ключами как расширение фильтра ComposerSettings.Settings.Filter
, если в результате запроса с учетом всех фильтров есть записи задания должны быть зарегистрированы.
// Recursively fills the structure of group names from nested data composition
// layouts in main data composition template.
//
// Note:
// Return value is type of "Structure", not "Map".
// The main reason is that "Structure" was faster then "Map" on test system
// in ~17.62% or ~1967 ms for 100000 executions.
//
// Parameters:
// Mediator - Arbitrary - reserved, currently not in use.
// DataCompositionTemplate - DataCompositionTemplate - main data composition template, for which is needed to create
// a structure with the names of groups nested in data composition layouts.
// DataCompositionTemplateBody - DataCompositionTemplateBody - the body of current data composition layout.
// GroupNames - Structure - group names that were set early in the report strucure
// with help of context menu command "Set name...".
// Default value: Undefined.
//
// Returns:
// Structure - group names that were set early in the report strucure with help of context menu command "Set name...".
// * Key - String - the name of nested data composition layout.
// * Value - String - the name of body element group in nested data composition layout.
// It will be used as a name of array during output process execution.
//
Function GroupNames(Mediator, DataCompositionTemplate,
DataCompositionTemplateBody, GroupNames = Undefined)
Это необходимо для верного расчета размещения при декларативном описании формата #16
Панель администрирования должна позволять:
Реализовать быстрый вывод если формат JSON описан декларативно
Справочник на данный момент работает с единичными значениями в таблице DCSParameters, а необходимо работать со значениями СписокЗначений или Таблицей значений. Это необходимо для того чтобы можно было отслеживать события по целым наборам записей и\или табличным частям объектов которые изменяются.
Это позволит формировать полноценно верные события и даст возможность избежать:
Транзакции это важно для консистенции данных, необходимо минимизировать время создания сообщения (в статусе: Enqueued), а обработку сообщения выполнять вне транзакции.
Добавить возможность заполнения описания API JSON из СКД
Для полноценного функционирования подсистемы необходимо добавить подсистему отправки сообщений
Необходима возможность декларативного описания формата обмена (JSON) для API Method (Метода).
StreamObject = Catalogs.IHL_ExchangeSettings.NewFormatProcessor(
FormatProcessorName, Object.BasicFormatGuid);
StreamObject.Initialize(APISchema);
// Constructor of stream object.
//
// Parameters:
// OpenFile - String - output filename.
// Default value: Empty string.
//
Procedure Initialize(OpenFile = "") Export
RefTypesCache = New Map;
StreamWriter = New JSONWriter;
If IsBlankString(OpenFile) Then
StreamWriter.SetString();
Else
EndIf;
EndProcedure // Initialize()
Как оказалось существует возможность работы напрямую с макетом, без использования компоновщика настроек и самой схемы компоновки, так же есть возможность управлять очень просто параметрами и фильтрами не используя НастройкиПоУмолчанию()
, НастройкиКомпоновкиДанных
, и КомпоновкщикНастроек
, но настройки компоновки данных необходимы для определения кэша вывода в поток (StreamObject
).
Необходимо чтобы при загрузке описания формата правильно устанавливалось значение комплексного типа
Необходимо устанавливать верную картинку строки которая соответствует типу JSON
Для быстрого удаления событий в форме справочника обменов есть специальная команда в меню таблицы событий.
Для возможности подписки на определенные события конфигурации и внешних систем и последующей реакции на эти события необходима возможность програмного получения правил обмена.
В схеме компоновки данных должны присутствовать группировка в структуре отчета с указанным именем RootItem
, а так же поля в выбранных полях с таким же псевдонимами как заданы в декларативном описании.
Если в декларативном описание есть вложенные свойства с типом Object
тогда в структуре отчета должны быть дополнительные группировки подчиненные RootItem
(или другим группировкам). Результат выполнения схемы компоновки данных должен содержать только один элемент иначе будет ошибка вывода в формат JSON.
RootItem
имеет тип Object
выводить его наименование не нужно, это приведет к ошибке формата JSON.Object
, дублирования свойств быть не должноПоскольку метод предусматривает не все возможные варианты использованных символов, предлагаю альтернативную реализацию. Единственное я удалил преобразование символов после пробелов в верхний регистр. Если надо восстановите самостоятельно, мне лично это оказалось ни к чему. Я все равно вместе с данными передаю информацию о колонках, типах и других свойствах.
Для проверки использовал имя поля данных "[~' йо'{' ё'}"жик"|/?><.,]". Можно туда добавить числа и латиницу, но в принципе это уже не существенно.
`// Возвращает нормализированное имя колонки, например, "Товары.Сумма"
// к виду: "ТоварыСумма". СКД допускает большой набор символов в именах,
// но преобразовывает не цифры и буквы к , а пробелы удаляет.
//
// Параметры:
// ПутьКДанным - Строка - колонка имя которой необходимо нормализировать.
//
// Возвращаемое значение:
// Строка - нормализированное имя колонки.
//
Функция ПолучитьИмяКолонки(ПутьКДанным) Экспорт
Диапазоны = Новый Массив;
Диапазоны.Добавить(Новый Структура("Мин,Макс", 48, 57)); // цифры
Диапазоны.Добавить(Новый Структура("Мин,Макс", 65, 90)); // латиница большие
Диапазоны.Добавить(Новый Структура("Мин,Макс", 97, 122)); // латиница маленькие
Диапазоны.Добавить(Новый Структура("Мин,Макс", 1040, 1103)); // кириллица
Диапазоны.Добавить(Новый Структура("Мин,Макс", 1025, 1025)); // символ "Ё"
Диапазоны.Добавить(Новый Структура("Мин,Макс", 1105, 1105)); // символ "ё"
Диапазоны.Добавить(Новый Структура("Мин,Макс", 95, 95)); // символ ""
УдаляемыеСимволы = Новый Массив;
УдаляемыеСимволы.Добавить(КодСимвола(Символы.НПП));
УдаляемыеСимволы.Добавить(КодСимвола(" "));
УдаляемыеСимволы.Добавить(КодСимвола("."));
ДопустимыеСимволы = Новый Массив;
Для Каждого СтруктураДиапазон Из Диапазоны Цикл
Для КодСимвола = СтруктураДиапазон.Мин По СтруктураДиапазон.Макс Цикл
ДопустимыеСимволы.Добавить(КодСимвола);
КонецЦикла;
КонецЦикла;
ИмяКолонки = "";
Для Индекс = 1 По СтрДлина(ПутьКДанным) Цикл
ЗначениеСимвола = Сред(ПутьКДанным, Индекс, 1);
КодСимвола = КодСимвола(ЗначениеСимвола);
Если УдаляемыеСимволы.Найти(КодСимвола) <> Неопределено Тогда
ЗначениеСимвола = "";
ИначеЕсли ДопустимыеСимволы.Найти(КодСимвола) = Неопределено Тогда
ЗначениеСимвола = "_";
КонецЕсли;
ИмяКолонки = ИмяКолонки + ЗначениеСимвола;
КонецЦикла;
Возврат ИмяКолонки;
КонецФункции`
Простые типы:
true
, false
, string
, null
, number
Комплексные типы:
object
, array
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.