mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2024-11-28 09:08:38 +02:00
en локализация
This commit is contained in:
parent
b9c111b93a
commit
b47569207d
35
.github/workflows/os/oint_dictionary.os
vendored
35
.github/workflows/os/oint_dictionary.os
vendored
@ -150,32 +150,37 @@
|
||||
Если Цельный Тогда
|
||||
ДобавитьСлово(СписокСлов, Элемент);
|
||||
Иначе
|
||||
|
||||
Для Каждого Символ Из МассивСимволов Цикл
|
||||
Элемент = СтрЗаменить(Элемент, Символ, "$");
|
||||
КонецЦикла;
|
||||
|
||||
Пока СтрНайти(Элемент, "$$") <> 0 Цикл
|
||||
Элемент = СтрЗаменить(Элемент, "$$", "$");
|
||||
КонецЦикла;
|
||||
|
||||
МассивЭлемента = СтрРазделить(Элемент, "$", Ложь);
|
||||
Для Каждого Дробный Из МассивЭлемента Цикл
|
||||
ДобавитьСлово(СписокСлов, Дробный);
|
||||
КонецЦикла;
|
||||
|
||||
РазобратьОбычнуюСтроку(Элемент, СписокСлов);
|
||||
КонецЕсли;
|
||||
|
||||
Цельный = Не Цельный;
|
||||
КонецЦикла;
|
||||
|
||||
|
||||
Иначе
|
||||
РазобратьОбычнуюСтроку(ТекущаяСтрока, СписокСлов);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура РазобратьОбычнуюСтроку(Элемент, СписокСлов)
|
||||
|
||||
Для Каждого Символ Из МассивСимволов Цикл
|
||||
Элемент = СтрЗаменить(Элемент, Символ, "$");
|
||||
КонецЦикла;
|
||||
|
||||
Пока СтрНайти(Элемент, "$$") <> 0 Цикл
|
||||
Элемент = СтрЗаменить(Элемент, "$$", "$");
|
||||
КонецЦикла;
|
||||
|
||||
МассивЭлемента = СтрРазделить(Элемент, "$", Ложь);
|
||||
Для Каждого Дробный Из МассивЭлемента Цикл
|
||||
ДобавитьСлово(СписокСлов, Дробный);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДобавитьСлово(Список, Слово)
|
||||
|
||||
Слово = СокрЛП(Слово);
|
||||
|
134
.github/workflows/os/opi_translate.os
vendored
134
.github/workflows/os/opi_translate.os
vendored
@ -1,13 +1,141 @@
|
||||
Перем ТаблицаСловаря;
|
||||
|
||||
Процедура СоздатьЛокализацию(Знач Язык)
|
||||
Процедура ПриСозданииОбъекта()
|
||||
|
||||
КаталогСловарей = "./service/dictionaries";
|
||||
ФайлыСловарей = НайтиФайлы(КаталогСловарей, "*.json");
|
||||
|
||||
ТаблицаСловаря = Новый ТаблицаЗначений();
|
||||
ТаблицаСловаря.Колонки.Добавить("Ключ");
|
||||
ТаблицаСловаря.Колонки.Добавить("Значение");
|
||||
ТаблицаСловаря.Колонки.Добавить("Длина");
|
||||
ТаблицаСловаря.Колонки.Добавить("ИмяМодуля");
|
||||
|
||||
Для Каждого Словарь Из ФайлыСловарей Цикл
|
||||
СоздатьЛокализацию(Словарь);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СоздатьЛокализацию(Знач Словарь)
|
||||
|
||||
ПутьКСловарю = Словарь.ПолноеИмя;
|
||||
Язык = Словарь.ИмяБезРасширения;
|
||||
|
||||
ПолучитьТаблицуСловаря(ПутьКСловарю);
|
||||
|
||||
КаталогИсточник = Новый Файл(".\ru\OPI");
|
||||
КаталогПриемник = Новый Файл(".\" + Язык + "\OPI");
|
||||
|
||||
Если КаталогПриемник.Существует() Тогда
|
||||
УдалитьФайлы(КаталогПриемник.ПолноеИмя);
|
||||
КонецЕсли;
|
||||
|
||||
СкопироватьФайлы(КаталогИсточник.ПолноеИмя, КаталогПриемник.ПолноеИмя);
|
||||
ФайлыМодулей = НайтиФайлы("./" + Язык + "/", "*.bsl", Истина);
|
||||
|
||||
Для Каждого ФайлМодуля Из ФайлыМодулей Цикл
|
||||
ПеревестиМодуль(ФайлМодуля.ПолноеИмя);
|
||||
КонецЦикла;
|
||||
|
||||
ВсеФайлыЛокализации = НайтиФайлы("./" + Язык, "*", Истина);
|
||||
ОтборИменМодулей = Новый Структура("ИмяМодуля", Истина);
|
||||
СтрокиИмен = ТаблицаСловаря.НайтиСтроки(ОтборИменМодулей);
|
||||
УдаляемыеКаталоги = Новый Массив;
|
||||
|
||||
Для Каждого ФайлЛокализации Из ВсеФайлыЛокализации Цикл
|
||||
|
||||
Если Не ФайлЛокализации.ЭтоКаталог() Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийПуть = ФайлЛокализации.ПолноеИмя;
|
||||
НовыйПуть = ТекущийПуть;
|
||||
|
||||
Для Каждого Имя Из СтрокиИмен Цикл
|
||||
НовыйПуть = СтрЗаменить(НовыйПуть, Имя.Ключ, Имя.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
ФайлНовогоПути = Новый Файл(НовыйПуть);
|
||||
|
||||
Если Не ФайлНовогоПути.Существует() Тогда
|
||||
УдаляемыеКаталоги.Добавить(ТекущийПуть);
|
||||
СоздатьКаталог(НовыйПуть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого ФайлЛокализации Из ВсеФайлыЛокализации Цикл
|
||||
|
||||
Если ФайлЛокализации.ЭтоКаталог() Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийПуть = ФайлЛокализации.ПолноеИмя;
|
||||
НовыйПуть = ТекущийПуть;
|
||||
|
||||
Для Каждого Имя Из СтрокиИмен Цикл
|
||||
НовыйПуть = СтрЗаменить(НовыйПуть, Имя.Ключ, Имя.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
ФайлНовогоПути = Новый Файл(НовыйПуть);
|
||||
|
||||
Если Не ФайлНовогоПути.Существует() Тогда
|
||||
ПереместитьФайл(ТекущийПуть, НовыйПуть);
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Для Каждого Каталог Из УдаляемыеКаталоги Цикл
|
||||
УдалитьФайлы(Каталог);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПеревестиМодуль(ПутьКМодулю)
|
||||
|
||||
ДокументМодуля = Новый ТекстовыйДокумент();
|
||||
ДокументМодуля.Прочитать(ПутьКМодулю, "UTF-8");
|
||||
|
||||
ТекстМодуля = ДокументМодуля.ПолучитьТекст();
|
||||
|
||||
Для Каждого Элемент Из ТаблицаСловаря Цикл
|
||||
|
||||
ТекущееЗначение = Элемент.Значение;
|
||||
|
||||
Пока СтрДлина(ТекущееЗначение) < Элемент.Длина Цикл
|
||||
ТекущееЗначение = ТекущееЗначение + " ";
|
||||
КонецЦикла;
|
||||
|
||||
ТекстМодуля = СтрЗаменить(ТекстМодуля, Элемент.Ключ, Элемент.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
ДокументМодуля.УстановитьТекст(ТекстМодуля);
|
||||
ДокументМодуля.Записать(ПутьКМодулю);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьТаблицуСловаря(ПутьКСловарю)
|
||||
|
||||
ТаблицаСловаря.Очистить();
|
||||
|
||||
ЧтениеJSON = Новый ЧтениеJSON();
|
||||
ЧтениеJSON.ОткрытьФайл(ПутьКСловарю);
|
||||
ДанныеСловаря = ПрочитатьJSON(ЧтениеJSON, Истина);
|
||||
ЧтениеJSON.Закрыть();
|
||||
|
||||
Для Каждого Элемент Из ДанныеСловаря Цикл
|
||||
|
||||
НоваяСтрокаСловаря = ТаблицаСловаря.Добавить();
|
||||
НоваяСтрокаСловаря.Ключ = Элемент.Ключ;
|
||||
НоваяСтрокаСловаря.Значение = Элемент.Значение;
|
||||
НоваяСтрокаСловаря.Длина = СтрДлина(Элемент.Ключ);
|
||||
НоваяСтрокаСловаря.ИмяМодуля = СтрНайти(Элемент.Ключ, "OPI_") <> 0;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ТаблицаСловаря.Сортировать("Длина УБЫВ");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура СкопироватьФайлы(Знач КаталогИсточник, Знач КаталогПриемник)
|
||||
@ -34,4 +162,6 @@
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
КонецПроцедуры
|
||||
|
||||
ПриСозданииОбъекта();
|
File diff suppressed because it is too large
Load Diff
110
en/OPI/src/CommonModules/OPI_Cryptography/Module.bsl
Normal file
110
en/OPI/src/CommonModules/OPI_Cryptography/Module.bsl
Normal file
@ -0,0 +1,110 @@
|
||||
// Location OS: ./OInt/tools/Modules/internal/Modules/OPI_Cryptography.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:UnusedLocalVariable-off
|
||||
|
||||
#Region ServiceProgramInterface
|
||||
|
||||
#Region BSP
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2019, LLC 1C-Soft
|
||||
// All rights reserved. This program and accompanying materials are provided
|
||||
// in withоотinетwithтinии with уwithлоinиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||||
// License text available at:
|
||||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Function HMACSHA256(Val Key, Val Data) Export
|
||||
|
||||
Return HMAC(Key, Data, HashFunction.SHA256, 64);
|
||||
|
||||
EndFunction
|
||||
|
||||
Function Hash(BinaryData, Type) Export
|
||||
|
||||
Hashing = New DataHashing(Type);
|
||||
Hashing.Add(BinaryData);
|
||||
|
||||
Return Hashing.HashSum;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function HMAC(Val Key, Val Data, Type, BlockSize) Export
|
||||
|
||||
Twice = 2;
|
||||
|
||||
If Key.Size() > BlockSize Then
|
||||
Key = Hash(Key, Type);
|
||||
EndIf;
|
||||
|
||||
If Key.Size() <= BlockSize Then
|
||||
Key = GetHexStringFromBinaryData(Key);
|
||||
Key = Left(Key + RepeatString("00", BlockSize), BlockSize * Twice);
|
||||
EndIf;
|
||||
|
||||
Key = GetBinaryDataBufferFromBinaryData(GetBinaryDataFromHexString(Key));
|
||||
|
||||
Ipad = GetBinaryDataBufferFromHexString(RepeatString("36", BlockSize));
|
||||
Opad = GetBinaryDataBufferFromHexString(RepeatString("5c", BlockSize));
|
||||
|
||||
Ipad.WriteBitwiseExclusiveOr(0, Key);
|
||||
Ikeypad = GetBinaryDataFromBinaryDataBuffer(ipad);
|
||||
|
||||
Opad.WriteBitwiseExclusiveOr(0, Key);
|
||||
Okeypad = GetBinaryDataFromBinaryDataBuffer(opad);
|
||||
|
||||
Return Hash(ConcatenateBinaryData(okeypad, Hash(ConcatenateBinaryData(ikeypad, Data), Type)), Type);
|
||||
|
||||
EndFunction
|
||||
|
||||
Function ConcatenateBinaryData(BinaryData1, BinaryData2) Export
|
||||
|
||||
BinaryDataArray = New Array;
|
||||
BinaryDataArray.Add(BinaryData1);
|
||||
BinaryDataArray.Add(BinaryData2);
|
||||
|
||||
Return JoinBinaryData(BinaryDataArray);
|
||||
|
||||
EndFunction
|
||||
|
||||
Function RepeatString(String, Quantity) Export
|
||||
|
||||
Parts = New Array(Quantity);
|
||||
|
||||
For To = 1 by Quantity Loop
|
||||
Parts.Add(String);
|
||||
EndOfLoop;
|
||||
|
||||
Return StrJoin(Parts, "");
|
||||
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
||||
|
||||
#EndRegion
|
File diff suppressed because it is too large
Load Diff
470
en/OPI/src/CommonModules/OPI_GetTestData/Module.bsl
Normal file
470
en/OPI/src/CommonModules/OPI_GetTestData/Module.bsl
Normal file
@ -0,0 +1,470 @@
|
||||
// Location OS: ./OInt/tools/Modules/OPI_TestDataRetrieval.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:UsingHardcodePath-off
|
||||
// BSLLS:Typo-off
|
||||
// BSLLS:DeprecatedMessage-off
|
||||
// BSLLS:UsingServiceTag-off
|
||||
// BSLLS:ExecuteExternalCodeInCommonModule-off
|
||||
// BSLLS:DuplicateStringLiteral-off
|
||||
|
||||
//@skip-check use-non-recommended-method
|
||||
|
||||
// Uncomment if OneScript is executed
|
||||
// #Use "./internal"
|
||||
// #Use asserts
|
||||
|
||||
#Region ServiceProgramInterface
|
||||
|
||||
Function GetTestingSectionMapping() Export
|
||||
|
||||
StandardDependencies = "[Decode, Build]";
|
||||
GoogleDependencies = "Testing-GoogleWorkspace";
|
||||
|
||||
Sections = New Structure;
|
||||
Sections.Insert("Telegram" , StandardDependencies);
|
||||
Sections.Insert("VK" , StandardDependencies);
|
||||
Sections.Insert("Viber" , StandardDependencies);
|
||||
Sections.Insert("Twitter" , StandardDependencies);
|
||||
Sections.Insert("YandexDisk" , StandardDependencies);
|
||||
Sections.Insert("GoogleWorkspace", StandardDependencies);
|
||||
Sections.Insert("GoogleCalendar" , GoogleDependencies);
|
||||
Sections.Insert("GoogleDrive" , GoogleDependencies);
|
||||
Sections.Insert("GoogleSheets" , GoogleDependencies);
|
||||
Sections.Insert("Notion" , StandardDependencies);
|
||||
Sections.Insert("Slack" , StandardDependencies);
|
||||
Sections.Insert("Airtable" , StandardDependencies);
|
||||
Sections.Insert("Dropbox" , StandardDependencies);
|
||||
|
||||
Return Sections;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetTestTable() Export
|
||||
|
||||
Telegram = "Telegram";
|
||||
VK = "VK";
|
||||
YDisk = "YandexDisk";
|
||||
Calendar = "GoogleCalendar";
|
||||
Twitter = "Twitter";
|
||||
Viber = "Viber";
|
||||
Drive = "GoogleDrive";
|
||||
VSpace = "GoogleWorkspace";
|
||||
Notion = "Notion";
|
||||
Slack = "Slack";
|
||||
Tables = "GoogleSheets";
|
||||
AirT = "Airtable";
|
||||
Dropbox = "Dropbox";
|
||||
|
||||
TestTable = New ValueTable;
|
||||
TestTable.Columns.Add("Method");
|
||||
TestTable.Columns.Add("Synonym");
|
||||
TestTable.Columns.Add("Section");
|
||||
|
||||
NewTest(TestTable, "Telegram_GetBotInfo" , "Get bot information" , Telegram);
|
||||
NewTest(TestTable, "Telegram_GetUpdates" , "Get updates" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SetWebhook" , "Set Webhook" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SendTextMessage" , "Send text message" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SendImage" , "Send image" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SendVideo" , "Send video" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SendAudio" , "Send audio" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SendDocument" , "Send document" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SendGIF" , "Send GIF" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SendMediaGroup" , "Send media group" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SendLocation" , "Send location" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SendContact" , "Send contact" , Telegram);
|
||||
NewTest(TestTable, "Telegram_SendPoll" , "Send poll" , Telegram);
|
||||
NewTest(TestTable, "Telegram_ForwardMessage" , "Forward message" , Telegram);
|
||||
NewTest(TestTable, "Telegram_BanUnban" , "Ban/Unban" , Telegram);
|
||||
NewTest(TestTable, "Telegram_CreateInvitationLink" , "Create invitation link" , Telegram);
|
||||
NewTest(TestTable, "Telegram_PinUnpinMessage" , "Pin/Unpin message" , Telegram);
|
||||
NewTest(TestTable, "Telegram_GetMemberCount" , "Get participant count" , Telegram);
|
||||
NewTest(TestTable, "Telegram_GetForumAvatarsList", "Get forum avatars list", Telegram);
|
||||
NewTest(TestTable, "Telegram_CreateDeleteForumTopic" , "Create/Delete forum topic" , Telegram);
|
||||
NewTest(TestTable, "Telegram_ChangeMainTopicName" , "Change main topic name" , Telegram);
|
||||
NewTest(TestTable, "Telegram_HideShowMainTopic" , "Hide/Show main topic" , Telegram);
|
||||
|
||||
NewTest(TestTable, "VK_CreateTokenLink" , "Create token retrieval link", VK);
|
||||
NewTest(TestTable, "VK_CreateDeletePost" , "Create/Delete post" , VK);
|
||||
NewTest(TestTable, "VK_CreateCompositePost" , "Create/Delete composite post" , VK);
|
||||
NewTest(TestTable, "VK_CreatePoll" , "Create poll" , VK);
|
||||
NewTest(TestTable, "VK_SaveDeleteImage" , "Add/Delete image" , VK);
|
||||
NewTest(TestTable, "VK_CreateStory" , "Create story" , VK);
|
||||
NewTest(TestTable, "VK_DiscussionMethods" , "Actions with discussions" , VK);
|
||||
NewTest(TestTable, "VK_LikeRepostComment" , "Like/Repost/Comment" , VK);
|
||||
NewTest(TestTable, "VK_GetStatistics" , "Get statistics" , VK);
|
||||
NewTest(TestTable, "VK_GetPostStatistics" , "Get post statistics" , VK);
|
||||
NewTest(TestTable, "VK_CreateAdCampaign" , "Create advertising campaign" , VK);
|
||||
NewTest(TestTable, "VK_SendMessage" , "Send message" , VK);
|
||||
NewTest(TestTable, "VK_GetProductCategories" , "Get product categories" , VK);
|
||||
NewTest(TestTable, "VK_CreateProductSelection" , "Create product and selection" , VK);
|
||||
NewTest(TestTable, "VK_CreateProductWithProperties" , "Create product with properties" , VK);
|
||||
NewTest(TestTable, "VK_GetProductList" , "Get product list" , VK);
|
||||
NewTest(TestTable, "VK_GetSelectionList" , "Get selection list" , VK);
|
||||
NewTest(TestTable, "VK_GetPropertyList" , "Get property list" , VK);
|
||||
NewTest(TestTable, "VK_GetOrderList" , "Get order list" , VK);
|
||||
NewTest(TestTable, "VK_UploadVideo" , "Upload video" , VK);
|
||||
|
||||
NewTest(TestTable, "YDisk_GetDiskInfo" , "Get disk information" , YDisk);
|
||||
NewTest(TestTable, "YDisk_CreateFolder" , "Create folder" , YDisk);
|
||||
NewTest(TestTable, "YDisk_UploadByUrlAndGetObject", "Upload by URL and get" , YDisk);
|
||||
NewTest(TestTable, "YDisk_UploadDeleteFile" , "Upload/Delete file" , YDisk);
|
||||
NewTest(TestTable, "YDisk_CreateObjectCopy" , "Create object copy" , YDisk);
|
||||
NewTest(TestTable, "YDisk_GetDownloadLink" , "Get download link" , YDisk);
|
||||
NewTest(TestTable, "YDisk_GetFileList" , "Get list of files" , YDisk);
|
||||
NewTest(TestTable, "YDisk_MoveObject" , "Move object" , YDisk);
|
||||
NewTest(TestTable, "YDisk_PublicObjectActions" , "Actions with public objects", YDisk);
|
||||
NewTest(TestTable, "YDisk_GetPublishedList" , "Get published list" , YDisk);
|
||||
|
||||
NewTest(TestTable, "GV_GetAuthorizationLink" , "Get authorization link" , VSpace);
|
||||
NewTest(TestTable, "GV_GetToken" , "Get token" , VSpace);
|
||||
NewTest(TestTable, "GV_UpdateToken" , "Refresh token" , VSpace);
|
||||
|
||||
NewTest(TestTable, "GC_GetCalendarList" , "Get list of calendars" , Calendar);
|
||||
NewTest(TestTable, "GC_CreateDeleteCalendar" , "Create/Delete calendar" , Calendar);
|
||||
NewTest(TestTable, "GC_CreateDeleteEvent" , "Create/Delete event" , Calendar);
|
||||
NewTest(TestTable, "GC_GetEventList" , "Get list of events" , Calendar);
|
||||
|
||||
NewTest(TestTable, "GD_GetCatalogList" , "Get list of directories" , Drive);
|
||||
NewTest(TestTable, "GD_UploadDeleteFile" , "Upload/Delete file" , Drive);
|
||||
NewTest(TestTable, "GD_CreateDeleteComment" , "Create/Delete Comment" , Drive);
|
||||
NewTest(TestTable, "GD_CreateCatalog" , "Create/Delete catalog" , Drive);
|
||||
|
||||
NewTest(TestTable, "GT_CreateTable" , "Create table" , Tables);
|
||||
NewTest(TestTable, "GT_GetTable" , "Get table" , Tables);
|
||||
NewTest(TestTable, "GT_FillClearCells" , "Fill/Clear cells" , Tables);
|
||||
|
||||
NewTest(TestTable, "Twitter_GetAuthorizationLink" , "Get authorization link" , Twitter);
|
||||
NewTest(TestTable, "Twitter_UpdateToken" , "Refresh token" , Twitter);
|
||||
NewTest(TestTable, "Twitter_CreateTextTweet" , "Text tweet" , Twitter);
|
||||
NewTest(TestTable, "Twitter_CreateTweetWithImage" , "Tweet with image" , Twitter);
|
||||
NewTest(TestTable, "Twitter_CreateTweetWithVideo" , "Tweet with video" , Twitter);
|
||||
NewTest(TestTable, "Twitter_CreateTweetWithGif" , "Tweet with gif" , Twitter);
|
||||
NewTest(TestTable, "Twitter_CreateTweetWithPoll" , "Tweet with poll" , Twitter);
|
||||
|
||||
NewTest(TestTable, "Viber_GetChannelInfo" , "Get channel info" , Viber);
|
||||
NewTest(TestTable, "Viber_GetUserData" , "Get user data" , Viber);
|
||||
NewTest(TestTable, "Viber_GetOnlineUsers" , "Get online users" , Viber);
|
||||
NewTest(TestTable, "Viber_SendTextMessage" , "Send text message" , Viber);
|
||||
NewTest(TestTable, "Viber_SendImage" , "Send image" , Viber);
|
||||
NewTest(TestTable, "Viber_SendFile" , "SendFile" , Viber);
|
||||
NewTest(TestTable, "Viber_SendContact" , "Send contact" , Viber);
|
||||
NewTest(TestTable, "Viber_SendLocation" , "SendLocation" , Viber);
|
||||
NewTest(TestTable, "Viber_SendLink" , "SendLink" , Viber);
|
||||
|
||||
NewTest(TestTable, "Notion_CreatePage" , "Create page" , Notion);
|
||||
NewTest(TestTable, "Notion_CreateEditDatabase" , "Create/Edit database" , Notion);
|
||||
NewTest(TestTable, "Notion_GetPageInfo" , "Get page info" , Notion);
|
||||
NewTest(TestTable, "Notion_GetDatabaseInfo" , "Get database info" , Notion);
|
||||
NewTest(TestTable, "Notion_CreatePageInDatabase" , "Create page in database" , Notion);
|
||||
NewTest(TestTable, "Notion_EditPageProperties" , "Edit page properties" , Notion);
|
||||
NewTest(TestTable, "Notion_CreateDeleteBlock" , "Create/Delete block" , Notion);
|
||||
NewTest(TestTable, "Notion_GetUsers" , "Get users" , Notion);
|
||||
NewTest(TestTable, "Notion_GetUserData" , "Get user data" , Notion);
|
||||
|
||||
NewTest(TestTable, "Slack_GetBotInfo" , "Get bot information" , Slack);
|
||||
NewTest(TestTable, "Slack_GetUserList" , "Get user list" , Slack);
|
||||
NewTest(TestTable, "Slack_GetRegionList" , "Get region list" , Slack);
|
||||
NewTest(TestTable, "Slack_SendDeleteMessage" , "Send/Delete message" , Slack);
|
||||
NewTest(TestTable, "Slack_SendDeleteEphemeral" , "Send/Delete ephemeral" , Slack);
|
||||
NewTest(TestTable, "Slack_GetScheduledMessages" , "Get scheduled messages" , Slack);
|
||||
NewTest(TestTable, "Slack_CreateArchiveChannel" , "Create/Archive channel" , Slack);
|
||||
NewTest(TestTable, "Slack_GetChannelList" , "Get channel list" , Slack);
|
||||
NewTest(TestTable, "Slack_OpenCloseDialog" , "Open/Close dialog" , Slack);
|
||||
NewTest(TestTable, "Slack_GetFileList" , "Get list of files" , Slack);
|
||||
NewTest(TestTable, "Slack_UploadDeleteFile" , "Upload/Delete file" , Slack);
|
||||
NewTest(TestTable, "Slack_GetExternalFileList" , "Get external file list" , Slack);
|
||||
NewTest(TestTable, "Slack_UploadDeleteExternalFile" , "Upload/Delete external file" , Slack);
|
||||
|
||||
NewTest(TestTable, "AT_CreateDatabase" , "Create/Edit database" , AirT);
|
||||
NewTest(TestTable, "AT_CreateTable" , "Create/Edit table" , AirT);
|
||||
NewTest(TestTable, "AT_CreateField" , "Create/Edit field" , AirT);
|
||||
NewTest(TestTable, "AT_CreateDeleteRecords" , "Create/Delete records" , AirT);
|
||||
|
||||
NewTest(TestTable, "Dropbox_GetUpdateToken" , "Get/Update token" , Dropbox);
|
||||
NewTest(TestTable, "Dropbox_UploadFile" , "Upload file" , Dropbox);
|
||||
NewTest(TestTable, "Dropbox_UploadFileByURL" , "Upload file by URL" , Dropbox);
|
||||
NewTest(TestTable, "Dropbox_CreateFolder" , "Create folder" , Dropbox);
|
||||
NewTest(TestTable, "Dropbox_CreateDeleteTag" , "Create/Delete tag" , Dropbox);
|
||||
NewTest(TestTable, "Dropbox_GetAccount" , "Get account data" , Dropbox);
|
||||
NewTest(TestTable, "Dropbox_AccessManagement" , "Access management" , Dropbox);
|
||||
|
||||
Return TestTable;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function ExpectsThat(Value) Export
|
||||
|
||||
Attempt
|
||||
|
||||
Module = GetCommonModule("UTest");
|
||||
Awaiting = TypeValue(Module) = Type("CommonModule");
|
||||
Return Module.ExpectsThat(Value);
|
||||
|
||||
Exception
|
||||
Return Awaiting.What(Value);
|
||||
EndOfAttempt;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function FormYAXTests() Export
|
||||
|
||||
Module = GetCommonModule("UTTests");
|
||||
Sections = GetTestingSectionMapping();
|
||||
TestTable = GetTestTable();
|
||||
|
||||
For Each Section Of Sections Loop
|
||||
|
||||
CurrentSection = Section.Key;
|
||||
Filter = New Structure("Section", CurrentSection);
|
||||
SectionTests = TestTable.FindLines(Filter);
|
||||
|
||||
Set = Module.AddTestSet(CurrentSection);
|
||||
|
||||
For Each Test Of SectionTests Loop
|
||||
Set.AddServerTest(Test.Method, Test.Synonym);
|
||||
EndOfLoop;
|
||||
|
||||
EndOfLoop;
|
||||
|
||||
Return "";
|
||||
|
||||
EndFunction
|
||||
|
||||
Function FormAssertsTests() Export
|
||||
|
||||
TestTable = GetTestTable();
|
||||
ArrayOfTests = New Array;
|
||||
|
||||
For Each Test Of TestTable Loop
|
||||
ArrayOfTests.Add(Test.Method);
|
||||
EndOfLoop;
|
||||
|
||||
Return ArrayOfTests;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetParameter(Parameter) Export
|
||||
|
||||
Path = DataFilePath();
|
||||
Return GetValueFromFile(Parameter, Path);
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetBinary(Parameter) Export
|
||||
|
||||
Path = DataFilePath();
|
||||
LocalParameter = Parameter + "Local";
|
||||
MainValue = GetValueFromFile(Parameter , Path);
|
||||
LocalValue = GetValueFromFile(LocalParameter, Path);
|
||||
|
||||
LocalFile = New File(LocalValue);
|
||||
|
||||
If LocalFile.Exists() Then
|
||||
Value = New BinaryData(LocalValue);
|
||||
Otherwise
|
||||
Value = MainValue;
|
||||
EndIf;
|
||||
|
||||
If TypeValue(Value) = Type("String") Then
|
||||
Value = GetFilePath(Value, LocalParameter);
|
||||
EndIf;
|
||||
|
||||
Return Value;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetFilePath(Val Path, LocalParameter, Val SaveLocally = True) Export
|
||||
|
||||
If StrFind(Path, "http") > 0
|
||||
Or StrFind(Path, "www") > 0 Then
|
||||
|
||||
AndVF = GetTempFileName();
|
||||
CopyFile(Path, AndVF);
|
||||
Path = AndVF;
|
||||
Binary = New BinaryData(Path);
|
||||
|
||||
If SaveLocally Then
|
||||
WriteParameter(LocalParameter, AndVF);
|
||||
Otherwise
|
||||
DeleteFiles(AndVF);
|
||||
EndIf;
|
||||
|
||||
Otherwise
|
||||
|
||||
Binary = New BinaryData(Path);
|
||||
|
||||
EndIf;
|
||||
|
||||
Return Binary;
|
||||
|
||||
EndFunction
|
||||
|
||||
Procedure ParameterToCollection(Parameter, Collection) Export
|
||||
|
||||
Value = GetParameter(Parameter);
|
||||
Collection.Insert(Parameter, Value);
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure BinaryToCollection(Parameter, Collection) Export
|
||||
|
||||
Value = GetBinary(Parameter);
|
||||
Collection.Insert(Parameter, Value);
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure WriteParameter(Parameter, Value) Export
|
||||
|
||||
Path = DataFilePath();
|
||||
WriteParameterToFile(Parameter, Value, Path);
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure WriteLog(Val Result, Val Method, Val Library = "") Export
|
||||
|
||||
Header = String(OPI_Tools.GetCurrentDate()) + " | " + Method;
|
||||
|
||||
Attempt
|
||||
Data = OPI_Tools.JSONString(Result);
|
||||
Exception
|
||||
Data = "Not JSON: " + String(Result);
|
||||
EndOfAttempt;
|
||||
|
||||
Data = " " + Data;
|
||||
|
||||
Notify(Header);
|
||||
Notify(Symbols.PS);
|
||||
Notify(Data);
|
||||
Notify(Symbols.PS);
|
||||
Notify("---------------------------------");
|
||||
Notify(Symbols.PS);
|
||||
|
||||
If ValueFilled(Library) Then
|
||||
WriteLogFile(Data, Method, Library);
|
||||
EndIf;
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#Region ServiceProceduresAndFunctions
|
||||
|
||||
Function GetValueFromFile(Parameter, Path)
|
||||
|
||||
Values = OPI_Tools.ReadJSONFile(Path);
|
||||
Return ?(Values.Property(Parameter), Values[Parameter], "");
|
||||
|
||||
EndFunction
|
||||
|
||||
Function DataFilePath()
|
||||
|
||||
Path = "";
|
||||
PossiblePaths = New Array;
|
||||
PossiblePaths.Add("./data.json");
|
||||
PossiblePaths.Add("C:\GDrive\My Drive\data.json");
|
||||
PossiblePaths.Add("D:\GD\My Drive\data.json");
|
||||
|
||||
For Each PossiblePath Of PossiblePaths Loop
|
||||
|
||||
RepositoryFile = New File(PossiblePath);
|
||||
|
||||
If RepositoryFile.Exists() Then
|
||||
Path = PossiblePath;
|
||||
EndIf;
|
||||
|
||||
EndOfLoop;
|
||||
|
||||
Return Path;
|
||||
|
||||
EndFunction
|
||||
|
||||
Function GetCommonModule(Val Name)
|
||||
УwithтаноinитьБезопаwithныйMode(True);
|
||||
Module = Calculate(Name);
|
||||
УwithтаноinитьБезопаwithныйMode(False);
|
||||
Return Module;
|
||||
EndFunction
|
||||
|
||||
Procedure NewTest(ValueTable, Val Method, Val Synonym, Val Section)
|
||||
|
||||
NewTest = ValueTable.Add();
|
||||
NewTest.Method = Method;
|
||||
NewTest.Synonym = Synonym;
|
||||
NewTest.Section = Section;
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure WriteParameterToFile(Val Parameter, Val Value, Val Path)
|
||||
|
||||
Values = OPI_Tools.ReadJSONFile(Path);
|
||||
Values.Insert(Parameter, Value);
|
||||
|
||||
Record = New WritingJSON;
|
||||
JSONWriteParameters = New JSONWriteParameters(JSONLineBreak.Auto, Symbols.Tab);
|
||||
Record.OpenFile(Path, , , JSONWriteParameters);
|
||||
WriteJSON(Record, Values);
|
||||
Record.Close();
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure WriteLogFile(Val Data, Val Method, Val Library)
|
||||
|
||||
Attempt
|
||||
|
||||
LogPath = "./docs/results";
|
||||
LibraryLogPath = LogPath + "/" + Library;
|
||||
|
||||
LogDirectory = New File(LogPath);
|
||||
|
||||
If Not LogDirectory.Exists() Then
|
||||
CreateDirectory(LogPath);
|
||||
EndIf;
|
||||
|
||||
LibraryLogCatalog = New File(LibraryLogPath);
|
||||
|
||||
If Not LibraryLogCatalog.Exists() Then
|
||||
CreateDirectory(LibraryLogPath);
|
||||
EndIf;
|
||||
|
||||
FilePath = LibraryLogPath + "/" + Method + ".log";
|
||||
LogFile = New File(FilePath);
|
||||
|
||||
If Not LogFile.Exists() Then
|
||||
LogDocument = New TextDocument;
|
||||
LogDocument.SetText(Data);
|
||||
LogDocument.Write(FilePath);
|
||||
EndIf;
|
||||
|
||||
Exception
|
||||
Notify("Failed to write log file!: " + ErrorDescription());
|
||||
EndOfAttempt;
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
// Расположение OS: ./OInt/core/Modules/OPI_GoogleSheets.os
|
||||
// Библиотека: Google Sheets
|
||||
// Команда CLI: gsheets
|
||||
// Location OS: ./OInt/core/Modules/OPI_GoogleSheets.os
|
||||
// Library: Google Sheets
|
||||
// CLI Command: gsheets
|
||||
|
||||
// MIT License
|
||||
|
||||
@ -29,381 +29,381 @@
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
// #Использовать "../../tools"
|
||||
// Uncomment if OneScript is executed
|
||||
// #Use "../../tools"
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
#Region ProgrammingInterface
|
||||
|
||||
#Область РаботаСКнигами
|
||||
#Region BookWork
|
||||
|
||||
// Создать книгу
|
||||
// Создает новую книгу
|
||||
// CreateBook
|
||||
// Creates a new book
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Наименование - Строка - Наименование - title
|
||||
// МассивИменЛистов - Массив из Строка - Массив имен для добавления новых листов в книгу - sheets
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// Name - String - Name - title
|
||||
// ArrayOfSheetNames - Array of Strings - Array of names to add new sheets to the book - sheets
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция СоздатьКнигу(Знач Токен, Знач Наименование, Знач МассивИменЛистов) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function CreateBook(Val Token, Val Name, Val ArrayOfSheetNames) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивИменЛистов);
|
||||
OPI_TypeConversion.GetLine(Name);
|
||||
OPI_TypeConversion.GetCollection(ArrayOfSheetNames);
|
||||
|
||||
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets";
|
||||
|
||||
Свойства = Новый Структура("title" , Наименование);
|
||||
Листы = Новый Массив;
|
||||
Properties = New Structure("title" , Name);
|
||||
Sheets = New Array;
|
||||
|
||||
ЗаполнитьМассивЛистов(МассивИменЛистов, Листы);
|
||||
FillSheetArray(ArrayOfSheetNames, Sheets);
|
||||
|
||||
Параметры = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("properties", Свойства, "Коллекция", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("sheets" , Листы , "Коллекция", Параметры);
|
||||
Parameters = New Structure;
|
||||
OPI_Tools.AddField("properties", Properties, "Collection", Parameters);
|
||||
OPI_Tools.AddField("sheets" , Sheets , "Collection", Parameters);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||
Response = OPI_Tools.Post(URL, Parameters, Headers);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Получить книгу
|
||||
// Получает информацию о книге по ID
|
||||
// GetBook
|
||||
// Gets information about the book by ID
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Идентификатор - Строка - Идентификатор книги - spreadsheet
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// Identifier - String - BookIdentifier - spreadsheet
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция ПолучитьКнигу(Знач Токен, Знач Идентификатор) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function GetBook(Val Token, Val Identifier) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Идентификатор);
|
||||
OPI_TypeConversion.GetLine(Identifier);
|
||||
|
||||
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Идентификатор;
|
||||
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Identifier;
|
||||
|
||||
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
|
||||
Response = OPI_Tools.Get(URL, , Headers);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Изменить наименование книги
|
||||
// Изменяет наименование существующей книги
|
||||
// ChangeBookName
|
||||
// Changes the name of the existing book
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Книга - Строка - ID книги - spreadsheet
|
||||
// Наименование - Строка - Новое наименование - title
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// Book - String - BookID - spreadsheet
|
||||
// Name - String - New name - title
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция ИзменитьНаименованиеКниги(Знач Токен, Знач Книга, Знач Наименование) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function EditBookTitle(Val Token, Val Book, Val Name) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
|
||||
OPI_TypeConversion.GetLine(Book);
|
||||
OPI_TypeConversion.GetLine(Name);
|
||||
|
||||
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
|
||||
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + ":batchUpdate";
|
||||
|
||||
Изменение = Новый Структура("title", Наименование);
|
||||
ЗапросИзменения = Новый Структура("properties,fields", Изменение, "title");
|
||||
Запрос = Новый Структура("updateSpreadsheetProperties", ЗапросИзменения);
|
||||
Change = New Structure("title", Name);
|
||||
ChangeRequest = New Structure("properties,fields", Change, "title");
|
||||
Request = New Structure("updateSpreadsheetProperties", ChangeRequest);
|
||||
|
||||
МассивЗапросов = Новый Массив;
|
||||
МассивЗапросов.Добавить(Запрос);
|
||||
ArrayOfRequests = New Array;
|
||||
ArrayOfRequests.Add(Request);
|
||||
|
||||
Параметры = Новый Структура("requests", МассивЗапросов);
|
||||
Parameters = New Structure("requests", ArrayOfRequests);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||
Response = OPI_Tools.Post(URL, Parameters, Headers);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
||||
#Область РаботаСЛистами
|
||||
#Region SheetWork
|
||||
|
||||
// Добавить лист
|
||||
// Добавляет новый лист в книгу
|
||||
// AddSheet
|
||||
// Adds a new sheet to the book
|
||||
//
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Книга - Строка - Идентификатор книги - spreadsheet
|
||||
// Наименование - Строка - Наименование нового листа - title
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// Book - String - BookIdentifier - spreadsheet
|
||||
// Name - String - NewSheetName - title
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция ДобавитьЛист(Знач Токен, Знач Книга, Знач Наименование) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function AddSheet(Val Token, Val Book, Val Name) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||
OPI_TypeConversion.GetLine(Book);
|
||||
|
||||
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
|
||||
Лист = СоздатьЛист(Наименование);
|
||||
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + ":batchUpdate";
|
||||
Sheet = CreateSheet(Name);
|
||||
|
||||
Запросы = Новый Массив;
|
||||
Изменение = Новый Структура("addSheet", Лист);
|
||||
Запросы.Добавить(Изменение);
|
||||
Requests = New Array;
|
||||
Change = New Structure("addSheet", Sheet);
|
||||
Requests.Add(Change);
|
||||
|
||||
Параметры = Новый Структура("requests", Запросы);
|
||||
Parameters = New Structure("requests", Requests);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||
Response = OPI_Tools.Post(URL, Parameters, Headers);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Удалить лист
|
||||
// Удаляет лист из книги
|
||||
// DeleteSheet
|
||||
// Deletes a sheet from the book
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Книга - Строка - Идентификатор книги - spreadsheet
|
||||
// Лист - Строка - Идентификатор удаляемого листа - sheet
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// Book - String - BookIdentifier - spreadsheet
|
||||
// Sheet - String - IdentifierOfSheetToDelete - sheet
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция УдалитьЛист(Знач Токен, Знач Книга, Знач Лист) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function DeleteSheet(Val Token, Val Book, Val Sheet) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
|
||||
OPI_TypeConversion.GetLine(Book);
|
||||
OPI_TypeConversion.GetLine(Sheet);
|
||||
|
||||
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + ":batchUpdate";
|
||||
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + ":batchUpdate";
|
||||
|
||||
Запросы = Новый Массив;
|
||||
Лист = Новый Структура("sheetId" , Лист);
|
||||
Изменение = Новый Структура("deleteSheet", Лист);
|
||||
Запросы.Добавить(Изменение);
|
||||
Requests = New Array;
|
||||
Sheet = New Structure("sheetId" , Sheet);
|
||||
Change = New Structure("deleteSheet", Sheet);
|
||||
Requests.Add(Change);
|
||||
|
||||
Параметры = Новый Структура("requests", Запросы);
|
||||
Parameters = New Structure("requests", Requests);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||
Response = OPI_Tools.Post(URL, Parameters, Headers);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Копировать лист
|
||||
// Копирует лист из одной книги в другую
|
||||
// CopySheet
|
||||
// Copies a sheet from one book to another
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Откуда - Строка - ID книги источника - from
|
||||
// Куда - Строка - ID книги приемника - to
|
||||
// Лист - Строка - ID копируемого листа - sheet
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// From - String - SourceBookID - from
|
||||
// To - String - DestinationBookID - to
|
||||
// Sheet - String - CopiedSheetID - sheet
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция КопироватьЛист(Знач Токен, Знач Откуда, Знач Куда, Знач Лист) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function CopySheet(Val Token, Val From, Val To, Val Sheet) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Откуда);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Куда);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
|
||||
OPI_TypeConversion.GetLine(From);
|
||||
OPI_TypeConversion.GetLine(To);
|
||||
OPI_TypeConversion.GetLine(Sheet);
|
||||
|
||||
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/"
|
||||
+ Откуда
|
||||
+ From
|
||||
+ "/sheets/"
|
||||
+ Лист
|
||||
+ Sheet
|
||||
+ ":copyTo";
|
||||
|
||||
Параметры = Новый Структура("destinationSpreadsheetId", Куда);
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||
Parameters = New Structure("destinationSpreadsheetId", To);
|
||||
Response = OPI_Tools.Post(URL, Parameters, Headers);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
||||
#Область РаботаСДанными
|
||||
#Region DataWork
|
||||
|
||||
// Установить значения ячеек
|
||||
// Устанавливает значения ячеек листа
|
||||
// SetCellValues
|
||||
// Sets sheet cell values
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Книга - Строка - ID книги - spreadsheet
|
||||
// СоответствиеЗначений - Соответствие Из КлючИЗначение - Данные заполнения, где ключ это имя ячейки вида A1 - data
|
||||
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
|
||||
// ОсновноеИзмерение - Строка - Основное измерение при заполнении диапазона массивом - dim
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// Book - String - BookID - spreadsheet
|
||||
// ValueMapping - Key-Value Pair - Fill data where the key is the cell name like A1 - data
|
||||
// Sheet - String - Name лиwithта (перinый лиwithт по умолчанию) - sheetname
|
||||
// MajorDimension - String - Main dimension when filling the array range - dim
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция УстановитьЗначенияЯчеек(Знач Токен
|
||||
, Знач Книга
|
||||
, Знач СоответствиеЗначений
|
||||
, Знач Лист = ""
|
||||
, Знач ОсновноеИзмерение = "COLUMNS") Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function SetCellValues(Val Token
|
||||
, Val Book
|
||||
, Val ValueMapping
|
||||
, Val Sheet = ""
|
||||
, Val MajorDimension = "COLUMNS") Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(СоответствиеЗначений);
|
||||
OPI_TypeConversion.GetLine(Book);
|
||||
OPI_TypeConversion.GetCollection(ValueMapping);
|
||||
|
||||
Если Не ТипЗнч(СоответствиеЗначений) = Тип("Структура")
|
||||
И Не ТипЗнч(СоответствиеЗначений) = Тип("Соответствие") Тогда
|
||||
Возврат "Не удалось привести структуру значений к коллекции";
|
||||
КонецЕсли;
|
||||
If Not TypeValue(ValueMapping) = Type("Structure")
|
||||
And Not TypeValue(ValueMapping) = Type("Match") Then
|
||||
Return "Failed to convert the structure of values to a collection";
|
||||
EndIf;
|
||||
|
||||
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchUpdate";
|
||||
МассивДанных = СформироватьМассивДанныхЯчеек(СоответствиеЗначений, ОсновноеИзмерение, Лист);
|
||||
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + "/values:batchUpdate";
|
||||
Data array = FormCellDataArray(ValueMapping, MajorDimension, Sheet);
|
||||
|
||||
Параметры = Новый Структура("data,valueInputOption", МассивДанных, "USER_ENTERED");
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||
Parameters = New Structure("data,valueInputOption", Data array, "USER_ENTERED");
|
||||
Response = OPI_Tools.Post(URL, Parameters, Headers);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Очистить ячейки
|
||||
// Очищает значение в ячейках
|
||||
// Clear cells
|
||||
// Clears the value in cells
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Книга - Строка - ID книги - spreadsheet
|
||||
// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для очистки - cells
|
||||
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// Book - String - BookID - spreadsheet
|
||||
// Cell array - Array of Strings - Array of cells like A1 to be cleared - cells
|
||||
// Sheet - String - Name лиwithта (перinый лиwithт по умолчанию) - sheetname
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция ОчиститьЯчейки(Знач Токен, Знач Книга, Знач МассивЯчеек, Знач Лист = "") Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function ClearCells(Val Token, Val Book, Val Cell array, Val Sheet = "") Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
|
||||
OPI_TypeConversion.GetLine(Book);
|
||||
OPI_TypeConversion.GetCollection(Cell array);
|
||||
|
||||
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchClear";
|
||||
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + "/values:batchClear";
|
||||
|
||||
СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
|
||||
FormCellNameArray(Cell array, Sheet);
|
||||
|
||||
Параметры = Новый Структура("ranges", МассивЯчеек);
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, Заголовки);
|
||||
Parameters = New Structure("ranges", Cell array);
|
||||
Response = OPI_Tools.Post(URL, Parameters, Headers);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Получить значения ячеек
|
||||
// Получает значения ячеек таблицы
|
||||
// Get cell values
|
||||
// Gets cell values of the table
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Книга - Строка - ID книги - spreadsheet
|
||||
// МассивЯчеек - Массив из Строка - Массив ячеек вида А1 для получения (весь лист, если не заполнено) - cells
|
||||
// Лист - Строка - Имя листа (первый лист по умолчанию) - sheetname
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// Book - String - BookID - spreadsheet
|
||||
// Cell array - Array of Strings - Array ячееto inиdа А1 for получения (inеwithь лиwithт, еwithли не заполнено) - cells
|
||||
// Sheet - String - Name лиwithта (перinый лиwithт по умолчанию) - sheetname
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция ПолучитьЗначенияЯчеек(Знач Токен, Знач Книга, Знач МассивЯчеек = "", Знач Лист = "") Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function GetCellValues(Val Token, Val Book, Val Cell array = "", Val Sheet = "") Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Книга);
|
||||
OPI_TypeConversion.GetLine(Book);
|
||||
|
||||
Заголовки = OPI_GoogleWorkspace.ПолучитьЗаголовокАвторизации(Токен);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Книга + "/values:batchGet";
|
||||
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
|
||||
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + "/values:batchGet";
|
||||
|
||||
Если ЗначениеЗаполнено(МассивЯчеек) Тогда
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивЯчеек);
|
||||
СформироватьМассивИменЯчеек(МассивЯчеек, Лист);
|
||||
If ValueFilled(Cell array) Then
|
||||
OPI_TypeConversion.GetCollection(Cell array);
|
||||
FormCellNameArray(Cell array, Sheet);
|
||||
|
||||
Первый = Истина;
|
||||
Для Каждого Ячейка Из МассивЯчеек Цикл
|
||||
Разделитель = ?(Первый, "?", "&");
|
||||
URL = URL + Разделитель + "ranges=" + Ячейка;
|
||||
Первый = Ложь;
|
||||
КонецЦикла;
|
||||
Иначе
|
||||
URL = URL + "?ranges='" + Лист + "'";
|
||||
КонецЕсли;
|
||||
First = True;
|
||||
For Each Cell Of Cell array Loop
|
||||
Delimiter = ?(First, "?", "&");
|
||||
URL = URL + Delimiter + "ranges=" + Cell;
|
||||
First = False;
|
||||
EndOfLoop;
|
||||
Otherwise
|
||||
URL = URL + "?ranges='" + Sheet + "'";
|
||||
EndIf;
|
||||
|
||||
Ответ = OPI_Инструменты.Get(URL, , Заголовки);
|
||||
Response = OPI_Tools.Get(URL, , Headers);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
#Region ServiceProceduresAndFunctions
|
||||
|
||||
Процедура ЗаполнитьМассивЛистов(Знач МассивИмен, МассивЛистов)
|
||||
Procedure FillSheetArray(Val ArrayOfNames, SheetArray)
|
||||
|
||||
Для Каждого ИмяЛиста Из МассивИмен Цикл
|
||||
For Each SheetName Of ArrayOfNames Loop
|
||||
|
||||
Лист = СоздатьЛист(ИмяЛиста);
|
||||
МассивЛистов.Добавить(Лист);
|
||||
Sheet = CreateSheet(SheetName);
|
||||
SheetArray.Add(Sheet);
|
||||
|
||||
КонецЦикла;
|
||||
EndOfLoop;
|
||||
|
||||
КонецПроцедуры
|
||||
EndProcedure
|
||||
|
||||
Процедура ДобавитьИмяЛиста(Ячейка, Знач Лист)
|
||||
Procedure AddSheetName(Cell, Val Sheet)
|
||||
|
||||
Если ЗначениеЗаполнено(Лист) Тогда
|
||||
Ячейка = "'" + Лист + "'!" + Ячейка;
|
||||
КонецЕсли;
|
||||
If ValueFilled(Sheet) Then
|
||||
Cell = "'" + Sheet + "'!" + Cell;
|
||||
EndIf;
|
||||
|
||||
КонецПроцедуры
|
||||
EndProcedure
|
||||
|
||||
Функция СоздатьЛист(Знач Наименование)
|
||||
Function CreateSheet(Val Name)
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Наименование);
|
||||
OPI_TypeConversion.GetLine(Name);
|
||||
|
||||
СвойстваЛиста = Новый Структура("title" , Наименование);
|
||||
Лист = Новый Структура("properties", СвойстваЛиста);
|
||||
Sheet properties = New Structure("title" , Name);
|
||||
Sheet = New Structure("properties", Sheet properties);
|
||||
|
||||
Возврат Лист;
|
||||
Return Sheet;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
Функция СформироватьМассивДанныхЯчеек(Знач СтруктураЗначений, Знач ОсновноеИзмерение, Знач Лист)
|
||||
Function FormCellDataArray(Val ValueStructure, Val MajorDimension, Val Sheet)
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
|
||||
OPI_TypeConversion.GetLine(Sheet);
|
||||
|
||||
МассивДанных = Новый Массив;
|
||||
Data array = New Array;
|
||||
|
||||
Для Каждого ДанныеЯчейки Из СтруктураЗначений Цикл
|
||||
For Each CellData Of ValueStructure Loop
|
||||
|
||||
ТекущееЗначение = ДанныеЯчейки.Значение;
|
||||
ТекущийКлюч = ДанныеЯчейки.Ключ;
|
||||
CurrentValue = CellData.Value;
|
||||
Current key = CellData.Key;
|
||||
|
||||
ДобавитьИмяЛиста(ТекущийКлюч, Лист);
|
||||
AddSheetName(Current key, Sheet);
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьМассив(ТекущееЗначение);
|
||||
OPI_TypeConversion.GetArray(CurrentValue);
|
||||
|
||||
ТекущиеДанные = Новый Соответствие;
|
||||
ТекущийМассив = Новый Массив;
|
||||
Current data = New Match;
|
||||
Current array = New Array;
|
||||
|
||||
ТекущийМассив.Добавить(ТекущееЗначение);
|
||||
Current array.Add(CurrentValue);
|
||||
|
||||
OPI_Инструменты.ДобавитьПоле("range" , ТекущийКлюч , "Строка", ТекущиеДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("values" , ТекущийМассив , "Массив", ТекущиеДанные);
|
||||
OPI_Инструменты.ДобавитьПоле("majorDimension", ОсновноеИзмерение, "Строка", ТекущиеДанные);
|
||||
OPI_Tools.AddField("range" , Current key , "String", Current data);
|
||||
OPI_Tools.AddField("values" , Current array , "Array", Current data);
|
||||
OPI_Tools.AddField("majorDimension", MajorDimension, "String", Current data);
|
||||
|
||||
МассивДанных.Добавить(ТекущиеДанные);
|
||||
Data array.Add(Current data);
|
||||
|
||||
КонецЦикла;
|
||||
EndOfLoop;
|
||||
|
||||
Возврат МассивДанных;
|
||||
Return Data array;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
Процедура СформироватьМассивИменЯчеек(Знач МассивИмен, Знач Лист)
|
||||
Procedure FormCellNameArray(Val ArrayOfNames, Val Sheet)
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Лист);
|
||||
OPI_TypeConversion.GetLine(Sheet);
|
||||
|
||||
Для Н = 0 По МассивИмен.ВГраница() Цикл
|
||||
ДобавитьИмяЛиста(МассивИмен[Н], Лист);
|
||||
КонецЦикла;
|
||||
For N = 0 by ArrayOfNames.WithinBoundary() Loop
|
||||
AddSheetName(ArrayOfNames[N], Sheet);
|
||||
EndOfLoop;
|
||||
|
||||
КонецПроцедуры
|
||||
EndProcedure
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
@ -1,6 +1,6 @@
|
||||
// Расположение OS: ./OInt/core/Modules/OPI_GoogleWorkspace.os
|
||||
// Библиотека: Google Workspace
|
||||
// Команда CLI: google
|
||||
// Location OS: ./OInt/core/Modules/OPI_GoogleWorkspace.os
|
||||
// Library: Google Workspace
|
||||
// CLI command: google
|
||||
|
||||
// MIT License
|
||||
|
||||
@ -29,145 +29,145 @@
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
// #Использовать "../../tools"
|
||||
// Uncomment if OneScript is executed
|
||||
// #Use "../../tools"
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
#Region ProgrammingInterface
|
||||
|
||||
// Сформировать ссылку получения кода
|
||||
// Возвращает URL для авторизации в браузере
|
||||
// Generate code retrieval link
|
||||
// Returns URL for browser authorization
|
||||
//
|
||||
// Параметры:
|
||||
// ClientID - Строка - Client ID - id
|
||||
// Calendar - Булево - разрешение на методы Calendar - calendar
|
||||
// Drive - Булево - разрешение на методы Drive - drive
|
||||
// Sheets - Булево - разрешение на методы Sheets - sheets
|
||||
// Parameters:
|
||||
// ClientID - String - Client ID - id
|
||||
// Calendar - Boolean - Calendar methods permission - calendar
|
||||
// Drive - Boolean - Drive methods permission - drive
|
||||
// Sheets - Boolean - Sheets methods permission - sheets
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Строка - Ссылка получения кода
|
||||
Функция СформироватьСсылкуПолученияКода(Знач ClientID
|
||||
, Знач Calendar = Истина
|
||||
, Знач Drive = Истина
|
||||
, Знач Sheets = Истина) Экспорт
|
||||
// Return value:
|
||||
// String - Code retrieval link
|
||||
Function FormCodeRetrievalLink(Val ClientID
|
||||
, Val Calendar = True
|
||||
, Val Drive = True
|
||||
, Val Sheets = True) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Calendar);
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Sheets);
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(Drive);
|
||||
OPI_TypeConversion.GetLine(ClientID);
|
||||
OPI_TypeConversion.GetBoolean(Calendar);
|
||||
OPI_TypeConversion.GetBoolean(Sheets);
|
||||
OPI_TypeConversion.GetBoolean(Drive);
|
||||
|
||||
URL = "https://accounts.google.com/o/oauth2/auth";
|
||||
|
||||
ПараметрыURL = Новый Структура;
|
||||
ПараметрыURL.Вставить("response_type", "code");
|
||||
ПараметрыURL.Вставить("client_id" , ClientID);
|
||||
ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
|
||||
ПараметрыURL.Вставить("access_type" , "offline");
|
||||
ПараметрыURL.Вставить("scope" , ПолучитьСписокРазрешений(Calendar, Drive, Sheets));
|
||||
URLParameters = New Structure;
|
||||
URLParameters.Insert("response_type", "code");
|
||||
URLParameters.Insert("client_id" , ClientID);
|
||||
URLParameters.Insert("redirect_uri" , "http://localhost");
|
||||
URLParameters.Insert("access_type" , "offline");
|
||||
URLParameters.Insert("scope" , GetPermissionsList(Calendar, Drive, Sheets));
|
||||
|
||||
URL = URL + OPI_Инструменты.ПараметрыЗапросаВСтроку(ПараметрыURL);
|
||||
URL = URL + OPI_Tools.RequestParametersToString(URLParameters);
|
||||
|
||||
Возврат URL;
|
||||
Return URL;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Получить токен по коду
|
||||
// Получает токен по коду из авторизации в бразуере
|
||||
// Get token by code
|
||||
// Gets token by code from browser authorization
|
||||
//
|
||||
// Параметры:
|
||||
// ClientID - Строка - Client ID - id
|
||||
// ClientSecret - Строка - Client secret - secret
|
||||
// Code - Строка - Code из браузера - code
|
||||
// Parameters:
|
||||
// ClientID - String - Client ID - id
|
||||
// ClientSecret - String - Client secret - secret
|
||||
// Code - String - Code from browser - code
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция ПолучитьТокенПоКоду(Знач ClientID, Знач ClientSecret, Знач Code) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function GetTokenByCode(Val ClientID, Val ClientSecret, Val Code) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Code);
|
||||
OPI_TypeConversion.GetLine(ClientID);
|
||||
OPI_TypeConversion.GetLine(ClientSecret);
|
||||
OPI_TypeConversion.GetLine(Code);
|
||||
|
||||
URL = "https://accounts.google.com/o/oauth2/token";
|
||||
|
||||
ПараметрыURL = Новый Структура;
|
||||
ПараметрыURL.Вставить("grant_type" , "authorization_code");
|
||||
ПараметрыURL.Вставить("client_id" , ClientID);
|
||||
ПараметрыURL.Вставить("client_secret", ClientSecret);
|
||||
ПараметрыURL.Вставить("redirect_uri" , "http://localhost");
|
||||
ПараметрыURL.Вставить("code" , Code);
|
||||
URLParameters = New Structure;
|
||||
URLParameters.Insert("grant_type" , "authorization_code");
|
||||
URLParameters.Insert("client_id" , ClientID);
|
||||
URLParameters.Insert("client_secret", ClientSecret);
|
||||
URLParameters.Insert("redirect_uri" , "http://localhost");
|
||||
URLParameters.Insert("code" , Code);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
|
||||
Response = OPI_Tools.Post(URL, URLParameters, , False);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Обновить токен
|
||||
// Обновляет токен по Refresh token
|
||||
// Refresh token
|
||||
// Updates token by Refresh token
|
||||
//
|
||||
// Параметры:
|
||||
// ClientID - Строка - Client ID - id
|
||||
// ClientSecret - Строка - Client secret - secret
|
||||
// RefreshToken - Строка - Refresh token - refresh
|
||||
// Parameters:
|
||||
// ClientID - String - Client ID - id
|
||||
// ClientSecret - String - Client secret - secret
|
||||
// RefreshToken - String - Refresh token - refresh
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Google
|
||||
Функция ОбновитьТокен(Знач ClientID, Знач ClientSecret, Знач RefreshToken) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Google
|
||||
Function RefreshToken(Val ClientID, Val ClientSecret, Val RefreshToken) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientID);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
|
||||
OPI_TypeConversion.GetLine(ClientID);
|
||||
OPI_TypeConversion.GetLine(ClientSecret);
|
||||
OPI_TypeConversion.GetLine(RefreshToken);
|
||||
|
||||
URL = "https://accounts.google.com/o/oauth2/token";
|
||||
|
||||
ПараметрыURL = Новый Структура;
|
||||
ПараметрыURL.Вставить("grant_type" , "refresh_token");
|
||||
ПараметрыURL.Вставить("client_id" , ClientID);
|
||||
ПараметрыURL.Вставить("client_secret", ClientSecret);
|
||||
ПараметрыURL.Вставить("refresh_token", RefreshToken);
|
||||
URLParameters = New Structure;
|
||||
URLParameters.Insert("grant_type" , "refresh_token");
|
||||
URLParameters.Insert("client_id" , ClientID);
|
||||
URLParameters.Insert("client_secret", ClientSecret);
|
||||
URLParameters.Insert("refresh_token", RefreshToken);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, ПараметрыURL, , Ложь);
|
||||
Response = OPI_Tools.Post(URL, URLParameters, , False);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
#Region ServiceProgramInterface
|
||||
|
||||
Функция ПолучитьЗаголовокАвторизации(Знач Токен) Экспорт
|
||||
Function GetAuthorizationHeader(Val Token) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||
OPI_TypeConversion.GetLine(Token);
|
||||
|
||||
Заголовки = Новый Соответствие;
|
||||
Заголовки.Вставить("Authorization", "Bearer " + Токен);
|
||||
Headers = New Match;
|
||||
Headers.Insert("Authorization", "Bearer " + Token);
|
||||
|
||||
Возврат Заголовки;
|
||||
Return Headers;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
||||
#Область СлужебныеПроцедурыИфункции
|
||||
#Region ServiceProceduresAndFunctions
|
||||
|
||||
Функция ПолучитьСписокРазрешений(Calendar, Drive, Sheets)
|
||||
Function GetPermissionsList(Calendar, Drive, Sheets)
|
||||
|
||||
МассивРазрешений = Новый Массив;
|
||||
Permissions array = New Array;
|
||||
|
||||
Если Calendar Тогда
|
||||
МассивРазрешений.Добавить("https://www.googleapis.com/auth/calendar");
|
||||
КонецЕсли;
|
||||
If Calendar Then
|
||||
Permissions array.Add("https://www.googleapis.com/auth/calendar");
|
||||
EndIf;
|
||||
|
||||
Если Drive Тогда
|
||||
МассивРазрешений.Добавить("https://www.googleapis.com/auth/drive");
|
||||
КонецЕсли;
|
||||
If Drive Then
|
||||
Permissions array.Add("https://www.googleapis.com/auth/drive");
|
||||
EndIf;
|
||||
|
||||
Если Sheets Тогда
|
||||
МассивРазрешений.Добавить("https://www.googleapis.com/auth/spreadsheets");
|
||||
КонецЕсли;
|
||||
If Sheets Then
|
||||
Permissions array.Add("https://www.googleapis.com/auth/spreadsheets");
|
||||
EndIf;
|
||||
|
||||
Возврат СтрСоединить(МассивРазрешений, " ");
|
||||
Return StrJoin(Permissions array, " ");
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1229
en/OPI/src/CommonModules/OPI_Tools/Module.bsl
Normal file
1229
en/OPI/src/CommonModules/OPI_Tools/Module.bsl
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
320
en/OPI/src/CommonModules/OPI_TypeConversion/Module.bsl
Normal file
320
en/OPI/src/CommonModules/OPI_TypeConversion/Module.bsl
Normal file
@ -0,0 +1,320 @@
|
||||
// Location OS: ./OInt/tools/Modules/OPI_TypeConversion.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:UnusedLocalVariable-off
|
||||
|
||||
// #Use "./internal"
|
||||
|
||||
#Region ServiceProgramInterface
|
||||
|
||||
Procedure GetBinaryData(Value) Export
|
||||
|
||||
If Value = Undefined Then
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
Attempt
|
||||
|
||||
If TypeValue(Value) = Type("BinaryData") Then
|
||||
Return;
|
||||
Otherwise
|
||||
|
||||
File = New File(Value);
|
||||
|
||||
If File.Exists() Then
|
||||
Value = New BinaryData(Value);
|
||||
|
||||
ElseIf StrFind(Value, "//") Then
|
||||
|
||||
Value = OPI_Tools.Get(Value);
|
||||
|
||||
Otherwise
|
||||
|
||||
Value = Base64Value(Value);
|
||||
|
||||
EndIf;
|
||||
|
||||
EndIf;
|
||||
|
||||
Exception
|
||||
RaiseException "Error getting binary data from parameter: " + ErrorDescription();
|
||||
EndOfAttempt;
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure GetBinaryOrStream(Value) Export
|
||||
|
||||
If Value = Undefined Then
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
If TypeValue(Value) <> Type("String") Then
|
||||
GetBinaryData(Value);
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
File = New File(Value);
|
||||
|
||||
If File.Exists() Then
|
||||
Value = New FileStream(Value, FileOpenMode.Open);
|
||||
Otherwise
|
||||
GetBinaryData(Value);
|
||||
EndIf;
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure GetCollection(Value) Export
|
||||
|
||||
If Value = Undefined Then
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
Attempt
|
||||
|
||||
InitialValue = Value;
|
||||
|
||||
If ThisIsCollection(Value) Then
|
||||
Return;
|
||||
Otherwise
|
||||
|
||||
If TypeValue(Value) = Type("BinaryData") Then
|
||||
Value = GetStringFromBinaryData(Value);
|
||||
Otherwise
|
||||
Value = OPI_Tools.NumberToString(Value);
|
||||
EndIf;
|
||||
|
||||
File = New File(Value);
|
||||
ReadingJSON = New ReadingJSON;
|
||||
|
||||
If File.Exists() Then
|
||||
|
||||
ReadingJSON.OpenFile(Value);
|
||||
|
||||
ElseIf StringStartsWith(nReg(Value), "http") Then
|
||||
|
||||
AndVF = GetTempFileName();
|
||||
CopyFile(Value, AndVF);
|
||||
ReadingJSON.OpenFile(AndVF);
|
||||
ReadingJSON.Read();
|
||||
|
||||
DeleteFiles(AndVF);
|
||||
|
||||
Otherwise
|
||||
|
||||
ReadingJSON.SetString(ShortLP(Value));
|
||||
|
||||
EndIf;
|
||||
|
||||
Value = ReadJSON(ReadingJSON, True, Undefined, JSONDateFormat.ISO);
|
||||
ReadingJSON.Close();
|
||||
|
||||
If (Not ThisIsCollection(Value)) Or Not ValueFilled(Value) Then
|
||||
|
||||
Value = InitialValue;
|
||||
GetArray(Value);
|
||||
|
||||
EndIf;
|
||||
|
||||
EndIf;
|
||||
|
||||
Exception
|
||||
|
||||
Value = InitialValue;
|
||||
GetArray(Value);
|
||||
|
||||
EndOfAttempt;
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure GetArray(Value) Export
|
||||
|
||||
If TypeValue(Value) = Type("Array") Then
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
If TypeValue(Value) = Type("String")
|
||||
And StringStartsWith(Value, "[")
|
||||
And StrEndsWith(Value, "]") Then
|
||||
|
||||
CommaInQuotes = "','";
|
||||
|
||||
Value = StringReplace(Value, "['" , "");
|
||||
Value = StringReplace(Value, "']" , "");
|
||||
Value = StringReplace(Value, "', '" , CommaInQuotes);
|
||||
Value = StringReplace(Value, "' , '", CommaInQuotes);
|
||||
Value = StringReplace(Value, "' ,'" , CommaInQuotes);
|
||||
|
||||
Value = StrSplit(Value, CommaInQuotes, False);
|
||||
|
||||
For N = 0 by Value.WithinBoundary() Loop
|
||||
Value[N] = ShortLP(Value[N]);
|
||||
EndOfLoop;
|
||||
|
||||
Otherwise
|
||||
|
||||
If TypeValue(Value) = Type("Number") Then
|
||||
Value = OPI_Tools.NumberToString(Value);
|
||||
EndIf;
|
||||
|
||||
OPI_Tools.ValueToArray(Value);
|
||||
|
||||
EndIf;
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure GetBoolean(Value) Export
|
||||
|
||||
If Value = Undefined Then
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
Attempt
|
||||
|
||||
If TypeValue(Value) = Type("Boolean") Then
|
||||
Return;
|
||||
Otherwise
|
||||
Value = Boolean(Value);
|
||||
EndIf;
|
||||
|
||||
Exception
|
||||
RaiseException "Error getting boolean data from parameter";
|
||||
EndOfAttempt;
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure GetLine(Value, Val FromSource = False) Export
|
||||
|
||||
If Value = Undefined Then
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
Attempt
|
||||
|
||||
If ThisIsSymbolic(Value) Then
|
||||
|
||||
If Not FromSource Then
|
||||
Value = OPI_Tools.NumberToString(Value);
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
Value = OPI_Tools.NumberToString(Value);
|
||||
File = New File(Value);
|
||||
|
||||
If File.Exists() Then
|
||||
|
||||
ReadingText = New ReadingText(Value);
|
||||
Value = ReadingText.Read();
|
||||
ReadingText.Close();
|
||||
|
||||
ElseIf StringStartsWith(nReg(Value), "http") Then
|
||||
|
||||
AndVF = GetTempFileName();
|
||||
CopyFile(Value, AndVF);
|
||||
|
||||
ReadingText = New ReadingText(AndVF);
|
||||
Value = ReadingText.Read();
|
||||
ReadingText.Close();
|
||||
|
||||
DeleteFiles(AndVF);
|
||||
|
||||
Otherwise
|
||||
|
||||
Return;
|
||||
|
||||
EndIf;
|
||||
|
||||
ElseIf TypeValue(Value) = Type("BinaryData") Then
|
||||
|
||||
Value = GetStringFromBinaryData(Value);
|
||||
|
||||
ElseIf ThisIsCollection(Value) Then
|
||||
|
||||
Value = OPI_Tools.JSONString(Value);
|
||||
|
||||
Otherwise
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
Exception
|
||||
Value = String(Value);
|
||||
Return;
|
||||
EndOfAttempt;
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure GetDate(Value) Export
|
||||
|
||||
If Value = Undefined Then
|
||||
Return;
|
||||
EndIf;
|
||||
|
||||
Date = "Date";
|
||||
|
||||
Attempt
|
||||
|
||||
If TypeValue(Value) = Type(Date) Then
|
||||
Return;
|
||||
Otherwise
|
||||
Value = XMLValue(Type(Date), Value);
|
||||
EndIf;
|
||||
|
||||
Exception
|
||||
OOD = New TypeDescription(Date);
|
||||
Value = OOD.ConvertValue(Value);
|
||||
EndOfAttempt;
|
||||
|
||||
EndProcedure
|
||||
|
||||
Procedure GetNumber(Value) Export
|
||||
|
||||
TypeDescription = New TypeDescription("Number");
|
||||
Value = TypeDescription.ConvertValue(Value);
|
||||
|
||||
EndProcedure
|
||||
|
||||
#EndRegion
|
||||
|
||||
#Region ServiceProceduresAndFunctions
|
||||
|
||||
Function ThisIsCollection(Val Value)
|
||||
|
||||
Return TypeValue(Value) = Type("Array")
|
||||
Or TypeValue(Value) = Type("Structure")
|
||||
Or TypeValue(Value) = Type("Match");
|
||||
|
||||
EndFunction
|
||||
|
||||
Function ThisIsSymbolic(Val Value)
|
||||
|
||||
Return TypeValue(Value) = Type("String")
|
||||
Or TypeValue(Value) = Type("Number")
|
||||
Or TypeValue(Value) = Type("Date");
|
||||
|
||||
EndFunction
|
||||
|
||||
#EndRegion
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
// Расположение OS: ./OInt/core/Modules/OPI_Viber.os
|
||||
// Библиотека: Viber
|
||||
// Команда CLI: viber
|
||||
// Location OS: ./OInt/core/Modules/OPI_Viber.os
|
||||
// Library: Viber
|
||||
// CLI Command: viber
|
||||
|
||||
// MIT License
|
||||
|
||||
@ -29,386 +29,386 @@
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
// #Использовать "../../tools"
|
||||
// Uncomment if OneScript is executed
|
||||
// #Use "../../tools"
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
#Region ProgrammingInterface
|
||||
|
||||
#Область НастройкиИИнформация
|
||||
#Region SettingsAndInformation
|
||||
|
||||
// Установить Webhook
|
||||
// ВАЖНО: Установка Webhook обязательна по правилам Viber. Для этого надо иметь свободный URL,
|
||||
// который будет возвращать 200 и подлинный SSL сертификат. Если есть сертификат и база опубликована
|
||||
// на сервере - можно использовать http-сервис. Туда же будет приходить и информация о новых сообщениях
|
||||
// Viber периодически стучит по адресу Webhook, так что если он будет неактивен, то все перестанет работать
|
||||
// Set Webhook
|
||||
// InАЖNО: Уwithтаноintoа Webhook обязательto по праinилам Viber. For thisго todо иметь withinобоdный URL,
|
||||
// which will return 200 and a genuine SSL certificate. If there is a certificate and the database is published
|
||||
// on the server - you can use an HTTP service. Information about new messages will also be sent there
|
||||
// Viber periodically knocks on the Webhook address, so if it is inactive, everything will stop working
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен Viber - token
|
||||
// URL - Строка - URL для установки Webhook - url
|
||||
// Parameters:
|
||||
// Token - String - Viber Token - token
|
||||
// URL - String - URL for setting up Webhook - url
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||
Функция УстановитьWebhook(Знач Токен, Знач URL) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Viber
|
||||
Function SetWebhook(Val Token, Val URL) Export
|
||||
|
||||
Параметры = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("url" , URL , "Строка", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("auth_token" , Токен, "Строка", Параметры);
|
||||
Parameters = New Structure;
|
||||
OPI_Tools.AddField("url" , URL , "String", Parameters);
|
||||
OPI_Tools.AddField("auth_token" , Token, "String", Parameters);
|
||||
|
||||
Возврат OPI_Инструменты.Post("https://chatapi.viber.com/pa/set_webhook", Параметры);
|
||||
Return OPI_Tools.Post("https://chatapi.viber.com/pa/set_webhook", Parameters);
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Получить информацию о канале
|
||||
// Тут можно получить ID пользователей канала. ID для бота необходимо получать из прилетов на Webhook
|
||||
// ID пользователя из информации о канале не подойдет для отправки сообщений через бота - они разные
|
||||
// Get channel information
|
||||
// Here you can get the channel's user IDs. Bot IDs need to be obtained from the Webhook arrivals
|
||||
// The user ID from channel information is not suitable for sending messages through the bot - they are different
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||
Функция ПолучитьИнформациюОКанале(Знач Токен) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Viber
|
||||
Function GetChannelInformation(Val Token) Export
|
||||
|
||||
URL = "https://chatapi.viber.com/pa/get_account_info";
|
||||
Возврат OPI_Инструменты.Get(URL, , ТокенВЗаголовки(Токен));
|
||||
Return OPI_Tools.Get(URL, , TokenInHeaders(Token));
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Получить данные пользователя
|
||||
// Получает информацию о пользователе по ID
|
||||
// Get user data
|
||||
// Gets user information by ID
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// IDПользователя - Строка, Число - ID пользователя Viber - user
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// UserID - String, Number - Viber User ID - user
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||
Функция ПолучитьДанныеПользователя(Знач Токен, Знач IDПользователя) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Viber
|
||||
Function GetUserData(Val Token, Val UserID) Export
|
||||
|
||||
URL = "https://chatapi.viber.com/pa/get_user_details";
|
||||
|
||||
Параметры = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("id", IDПользователя, "Строка", Параметры);
|
||||
Parameters = New Structure;
|
||||
OPI_Tools.AddField("id", UserID, "String", Parameters);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
|
||||
Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token));
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Получить онлайн пользователей
|
||||
// Получает статус пользователя или нескольких пользователей по ID
|
||||
// Get online users
|
||||
// Gets the status of a user or several users by ID
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен Viber - token
|
||||
// IDПользователей - Строка,Число,Массив из Строка,Число - ID пользователей(я) Viber - users
|
||||
// Parameters:
|
||||
// Token - String - Viber Token - token
|
||||
// UserIDs - String,Number,Array of String,Number - Viber User(s) ID - users
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||
Функция ПолучитьОнлайнПользователей(Знач Токен, Знач IDПользователей) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Viber
|
||||
Function GetOnlineUsers(Val Token, Val UserIDs) Export
|
||||
|
||||
URL = "https://chatapi.viber.com/pa/get_online";
|
||||
|
||||
Параметры = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("ids", IDПользователей, "Коллекция", Параметры);
|
||||
Parameters = New Structure;
|
||||
OPI_Tools.AddField("ids", UserIDs, "Collection", Parameters);
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, Параметры, ТокенВЗаголовки(Токен));
|
||||
Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token));
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
||||
#Область ОтправкаСообщений
|
||||
#Region MessageSending
|
||||
|
||||
// Отправить текстовое сообщение
|
||||
// Отправляет текстовое сообщение в чат или канал
|
||||
// Send text message
|
||||
// Sends a text message to a chat or channel
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Текст - Строка - Текст сообщения - text
|
||||
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
|
||||
// Клавиатура - Структура из Строка - См. СформироватьКлавиатуруИзМассиваКнопок - keyboard
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// Text - String - Message text - text
|
||||
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
|
||||
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
|
||||
// Keyboard - Structure Of String - See CreateKeyboardFromArrayButton - keyboard
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||
Функция ОтправитьТекстовоеСообщение(Знач Токен
|
||||
, Знач Текст
|
||||
, Знач IDПользователя
|
||||
, Знач ОтправкаВКанал
|
||||
, Знач Клавиатура = "") Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Viber
|
||||
Function SendTextMessage(Val Token
|
||||
, Val Text
|
||||
, Val UserID
|
||||
, Val SendingToChannel
|
||||
, Val Keyboard = "") Export
|
||||
|
||||
Возврат ОтправитьСообщение(Токен, "text", IDПользователя, ОтправкаВКанал, , Текст, Клавиатура);
|
||||
Return SendMessage(Token, "text", UserID, SendingToChannel, , Text, Keyboard);
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Отправить картинку
|
||||
// Отправляет картинку в чат или канал
|
||||
// Send image
|
||||
// Sends an image to a chat or channel
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// URL - Строка - URL картинки - picture
|
||||
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||
// ОтправкаВКанал - булево - Отправка в канал или в чат бота - ischannel
|
||||
// Описание - Строка - Аннотация к картинке - description
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// URL - String - Image URL - picture
|
||||
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
|
||||
// SendingToChannel - boolean - Sending to channel or bot chat - ischannel
|
||||
// Description - String - Image annotation - description
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||
Функция ОтправитьКартинку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал, Знач Описание = "") Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Viber
|
||||
Function SendImage(Val Token, Val URL, Val UserID, Val SendingToChannel, Val Description = "") Export
|
||||
|
||||
Возврат ОтправитьСообщение(Токен, "picture", IDПользователя, ОтправкаВКанал, URL, Описание);
|
||||
Return SendMessage(Token, "picture", UserID, SendingToChannel, URL, Description);
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Отправить файл
|
||||
// Отправляет файл (документ) в чат или канал
|
||||
// SendFile
|
||||
// Sends a file (document) to a chat or channel
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// URL - Строка - URL файла - file
|
||||
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
|
||||
// Расширение - Строка - Расширение файла - ext
|
||||
// Размер - Число - Размер файла. Если не заполнен > определяется автоматически скачиванием файла - size
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// URL - String - File URL - file
|
||||
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
|
||||
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
|
||||
// Extension - String - File extension - ext
|
||||
// Size - Number - File size. If not filled in > determined automatically by downloading the file - size
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||
Функция ОтправитьФайл(Знач Токен
|
||||
, Знач URL
|
||||
, Знач IDПользователя
|
||||
, Знач ОтправкаВКанал
|
||||
, Знач Расширение
|
||||
, Знач Размер = "") Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Viber
|
||||
Function SendFile(Val Token
|
||||
, Val URL
|
||||
, Val UserID
|
||||
, Val SendingToChannel
|
||||
, Val Extension
|
||||
, Val Size = "") Export
|
||||
|
||||
Если Не ЗначениеЗаполнено(Размер) Тогда
|
||||
If Not ValueFilled(Size) Then
|
||||
|
||||
Ответ = OPI_Инструменты.Get(URL);
|
||||
Размер = Ответ.Размер();
|
||||
Response = OPI_Tools.Get(URL);
|
||||
Size = Response.Size();
|
||||
|
||||
КонецЕсли;
|
||||
EndIf;
|
||||
|
||||
Строка_ = "Строка";
|
||||
Расширение = СтрЗаменить(Расширение, ".", "");
|
||||
String_ = "String";
|
||||
Extension = StringReplace(Extension, ".", "");
|
||||
|
||||
Параметры = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("URL" , URL , Строка_, Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("Размер" , Размер , Строка_, Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("Расширение", Расширение, Строка_, Параметры);
|
||||
Parameters = New Structure;
|
||||
OPI_Tools.AddField("URL" , URL , String_, Parameters);
|
||||
OPI_Tools.AddField("Size" , Size , String_, Parameters);
|
||||
OPI_Tools.AddField("Extension", Extension, String_, Parameters);
|
||||
|
||||
Возврат ОтправитьСообщение(Токен, "file", IDПользователя, ОтправкаВКанал, Параметры);
|
||||
Return SendMessage(Token, "file", UserID, SendingToChannel, Parameters);
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Отправить контакт
|
||||
// Отправляет контакт с номером телефона в чат или канал
|
||||
// Send contact
|
||||
// Sends a contact with a phone number to a chat or channel
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// ИмяКонтакта - Строка - Имя контакта - name
|
||||
// НомерТелефона - Строка - Номер телефона - phone
|
||||
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// ContactName - String - Contact name - name
|
||||
// PhoneNumber - String - Phone number - phone
|
||||
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
|
||||
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||
Функция ОтправитьКонтакт(Знач Токен
|
||||
, Знач ИмяКонтакта
|
||||
, Знач НомерТелефона
|
||||
, Знач IDПользователя
|
||||
, Знач ОтправкаВКанал) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Viber
|
||||
Function SendContact(Val Token
|
||||
, Val ContactName
|
||||
, Val PhoneNumber
|
||||
, Val UserID
|
||||
, Val SendingToChannel) Export
|
||||
|
||||
Параметры = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("name" , ИмяКонтакта , "Строка", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("phone_number", НомерТелефона, "Строка", Параметры);
|
||||
Parameters = New Structure;
|
||||
OPI_Tools.AddField("name" , ContactName , "String", Parameters);
|
||||
OPI_Tools.AddField("phone_number", PhoneNumber, "String", Parameters);
|
||||
|
||||
Возврат ОтправитьСообщение(Токен, "contact", IDПользователя, ОтправкаВКанал, Параметры);
|
||||
Return SendMessage(Token, "contact", UserID, SendingToChannel, Parameters);
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Отправить локацию
|
||||
// Отправляет географические координаты в чат или канал
|
||||
// SendLocation
|
||||
// Sends geographic coordinates to a chat or channel
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// Широта - Строка,Число - Географическая широта - lat
|
||||
// Долгота - Строка,Число - Географическая долгота - long
|
||||
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// Latitude - String, Number - Geographic latitude - lat
|
||||
// Longitude - String, Number - Geographic longitude - long
|
||||
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
|
||||
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||
Функция ОтправитьЛокацию(Знач Токен, Знач Широта, Знач Долгота, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Viber
|
||||
Function SendLocation(Val Token, Val Latitude, Val Longitude, Val UserID, Val SendingToChannel) Export
|
||||
|
||||
Параметры = Новый Структура;
|
||||
OPI_Инструменты.ДобавитьПоле("lat", Широта , "Строка", Параметры);
|
||||
OPI_Инструменты.ДобавитьПоле("lon", Долгота, "Строка", Параметры);
|
||||
Parameters = New Structure;
|
||||
OPI_Tools.AddField("lat", Latitude , "String", Parameters);
|
||||
OPI_Tools.AddField("lon", Longitude, "String", Parameters);
|
||||
|
||||
Возврат ОтправитьСообщение(Токен, "location", IDПользователя, ОтправкаВКанал, Параметры);
|
||||
Return SendMessage(Token, "location", UserID, SendingToChannel, Parameters);
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Отправить ссылку
|
||||
// Отправляет URL с предпросмотром в чат или канал
|
||||
// SendLink
|
||||
// Sends a URL with a preview to a chat or channel
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен - token
|
||||
// URL - Строка - Отправляемая ссылка - url
|
||||
// IDПользователя - Строка,Число - ID пользователя. Для канала > администратора, для бота > получателя - user
|
||||
// ОтправкаВКанал - Булево - Отправка в канал или в чат бота - ischannel
|
||||
// Parameters:
|
||||
// Token - String - Token - token
|
||||
// URL - String - SentLink - url
|
||||
// UserID - String, Number - User ID. For channel > administrator, for bot > recipient - user
|
||||
// SendingToChannel - Boolean - Sending to channel or bot chat - ischannel
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Viber
|
||||
Функция ОтправитьСсылку(Знач Токен, Знач URL, Знач IDПользователя, Знач ОтправкаВКанал) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Viber
|
||||
Function SendLink(Val Token, Val URL, Val UserID, Val SendingToChannel) Export
|
||||
|
||||
Возврат ОтправитьСообщение(Токен, "url", IDПользователя, ОтправкаВКанал, URL);
|
||||
Return SendMessage(Token, "url", UserID, SendingToChannel, URL);
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Сформировать клавиатуру из массива кнопок
|
||||
// Возвращает структура клавиатуры для сообщений
|
||||
// Create a keyboard from an array of buttons
|
||||
// Returns a keyboard structure for messages
|
||||
//
|
||||
// Параметры:
|
||||
// МассивКнопок - Массив из Строка - Массив кнопок - buttons
|
||||
// ЦветКнопок - Строка - HEX цвет кнопок с # в начале - color
|
||||
// Parameters:
|
||||
// ButtonArray - Array of Strings - Array of buttons - buttons
|
||||
// ButtonColor - String - HEX color of buttons with # at the beginning - color
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Структура - Сформировать клавиатуру из массива кнопок:
|
||||
// * Buttons - Массив из Структура - Массив сформированных кнопок
|
||||
// * Type - Строка - Тип клавиатуры
|
||||
Функция СформироватьКлавиатуруИзМассиваКнопок(Знач МассивКнопок, Знач ЦветКнопок = "#2db9b9") Экспорт
|
||||
// Return value:
|
||||
// Structure - Create a keyboard from an array of buttons:
|
||||
// * Buttons - Array of Structure - Array of formed buttons
|
||||
// * Type - String - KeyboardType
|
||||
Function CreateKeyboardFromArrayButton(Val ButtonArray, Val ButtonColor = "#2db9b9") Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ЦветКнопок);
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(МассивКнопок);
|
||||
OPI_TypeConversion.GetLine(ButtonColor);
|
||||
OPI_TypeConversion.GetCollection(ButtonArray);
|
||||
|
||||
МассивСтруктурКнопок = Новый Массив;
|
||||
СтруктураКлавиатуры = Новый Структура;
|
||||
ArrayOfButtonStructures = New Array;
|
||||
KeyboardStructure = New Structure;
|
||||
|
||||
Для Каждого ТекстКнопки Из МассивКнопок Цикл
|
||||
For Each ButtonText Of ButtonArray Loop
|
||||
|
||||
СтруктураКнопки = Новый Структура;
|
||||
СтруктураКнопки.Вставить("ActionType", "reply");
|
||||
СтруктураКнопки.Вставить("ActionBody", ТекстКнопки);
|
||||
СтруктураКнопки.Вставить("Text" , ТекстКнопки);
|
||||
СтруктураКнопки.Вставить("BgColor" , ЦветКнопок);
|
||||
СтруктураКнопки.Вставить("Coloumns" , 3);
|
||||
ButtonStructure = New Structure;
|
||||
ButtonStructure.Insert("ActionType", "reply");
|
||||
ButtonStructure.Insert("ActionBody", ButtonText);
|
||||
ButtonStructure.Insert("Text" , ButtonText);
|
||||
ButtonStructure.Insert("BgColor" , ButtonColor);
|
||||
ButtonStructure.Insert("Coloumns" , 3);
|
||||
|
||||
МассивСтруктурКнопок.Добавить(СтруктураКнопки);
|
||||
ArrayOfButtonStructures.Add(ButtonStructure);
|
||||
|
||||
КонецЦикла;
|
||||
EndOfLoop;
|
||||
|
||||
СтруктураКлавиатуры.Вставить("Buttons", МассивСтруктурКнопок);
|
||||
СтруктураКлавиатуры.Вставить("Type" , "keyboard");
|
||||
KeyboardStructure.Insert("Buttons", ArrayOfButtonStructures);
|
||||
KeyboardStructure.Insert("Type" , "keyboard");
|
||||
|
||||
Возврат СтруктураКлавиатуры;
|
||||
Return KeyboardStructure;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
#Region ServiceProceduresAndFunctions
|
||||
|
||||
// Отправить сообщение.
|
||||
// Send message.
|
||||
//
|
||||
// Параметры:
|
||||
// Токен - Строка - Токен
|
||||
// Тип - Строка - Тип отправляемого сообщения
|
||||
// IDПользователя - Строка,Число - ID пользователя Viber
|
||||
// ЭтоКанал - Булево - Отправка в канал или чат с ботом
|
||||
// Значение - Строка, Структура - Значение:
|
||||
// * URL - Строка - При отправке URL
|
||||
// * Размер - Число, Строка - Размер файла в случае отправке
|
||||
// * Расширение - Строка - Расширение файла в случае отправки
|
||||
// Текст - Строка - Текст сообщения
|
||||
// Клавиатура - Структура из Строка - Клавиатура, если нужна, см. СформироватьКлавиатуруИзМассиваКнопок
|
||||
// Parameters:
|
||||
// Token - String - Token
|
||||
// Type - String - TypeOfSentMessage
|
||||
// UserID - String, Number - Viber User ID
|
||||
// IsChannel - Boolean - Sending to channel or bot chat
|
||||
// Value - String, Structure - Value:
|
||||
// * URL - String - When sending URL
|
||||
// * Size - Number, String - File size in case of sending
|
||||
// * Extension - String - File extension in case of sending
|
||||
// Text - String - Message text
|
||||
// Keyboard - Structure Of String - Keyboard, if needed, see CreateKeyboardFromArrayButton
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный, HTTPОтвет - Отправить сообщение
|
||||
Функция ОтправитьСообщение(Знач Токен
|
||||
, Знач Тип
|
||||
, Знач IDПользователя
|
||||
, Знач ЭтоКанал
|
||||
, Знач Значение = ""
|
||||
, Знач Текст = ""
|
||||
, Знач Клавиатура = "")
|
||||
// Return value:
|
||||
// Arbitrary, HTTP Response - Send message
|
||||
Function SendMessage(Val Token
|
||||
, Val Type
|
||||
, Val UserID
|
||||
, Val IsChannel
|
||||
, Val Value = ""
|
||||
, Val Text = ""
|
||||
, Val Keyboard = "")
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Тип);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(IDПользователя);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Текст);
|
||||
OPI_ПреобразованиеТипов.ПолучитьБулево(ЭтоКанал);
|
||||
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Клавиатура);
|
||||
OPI_TypeConversion.GetLine(Token);
|
||||
OPI_TypeConversion.GetLine(Type);
|
||||
OPI_TypeConversion.GetLine(UserID);
|
||||
OPI_TypeConversion.GetLine(Text);
|
||||
OPI_TypeConversion.GetBoolean(IsChannel);
|
||||
OPI_TypeConversion.GetCollection(Keyboard);
|
||||
|
||||
СтруктураПараметров = ВернутьСтандартныеПараметры();
|
||||
СтруктураПараметров.Вставить("type", Тип);
|
||||
ParametersStructure = ReturnStandardParameters();
|
||||
ParametersStructure.Insert("type", Type);
|
||||
|
||||
Если (Тип = "text" Или Тип = "picture") И ЗначениеЗаполнено(Текст) Тогда
|
||||
СтруктураПараметров.Вставить("text", Текст);
|
||||
КонецЕсли;
|
||||
If (Type = "text" Or Type = "picture") And ValueFilled(Text) Then
|
||||
ParametersStructure.Insert("text", Text);
|
||||
EndIf;
|
||||
|
||||
Если ТипЗнч(Клавиатура) = Тип("Структура") Тогда
|
||||
СтруктураПараметров.Вставить("keyboard", Клавиатура);
|
||||
КонецЕсли;
|
||||
If TypeValue(Keyboard) = Type("Structure") Then
|
||||
ParametersStructure.Insert("keyboard", Keyboard);
|
||||
EndIf;
|
||||
|
||||
Если ЗначениеЗаполнено(Значение) Тогда
|
||||
If ValueFilled(Value) Then
|
||||
|
||||
Если Тип = "file" Тогда
|
||||
СтруктураПараметров.Вставить("media" , Значение["URL"]);
|
||||
СтруктураПараметров.Вставить("size" , Значение["Размер"]);
|
||||
СтруктураПараметров.Вставить("file_name", "Файл." + Значение["Расширение"]);
|
||||
ИначеЕсли Тип = "contact" Тогда
|
||||
СтруктураПараметров.Вставить("contact" , Значение);
|
||||
ИначеЕсли Тип = "location" Тогда
|
||||
СтруктураПараметров.Вставить("location" , Значение);
|
||||
Иначе
|
||||
СтруктураПараметров.Вставить("media" , Значение);
|
||||
КонецЕсли;
|
||||
If Type = "file" Then
|
||||
ParametersStructure.Insert("media" , Value["URL"]);
|
||||
ParametersStructure.Insert("size" , Value["Size"]);
|
||||
ParametersStructure.Insert("file_name", "File." + Value["Extension"]);
|
||||
ElseIf Type = "contact" Then
|
||||
ParametersStructure.Insert("contact" , Value);
|
||||
ElseIf Type = "location" Then
|
||||
ParametersStructure.Insert("location" , Value);
|
||||
Otherwise
|
||||
ParametersStructure.Insert("media" , Value);
|
||||
EndIf;
|
||||
|
||||
КонецЕсли;
|
||||
EndIf;
|
||||
|
||||
Если ЭтоКанал Тогда
|
||||
СтруктураПараметров.Вставить("from", IDПользователя);
|
||||
If IsChannel Then
|
||||
ParametersStructure.Insert("from", UserID);
|
||||
URL = "https://chatapi.viber.com/pa/post";
|
||||
Иначе
|
||||
СтруктураПараметров.Вставить("receiver", IDПользователя);
|
||||
Otherwise
|
||||
ParametersStructure.Insert("receiver", UserID);
|
||||
URL = "https://chatapi.viber.com/pa/send_message";
|
||||
КонецЕсли;
|
||||
EndIf;
|
||||
|
||||
Ответ = OPI_Инструменты.Post(URL, СтруктураПараметров, ТокенВЗаголовки(Токен));
|
||||
Response = OPI_Tools.Post(URL, ParametersStructure, TokenInHeaders(Token));
|
||||
|
||||
Попытка
|
||||
Возврат OPI_Инструменты.JsonВСтруктуру(Ответ.ПолучитьТелоКакДвоичныеДанные());
|
||||
Исключение
|
||||
Возврат Ответ;
|
||||
КонецПопытки;
|
||||
Attempt
|
||||
Return OPI_Tools.JsonToStructure(Response.GetBodyAsBinaryData());
|
||||
Exception
|
||||
Return Response;
|
||||
EndOfAttempt;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
Функция ВернутьСтандартныеПараметры()
|
||||
Function ReturnStandardParameters()
|
||||
|
||||
СтруктураОтправителя = Новый Структура;
|
||||
СтруктураОтправителя.Вставить("name" , "Bot");
|
||||
СтруктураОтправителя.Вставить("avatar", "");
|
||||
SenderStructure = New Structure;
|
||||
SenderStructure.Insert("name" , "Bot");
|
||||
SenderStructure.Insert("avatar", "");
|
||||
|
||||
СтруктураПараметров = Новый Структура;
|
||||
СтруктураПараметров.Вставить("sender", СтруктураОтправителя);
|
||||
СтруктураПараметров.Вставить("min_api_version", 1);
|
||||
ParametersStructure = New Structure;
|
||||
ParametersStructure.Insert("sender", SenderStructure);
|
||||
ParametersStructure.Insert("min_api_version", 1);
|
||||
|
||||
Возврат СтруктураПараметров;
|
||||
Return ParametersStructure;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
Функция ТокенВЗаголовки(Знач Токен)
|
||||
Function TokenInHeaders(Val Token)
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(Токен);
|
||||
OPI_TypeConversion.GetLine(Token);
|
||||
|
||||
СтруктураЗаголовков = Новый Соответствие;
|
||||
СтруктураЗаголовков.Вставить("X-Viber-Auth-Token", Токен);
|
||||
Возврат СтруктураЗаголовков;
|
||||
HeadersStructure = New Match;
|
||||
HeadersStructure.Insert("X-Viber-Auth-Token", Token);
|
||||
Return HeadersStructure;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
// Расположение OS: ./OInt/core/Modules/OPI_YandexID.os
|
||||
// Библиотека: Yandex ID
|
||||
// Команда CLI: yandex
|
||||
// Location OS: ./OInt/core/Modules/OPI_YandexID.os
|
||||
// Library: Yandex ID
|
||||
// CLI Command: yandex
|
||||
|
||||
// MIT License
|
||||
|
||||
@ -29,84 +29,84 @@
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
// #Использовать "../../tools"
|
||||
// Uncomment if OneScript is executed
|
||||
// #Use "../../tools"
|
||||
|
||||
#Область ПрограммныйИнтерфейс
|
||||
#Region ProgrammingInterface
|
||||
|
||||
// Получить код подтверждения
|
||||
// Получает код подтверждения и адрес страницы, на которой его необходимо ввести
|
||||
// Get confirmation code
|
||||
// Gets the confirmation code and the address of the page where it needs to be entered
|
||||
//
|
||||
// Параметры:
|
||||
// ClientId - Строка - Client id - id
|
||||
// Parameters:
|
||||
// ClientId - String - Client id - id
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||
Функция ПолучитьКодПодтверждения(Знач ClientId) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Yandex
|
||||
Function GetConfirmationCode(Val ClientId) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
|
||||
OPI_TypeConversion.GetLine(ClientId);
|
||||
|
||||
Параметры = Новый Структура("client_id", ClientId);
|
||||
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/device/code", Параметры, , Ложь);
|
||||
Parameters = New Structure("client_id", ClientId);
|
||||
Response = OPI_Tools.Post("https://oauth.yandex.ru/device/code", Parameters, , False);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Преобразовать код в токен
|
||||
// Преобразовывает код в токен после ввода кода при выполнении ПолучитьКодПодтверждения
|
||||
// Convert code to token
|
||||
// Converts the code to a token after entering the code when executing GetConfirmationCode
|
||||
//
|
||||
// Параметры:
|
||||
// ClientId - Строка - Client id - id
|
||||
// ClientSecret - Строка - Client secret - secret
|
||||
// КодУстройства - Строка - device_code из ПолучитьКодПодтверждения() - device
|
||||
// Parameters:
|
||||
// ClientId - String - Client id - id
|
||||
// ClientSecret - String - Client secret - secret
|
||||
// DeviceCode - String - device_code from GetConfirmationCode() - device
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||
Функция ПреобразоватьКодВТокен(Знач ClientId, Знач ClientSecret, Знач КодУстройства) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Yandex
|
||||
Function ConvertCodeToToken(Val ClientId, Val ClientSecret, Val DeviceCode) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(КодУстройства);
|
||||
OPI_TypeConversion.GetLine(ClientId);
|
||||
OPI_TypeConversion.GetLine(ClientSecret);
|
||||
OPI_TypeConversion.GetLine(DeviceCode);
|
||||
|
||||
Параметры = Новый Структура;
|
||||
Параметры.Вставить("grant_type" , "device_code");
|
||||
Параметры.Вставить("code" , КодУстройства);
|
||||
Параметры.Вставить("client_id" , ClientId);
|
||||
Параметры.Вставить("client_secret" , ClientSecret);
|
||||
Parameters = New Structure;
|
||||
Parameters.Insert("grant_type" , "device_code");
|
||||
Parameters.Insert("code" , DeviceCode);
|
||||
Parameters.Insert("client_id" , ClientId);
|
||||
Parameters.Insert("client_secret" , ClientSecret);
|
||||
|
||||
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
|
||||
Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
// Обновить токен
|
||||
// Обновляет токен по Refresh token
|
||||
// Refresh token
|
||||
// Updates token by Refresh token
|
||||
//
|
||||
// Параметры:
|
||||
// ClientId - Строка - Client id - id
|
||||
// ClientSecret - Строка - Client secret - secret
|
||||
// RefreshToken - Строка - Refresh token - refresh
|
||||
// Parameters:
|
||||
// ClientId - String - Client id - id
|
||||
// ClientSecret - String - Client secret - secret
|
||||
// RefreshToken - String - Refresh token - refresh
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Соответствие Из КлючИЗначение - сериализованный JSON ответа от Yandex
|
||||
Функция ОбновитьТокен(Знач ClientId, Знач ClientSecret, Знач RefreshToken) Экспорт
|
||||
// Return value:
|
||||
// Key-Value Pair - serialized JSON response from Yandex
|
||||
Function RefreshToken(Val ClientId, Val ClientSecret, Val RefreshToken) Export
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientId);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ClientSecret);
|
||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(RefreshToken);
|
||||
OPI_TypeConversion.GetLine(ClientId);
|
||||
OPI_TypeConversion.GetLine(ClientSecret);
|
||||
OPI_TypeConversion.GetLine(RefreshToken);
|
||||
|
||||
Параметры = Новый Структура;
|
||||
Параметры.Вставить("grant_type" , "refresh_token");
|
||||
Параметры.Вставить("refresh_token" , RefreshToken);
|
||||
Параметры.Вставить("client_id" , ClientId);
|
||||
Параметры.Вставить("client_secret" , ClientSecret);
|
||||
Parameters = New Structure;
|
||||
Parameters.Insert("grant_type" , "refresh_token");
|
||||
Parameters.Insert("refresh_token" , RefreshToken);
|
||||
Parameters.Insert("client_id" , ClientId);
|
||||
Parameters.Insert("client_secret" , ClientSecret);
|
||||
|
||||
Ответ = OPI_Инструменты.Post("https://oauth.yandex.ru/token", Параметры, , Ложь);
|
||||
Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False);
|
||||
|
||||
Возврат Ответ;
|
||||
Return Response;
|
||||
|
||||
КонецФункции
|
||||
EndFunction
|
||||
|
||||
#КонецОбласти
|
||||
#EndRegion
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,110 +0,0 @@
|
||||
// Расположение OS: ./OInt/tools/Modules/internal/Modules/OPI_Криптография.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:UnusedLocalVariable-off
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
#Область БСП
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright (c) 2019, ООО 1С-Софт
|
||||
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
|
||||
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
|
||||
// Текст лицензии доступен по ссылке:
|
||||
// https://creativecommons.org/licenses/by/4.0/legalcode
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Функция HMACSHA256(Знач Ключ, Знач Данные) Экспорт
|
||||
|
||||
Возврат HMAC(Ключ, Данные, ХешФункция.SHA256, 64);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция Хеш(ДвоичныеДанные, Тип) Экспорт
|
||||
|
||||
Хеширование = Новый ХешированиеДанных(Тип);
|
||||
Хеширование.Добавить(ДвоичныеДанные);
|
||||
|
||||
Возврат Хеширование.ХешСумма;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция HMAC(Знач Ключ, Знач Данные, Тип, РазмерБлока) Экспорт
|
||||
|
||||
Дважды = 2;
|
||||
|
||||
Если Ключ.Размер() > РазмерБлока Тогда
|
||||
Ключ = Хеш(Ключ, Тип);
|
||||
КонецЕсли;
|
||||
|
||||
Если Ключ.Размер() <= РазмерБлока Тогда
|
||||
Ключ = ПолучитьHexСтрокуИзДвоичныхДанных(Ключ);
|
||||
Ключ = Лев(Ключ + ПовторитьСтроку("00", РазмерБлока), РазмерБлока * Дважды);
|
||||
КонецЕсли;
|
||||
|
||||
Ключ = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ПолучитьДвоичныеДанныеИзHexСтроки(Ключ));
|
||||
|
||||
Ipad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("36", РазмерБлока));
|
||||
Opad = ПолучитьБуферДвоичныхДанныхИзHexСтроки(ПовторитьСтроку("5c", РазмерБлока));
|
||||
|
||||
Ipad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
|
||||
Ikeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(ipad);
|
||||
|
||||
Opad.ЗаписатьПобитовоеИсключительноеИли(0, Ключ);
|
||||
Okeypad = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(opad);
|
||||
|
||||
Возврат Хеш(СклеитьДвоичныеДанные(okeypad, Хеш(СклеитьДвоичныеДанные(ikeypad, Данные), Тип)), Тип);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СклеитьДвоичныеДанные(ДвоичныеДанные1, ДвоичныеДанные2) Экспорт
|
||||
|
||||
МассивДвоичныхДанных = Новый Массив;
|
||||
МассивДвоичныхДанных.Добавить(ДвоичныеДанные1);
|
||||
МассивДвоичныхДанных.Добавить(ДвоичныеДанные2);
|
||||
|
||||
Возврат СоединитьДвоичныеДанные(МассивДвоичныхДанных);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПовторитьСтроку(Строка, Количество) Экспорт
|
||||
|
||||
Части = Новый Массив(Количество);
|
||||
|
||||
Для К = 1 По Количество Цикл
|
||||
Части.Добавить(Строка);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат СтрСоединить(Части, "");
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
@ -1,470 +0,0 @@
|
||||
// Расположение OS: ./OInt/tools/Modules/OPI_ПолучениеДанныхТестов.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:UsingHardcodePath-off
|
||||
// BSLLS:Typo-off
|
||||
// BSLLS:DeprecatedMessage-off
|
||||
// BSLLS:UsingServiceTag-off
|
||||
// BSLLS:ExecuteExternalCodeInCommonModule-off
|
||||
// BSLLS:DuplicateStringLiteral-off
|
||||
|
||||
//@skip-check use-non-recommended-method
|
||||
|
||||
// Раскомментировать, если выполняется OneScript
|
||||
// #Использовать "./internal"
|
||||
// #Использовать asserts
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция ПолучитьСоответствиеРазделовТестирования() Экспорт
|
||||
|
||||
СтандартныеЗависимости = "[Decode, Build]";
|
||||
ЗависимостиГугл = "Testing-GoogleWorkspace";
|
||||
|
||||
Разделы = Новый Структура;
|
||||
Разделы.Вставить("Telegram" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("VK" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("Viber" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("Twitter" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("YandexDisk" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("GoogleWorkspace", СтандартныеЗависимости);
|
||||
Разделы.Вставить("GoogleCalendar" , ЗависимостиГугл);
|
||||
Разделы.Вставить("GoogleDrive" , ЗависимостиГугл);
|
||||
Разделы.Вставить("GoogleSheets" , ЗависимостиГугл);
|
||||
Разделы.Вставить("Notion" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("Slack" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("Airtable" , СтандартныеЗависимости);
|
||||
Разделы.Вставить("Dropbox" , СтандартныеЗависимости);
|
||||
|
||||
Возврат Разделы;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьТаблицуТестов() Экспорт
|
||||
|
||||
Телеграм = "Telegram";
|
||||
ВКонтакте = "VK";
|
||||
ЯДиск = "YandexDisk";
|
||||
Календарь = "GoogleCalendar";
|
||||
Твиттер = "Twitter";
|
||||
Вайбер = "Viber";
|
||||
Драйв = "GoogleDrive";
|
||||
ВСпейс = "GoogleWorkspace";
|
||||
Ноушн = "Notion";
|
||||
Слак = "Slack";
|
||||
Таблицы = "GoogleSheets";
|
||||
АирТ = "Airtable";
|
||||
ДропБокс = "Dropbox";
|
||||
|
||||
ТаблицаТестов = Новый ТаблицаЗначений;
|
||||
ТаблицаТестов.Колонки.Добавить("Метод");
|
||||
ТаблицаТестов.Колонки.Добавить("Синоним");
|
||||
ТаблицаТестов.Колонки.Добавить("Раздел");
|
||||
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьИнформациюБота" , "Получить информацию бота" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьОбновления" , "Получить обновления" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_УстановитьWebhook" , "Установить Webhook" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКартинку" , "Отправить картинку" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьВидео" , "Отправить видео" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьАудио" , "Отправить аудио" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьДокумент" , "Отправить документ" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьГифку" , "Отправить гифку" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМедиагруппу" , "Отправить медиагруппу" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьМестоположение" , "Отправить местоположение" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьКонтакт" , "Отправить контакт" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ОтправитьОпрос" , "Отправить опрос" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ПереслатьСообщение" , "Переслать сообщение" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_БанРазбан" , "Бан/Разбан" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьСсылкуПриглашение" , "Создать ссылку-приглашение" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ЗакрепитьОткрепитьСообщение" , "Закрепить/Открепить сообщение" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьЧислоУчастников" , "Получить число участников" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ПолучитьСписокАватаровФорума", "Получить список аватаров форума", Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_СоздатьУдалитьТемуФорума" , "Создать/Удалить тему форума" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_ИзменитьИмяГлавнойТемы" , "Изменить имя главной темы" , Телеграм);
|
||||
НовыйТест(ТаблицаТестов, "Телеграм_СкрытьПоказатьГлавнуюТему" , "Скрыть/Показать главную тему" , Телеграм);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "ВК_СоздатьСсылкуТокена" , "Создать ссылку получения токена", ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_СоздатьУдалитьПост" , "Создать/Удалить пост" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_СоздатьСоставнойПост" , "Создать/Удалить составной пост" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_СоздатьОпрос" , "Создать опрос" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_СохранитьУдалитьКартинку" , "Добавить/Удалить картинку" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_СоздатьИсторию" , "Создать историю" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_МетодыОбсуждений" , "Действия с обсуждениями" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_ЛайкРепостКоммент" , "Лайк/Репост/Комментарий" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистику" , "Получить статистику" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСтатистикуПостов" , "Получить статистику постов" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_СоздатьРекламнуюКампанию" , "Создать рекламную кампанию" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_ОтправитьСообщение" , "Отправить сообщение" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_ПолучитьКатегорииТоваров" , "Получить категории товаров" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварПодборку" , "Создать товар и подборку" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_СоздатьТоварСоСвойствами" , "Создать товар со свойствами" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокТоваров" , "Получить список товаров" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокПодборок" , "Получить список подборок" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокСвойств" , "Получить список свойств" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_ПолучитьСписокЗаказов" , "Получить список заказов" , ВКонтакте);
|
||||
НовыйТест(ТаблицаТестов, "ВК_ЗагрузитьВидео" , "Загрузить видео" , ВКонтакте);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьИнформациюОДиске" , "Получить информацию о диске" , ЯДиск);
|
||||
НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьПапку" , "Создать папку" , ЯДиск);
|
||||
НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьПоАдресуПолучитьОбъект", "Загрузить по URL и получить" , ЯДиск);
|
||||
НовыйТест(ТаблицаТестов, "ЯДиск_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , ЯДиск);
|
||||
НовыйТест(ТаблицаТестов, "ЯДиск_СоздатьКопиюОбъекта" , "Создать копию объекта" , ЯДиск);
|
||||
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСсылкуНаСкачивание" , "Получить ссылку на скачивание" , ЯДиск);
|
||||
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокФайлов" , "Получить список файлов" , ЯДиск);
|
||||
НовыйТест(ТаблицаТестов, "ЯДиск_ПереместитьОбъект" , "Переместить объект" , ЯДиск);
|
||||
НовыйТест(ТаблицаТестов, "ЯДиск_ДействияПубличныхОбъектов" , "Действия с публичными объектами", ЯДиск);
|
||||
НовыйТест(ТаблицаТестов, "ЯДиск_ПолучитьСписокОпубликованных" , "Получить список опубликованных" , ЯДиск);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "ГВ_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , ВСпейс);
|
||||
НовыйТест(ТаблицаТестов, "ГВ_ПолучитьТокен" , "Получить токен" , ВСпейс);
|
||||
НовыйТест(ТаблицаТестов, "ГВ_ОбновитьТокен" , "Обновить токен" , ВСпейс);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокКалендарей" , "Получить список календарей" , Календарь);
|
||||
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьКалендарь" , "Создать/Удалить календарь" , Календарь);
|
||||
НовыйТест(ТаблицаТестов, "ГК_СоздатьУдалитьСобытие" , "Создать/Удалить событие" , Календарь);
|
||||
НовыйТест(ТаблицаТестов, "ГК_ПолучитьСписокСобытий" , "Получить список событий" , Календарь);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "ГД_ПолучитьСписокКаталогов" , "Получить список каталогов" , Драйв);
|
||||
НовыйТест(ТаблицаТестов, "ГД_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить Файл" , Драйв);
|
||||
НовыйТест(ТаблицаТестов, "ГД_СоздатьУдалитьКомментарий" , "Создать/Удалить кооментарий" , Драйв);
|
||||
НовыйТест(ТаблицаТестов, "ГД_СоздатьКаталог" , "Создать/Удалить каталог" , Драйв);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "ГТ_СоздатьТаблицу" , "Создать таблицу" , Таблицы);
|
||||
НовыйТест(ТаблицаТестов, "ГТ_ПолучитьТаблицу" , "Получить таблицу" , Таблицы);
|
||||
НовыйТест(ТаблицаТестов, "ГТ_ЗаполнитьОчиститьЯчейки" , "Заполнить/Очистить ячейки" , Таблицы);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "Твиттер_ПолучитьСсылкуАвторизации" , "Получить ссылку авторизации" , Твиттер);
|
||||
НовыйТест(ТаблицаТестов, "Твиттер_ОбновитьТокен" , "Обновить токен" , Твиттер);
|
||||
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТекстовыйТвит" , "Текстовый твит" , Твиттер);
|
||||
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСКартинкой" , "Твит с картинкой" , Твиттер);
|
||||
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСВидео" , "Твит с видео" , Твиттер);
|
||||
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСГиф" , "Твит с гиф" , Твиттер);
|
||||
НовыйТест(ТаблицаТестов, "Твиттер_СоздатьТвитСОпросом" , "Твит с опросом" , Твиттер);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьИнформациюОКанале" , "Получить информацию канала" , Вайбер);
|
||||
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Вайбер);
|
||||
НовыйТест(ТаблицаТестов, "Вайбер_ПолучитьОнлайнПользователей" , "Получить онлайн пользователей" , Вайбер);
|
||||
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьТекстовоеСообщение" , "Отправить текстовое сообщение" , Вайбер);
|
||||
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКартинку" , "Отправить картинку" , Вайбер);
|
||||
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьФайл" , "Отправить файл" , Вайбер);
|
||||
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьКонтакт" , "Отправить контакт" , Вайбер);
|
||||
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьЛокацию" , "Отправить локацию" , Вайбер);
|
||||
НовыйТест(ТаблицаТестов, "Вайбер_ОтправитьСсылку" , "Отправить ссылку" , Вайбер);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницу" , "Создать страницу" , Ноушн);
|
||||
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьИзменитьБазу" , "Создать/Изменить базу" , Ноушн);
|
||||
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОСтранице" , "Получить информацию о странице" , Ноушн);
|
||||
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьИнформациюОБазе" , "Получить информацию о базе" , Ноушн);
|
||||
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьСтраницуВБазу" , "Создать страницу в базу" , Ноушн);
|
||||
НовыйТест(ТаблицаТестов, "Ноушн_ИзменитьСвойстваСтраницы" , "Изменить свойства страницы" , Ноушн);
|
||||
НовыйТест(ТаблицаТестов, "Ноушн_СоздатьУдалитьБлок" , "Создать/Удалить блок" , Ноушн);
|
||||
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьПользователей" , "Получить пользователей" , Ноушн);
|
||||
НовыйТест(ТаблицаТестов, "Ноушн_ПолучитьДанныеПользователя" , "Получить данные пользователя" , Ноушн);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "Слак_ПолучитьИнформациюОБоте" , "Получить информацию о боте" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокПользователей" , "Получить список пользователей" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокОбластей" , "Получить список областей" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ОтправитьУдалитьСообщение" , "Отправить/Удалить сообщение" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ОтправитьУдалитьЭфемерное" , "Отправить/Удалить эфемерное" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ПолучитьОтложенныеСообщения" , "Получить отложенные сообщения" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_СоздатьАрхивироватьКанал" , "Создать/Архивировать канал" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокКаналов" , "Получить список каналов" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ОткрытьЗакрытьДиалог" , "Открыть/Закрыть диалог" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокФайлов" , "Получить список файлов" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьФайл" , "Загрузить/Удалить файл" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ПолучитьСписокВФ" , "Получить список внеш. файлов" , Слак);
|
||||
НовыйТест(ТаблицаТестов, "Слак_ЗагрузитьУдалитьВФ" , "Загрузить/Удалить внеш. файл" , Слак);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "АТ_СоздатьБазу" , "Создать/Изменить базу" , АирТ);
|
||||
НовыйТест(ТаблицаТестов, "АТ_СоздатьТаблицу" , "Создать/Изменить таблицу" , АирТ);
|
||||
НовыйТест(ТаблицаТестов, "АТ_СоздатьПоле" , "Создать/Изменить поле" , АирТ);
|
||||
НовыйТест(ТаблицаТестов, "АТ_СоздатьУдалитьЗаписи" , "Создать/Удалить записи" , АирТ);
|
||||
|
||||
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьОбновитьТокен" , "Получить/Обновить токен" , ДропБокс);
|
||||
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайл" , "Загрузить файл" , ДропБокс);
|
||||
НовыйТест(ТаблицаТестов, "ДропБокс_ЗагрузитьФайлПоURL" , "Загрузить файл по URL" , ДропБокс);
|
||||
НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьКаталог" , "Создать каталог" , ДропБокс);
|
||||
НовыйТест(ТаблицаТестов, "ДропБокс_СоздатьУдалитьТег" , "Создать/Удалить тег" , ДропБокс);
|
||||
НовыйТест(ТаблицаТестов, "ДропБокс_ПолучитьАккаунт" , "Получить данные аккаунта" , ДропБокс);
|
||||
НовыйТест(ТаблицаТестов, "ДропБокс_РаботаСДоступами" , "Работа с доступами" , ДропБокс);
|
||||
|
||||
Возврат ТаблицаТестов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОжидаетЧто(Значение) Экспорт
|
||||
|
||||
Попытка
|
||||
|
||||
Модуль = ПолучитьОбщийМодуль("ЮТест");
|
||||
Ожидаем = ТипЗнч(Модуль) = Тип("ОбщийМодуль");
|
||||
Возврат Модуль.ОжидаетЧто(Значение);
|
||||
|
||||
Исключение
|
||||
Возврат Ожидаем.Что(Значение);
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьТестыЯкс() Экспорт
|
||||
|
||||
Модуль = ПолучитьОбщийМодуль("ЮТТесты");
|
||||
Разделы = ПолучитьСоответствиеРазделовТестирования();
|
||||
ТаблицаТестов = ПолучитьТаблицуТестов();
|
||||
|
||||
Для Каждого Раздел Из Разделы Цикл
|
||||
|
||||
ТекущийРаздел = Раздел.Ключ;
|
||||
Отбор = Новый Структура("Раздел", ТекущийРаздел);
|
||||
ТестыРаздела = ТаблицаТестов.НайтиСтроки(Отбор);
|
||||
|
||||
Набор = Модуль.ДобавитьТестовыйНабор(ТекущийРаздел);
|
||||
|
||||
Для Каждого Тест Из ТестыРаздела Цикл
|
||||
Набор.ДобавитьСерверныйТест(Тест.Метод, Тест.Синоним);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат "";
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьТестыАссертс() Экспорт
|
||||
|
||||
ТаблицаТестов = ПолучитьТаблицуТестов();
|
||||
МассивТестов = Новый Массив;
|
||||
|
||||
Для Каждого Тест Из ТаблицаТестов Цикл
|
||||
МассивТестов.Добавить(Тест.Метод);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МассивТестов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьПараметр(Параметр) Экспорт
|
||||
|
||||
Путь = ПутьКФайлуДанных();
|
||||
Возврат ПолучитьЗначениеИзФайла(Параметр, Путь);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьДвоичные(Параметр) Экспорт
|
||||
|
||||
Путь = ПутьКФайлуДанных();
|
||||
ПараметрЛокальный = Параметр + "Local";
|
||||
ЗначениеОсновной = ПолучитьЗначениеИзФайла(Параметр , Путь);
|
||||
ЗначениеЛокальный = ПолучитьЗначениеИзФайла(ПараметрЛокальный, Путь);
|
||||
|
||||
ФайлЛокальный = Новый Файл(ЗначениеЛокальный);
|
||||
|
||||
Если ФайлЛокальный.Существует() Тогда
|
||||
Значение = Новый ДвоичныеДанные(ЗначениеЛокальный);
|
||||
Иначе
|
||||
Значение = ЗначениеОсновной;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Строка") Тогда
|
||||
Значение = ПолучитьФайлПути(Значение, ПараметрЛокальный);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьФайлПути(Знач Путь, ПараметрЛокальный, Знач СохранятьЛокально = Истина) Экспорт
|
||||
|
||||
Если СтрНайти(Путь, "http") > 0
|
||||
Или СтрНайти(Путь, "www") > 0 Тогда
|
||||
|
||||
ИВФ = ПолучитьИмяВременногоФайла();
|
||||
КопироватьФайл(Путь, ИВФ);
|
||||
Путь = ИВФ;
|
||||
Двоичные = Новый ДвоичныеДанные(Путь);
|
||||
|
||||
Если СохранятьЛокально Тогда
|
||||
ЗаписатьПараметр(ПараметрЛокальный, ИВФ);
|
||||
Иначе
|
||||
УдалитьФайлы(ИВФ);
|
||||
КонецЕсли;
|
||||
|
||||
Иначе
|
||||
|
||||
Двоичные = Новый ДвоичныеДанные(Путь);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Двоичные;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ПараметрВКоллекцию(Параметр, Коллекция) Экспорт
|
||||
|
||||
Значение = ПолучитьПараметр(Параметр);
|
||||
Коллекция.Вставить(Параметр, Значение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ДвоичныеВКоллекцию(Параметр, Коллекция) Экспорт
|
||||
|
||||
Значение = ПолучитьДвоичные(Параметр);
|
||||
Коллекция.Вставить(Параметр, Значение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьПараметр(Параметр, Значение) Экспорт
|
||||
|
||||
Путь = ПутьКФайлуДанных();
|
||||
ЗаписатьПараметрВФайл(Параметр, Значение, Путь);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьЛог(Знач Результат, Знач Метод, Знач Библиотека = "") Экспорт
|
||||
|
||||
Шапка = Строка(OPI_Инструменты.ПолучитьТекущуюДату()) + " | " + Метод;
|
||||
|
||||
Попытка
|
||||
Данные = OPI_Инструменты.JSONСтрокой(Результат);
|
||||
Исключение
|
||||
Данные = "Не JSON: " + Строка(Результат);
|
||||
КонецПопытки;
|
||||
|
||||
Данные = " " + Данные;
|
||||
|
||||
Сообщить(Шапка);
|
||||
Сообщить(Символы.ПС);
|
||||
Сообщить(Данные);
|
||||
Сообщить(Символы.ПС);
|
||||
Сообщить("---------------------------------");
|
||||
Сообщить(Символы.ПС);
|
||||
|
||||
Если ЗначениеЗаполнено(Библиотека) Тогда
|
||||
ЗаписатьФайлЛога(Данные, Метод, Библиотека);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ПолучитьЗначениеИзФайла(Параметр, Путь)
|
||||
|
||||
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
|
||||
Возврат ?(Значения.Свойство(Параметр), Значения[Параметр], "");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПутьКФайлуДанных()
|
||||
|
||||
Путь = "";
|
||||
ВозможныеПути = Новый Массив;
|
||||
ВозможныеПути.Добавить("./data.json");
|
||||
ВозможныеПути.Добавить("C:\GDrive\Мой диск\data.json");
|
||||
ВозможныеПути.Добавить("D:\GD\Мой диск\data.json");
|
||||
|
||||
Для Каждого ВозможныйПуть Из ВозможныеПути Цикл
|
||||
|
||||
ФайлРепозитория = Новый Файл(ВозможныйПуть);
|
||||
|
||||
Если ФайлРепозитория.Существует() Тогда
|
||||
Путь = ВозможныйПуть;
|
||||
КонецЕсли;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Путь;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПолучитьОбщийМодуль(Знач Имя)
|
||||
УстановитьБезопасныйРежим(Истина);
|
||||
Модуль = Вычислить(Имя);
|
||||
УстановитьБезопасныйРежим(Ложь);
|
||||
Возврат Модуль;
|
||||
КонецФункции
|
||||
|
||||
Процедура НовыйТест(ТаблицаЗначений, Знач Метод, Знач Синоним, Знач Раздел)
|
||||
|
||||
НовыйТест = ТаблицаЗначений.Добавить();
|
||||
НовыйТест.Метод = Метод;
|
||||
НовыйТест.Синоним = Синоним;
|
||||
НовыйТест.Раздел = Раздел;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьПараметрВФайл(Знач Параметр, Знач Значение, Знач Путь)
|
||||
|
||||
Значения = OPI_Инструменты.ПрочитатьJSONФайл(Путь);
|
||||
Значения.Вставить(Параметр, Значение);
|
||||
|
||||
Запись = Новый ЗаписьJSON;
|
||||
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, Символы.Таб);
|
||||
Запись.ОткрытьФайл(Путь, , , ПараметрыЗаписиJSON);
|
||||
ЗаписатьJSON(Запись, Значения);
|
||||
Запись.Закрыть();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ЗаписатьФайлЛога(Знач Данные, Знач Метод, Знач Библиотека)
|
||||
|
||||
Попытка
|
||||
|
||||
ПутьЛогов = "./docs/results";
|
||||
ПутьЛоговБиблиотеки = ПутьЛогов + "/" + Библиотека;
|
||||
|
||||
КаталогЛогов = Новый Файл(ПутьЛогов);
|
||||
|
||||
Если Не КаталогЛогов.Существует() Тогда
|
||||
СоздатьКаталог(ПутьЛогов);
|
||||
КонецЕсли;
|
||||
|
||||
КаталогЛоговБиблиотеки = Новый Файл(ПутьЛоговБиблиотеки);
|
||||
|
||||
Если Не КаталогЛоговБиблиотеки.Существует() Тогда
|
||||
СоздатьКаталог(ПутьЛоговБиблиотеки);
|
||||
КонецЕсли;
|
||||
|
||||
ПутьКФайлу = ПутьЛоговБиблиотеки + "/" + Метод + ".log";
|
||||
ФайлЛога = Новый Файл(ПутьКФайлу);
|
||||
|
||||
Если Не ФайлЛога.Существует() Тогда
|
||||
ДокументЛога = Новый ТекстовыйДокумент;
|
||||
ДокументЛога.УстановитьТекст(Данные);
|
||||
ДокументЛога.Записать(ПутьКФайлу);
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
Сообщить("Не удалось записать файл лога!: " + ОписаниеОшибки());
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
@ -1,320 +0,0 @@
|
||||
// Расположение OS: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
|
||||
|
||||
// MIT License
|
||||
|
||||
// Copyright (c) 2023 Anton Tsitavets
|
||||
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
|
||||
// https://github.com/Bayselonarrend/OpenIntegrations
|
||||
|
||||
// BSLLS:LatinAndCyrillicSymbolInWord-off
|
||||
// BSLLS:IncorrectLineBreak-off
|
||||
// BSLLS:UnusedLocalVariable-off
|
||||
|
||||
// #Использовать "./internal"
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Процедура ПолучитьДвоичныеДанные(Значение) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
Возврат;
|
||||
Иначе
|
||||
|
||||
Файл = Новый Файл(Значение);
|
||||
|
||||
Если Файл.Существует() Тогда
|
||||
Значение = Новый ДвоичныеДанные(Значение);
|
||||
|
||||
ИначеЕсли СтрНайти(Значение, "//") Тогда
|
||||
|
||||
Значение = OPI_Инструменты.Get(Значение);
|
||||
|
||||
Иначе
|
||||
|
||||
Значение = Base64Значение(Значение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
ВызватьИсключение "Ошибка получения двоичных данных из параметра: " + ОписаниеОшибки();
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьДвоичныеИлиПоток(Значение) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
|
||||
ПолучитьДвоичныеДанные(Значение);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Файл = Новый Файл(Значение);
|
||||
|
||||
Если Файл.Существует() Тогда
|
||||
Значение = Новый ФайловыйПоток(Значение, РежимОткрытияФайла.Открыть);
|
||||
Иначе
|
||||
ПолучитьДвоичныеДанные(Значение);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьКоллекцию(Значение) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
ИсходноеЗначение = Значение;
|
||||
|
||||
Если ЭтоКоллекция(Значение) Тогда
|
||||
Возврат;
|
||||
Иначе
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
|
||||
Иначе
|
||||
Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
|
||||
КонецЕсли;
|
||||
|
||||
Файл = Новый Файл(Значение);
|
||||
ЧтениеJSON = Новый ЧтениеJSON;
|
||||
|
||||
Если Файл.Существует() Тогда
|
||||
|
||||
ЧтениеJSON.ОткрытьФайл(Значение);
|
||||
|
||||
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
|
||||
|
||||
ИВФ = ПолучитьИмяВременногоФайла();
|
||||
КопироватьФайл(Значение, ИВФ);
|
||||
ЧтениеJSON.ОткрытьФайл(ИВФ);
|
||||
ЧтениеJSON.Прочитать();
|
||||
|
||||
УдалитьФайлы(ИВФ);
|
||||
|
||||
Иначе
|
||||
|
||||
ЧтениеJSON.УстановитьСтроку(СокрЛП(Значение));
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Значение = ПрочитатьJSON(ЧтениеJSON, Истина, Неопределено, ФорматДатыJSON.ISO);
|
||||
ЧтениеJSON.Закрыть();
|
||||
|
||||
Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда
|
||||
|
||||
Значение = ИсходноеЗначение;
|
||||
ПолучитьМассив(Значение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
|
||||
Значение = ИсходноеЗначение;
|
||||
ПолучитьМассив(Значение);
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьМассив(Значение) Экспорт
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Массив") Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Строка")
|
||||
И СтрНачинаетсяС(Значение, "[")
|
||||
И СтрЗаканчиваетсяНа(Значение, "]") Тогда
|
||||
|
||||
ЗапятаяВКавычках = "','";
|
||||
|
||||
Значение = СтрЗаменить(Значение, "['" , "");
|
||||
Значение = СтрЗаменить(Значение, "']" , "");
|
||||
Значение = СтрЗаменить(Значение, "', '" , ЗапятаяВКавычках);
|
||||
Значение = СтрЗаменить(Значение, "' , '", ЗапятаяВКавычках);
|
||||
Значение = СтрЗаменить(Значение, "' ,'" , ЗапятаяВКавычках);
|
||||
|
||||
Значение = СтрРазделить(Значение, ЗапятаяВКавычках, Ложь);
|
||||
|
||||
Для Н = 0 По Значение.ВГраница() Цикл
|
||||
Значение[Н] = СокрЛП(Значение[Н]);
|
||||
КонецЦикла;
|
||||
|
||||
Иначе
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Число") Тогда
|
||||
Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
|
||||
КонецЕсли;
|
||||
|
||||
OPI_Инструменты.ЗначениеВМассив(Значение);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьБулево(Значение) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Если ТипЗнч(Значение) = Тип("Булево") Тогда
|
||||
Возврат;
|
||||
Иначе
|
||||
Значение = Булево(Значение);
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
ВызватьИсключение "Ошибка получения данных булево из параметра";
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьСтроку(Значение, Знач ИзИсточника = Ложь) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Если ЭтоСимвольное(Значение) Тогда
|
||||
|
||||
Если Не ИзИсточника Тогда
|
||||
Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Значение = OPI_Инструменты.ЧислоВСтроку(Значение);
|
||||
Файл = Новый Файл(Значение);
|
||||
|
||||
Если Файл.Существует() Тогда
|
||||
|
||||
ЧтениеТекста = Новый ЧтениеТекста(Значение);
|
||||
Значение = ЧтениеТекста.Прочитать();
|
||||
ЧтениеТекста.Закрыть();
|
||||
|
||||
ИначеЕсли СтрНачинаетсяС(нРег(Значение), "http") Тогда
|
||||
|
||||
ИВФ = ПолучитьИмяВременногоФайла();
|
||||
КопироватьФайл(Значение, ИВФ);
|
||||
|
||||
ЧтениеТекста = Новый ЧтениеТекста(ИВФ);
|
||||
Значение = ЧтениеТекста.Прочитать();
|
||||
ЧтениеТекста.Закрыть();
|
||||
|
||||
УдалитьФайлы(ИВФ);
|
||||
|
||||
Иначе
|
||||
|
||||
Возврат;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ИначеЕсли ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
|
||||
|
||||
ИначеЕсли ЭтоКоллекция(Значение) Тогда
|
||||
|
||||
Значение = OPI_Инструменты.JSONСтрокой(Значение);
|
||||
|
||||
Иначе
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
Значение = Строка(Значение);
|
||||
Возврат;
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьДату(Значение) Экспорт
|
||||
|
||||
Если Значение = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Дата = "Дата";
|
||||
|
||||
Попытка
|
||||
|
||||
Если ТипЗнч(Значение) = Тип(Дата) Тогда
|
||||
Возврат;
|
||||
Иначе
|
||||
Значение = XMLЗначение(Тип(Дата), Значение);
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
ООД = Новый ОписаниеТипов(Дата);
|
||||
Значение = ООД.ПривестиЗначение(Значение);
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПолучитьЧисло(Значение) Экспорт
|
||||
|
||||
ОписаниеТипа = Новый ОписаниеТипов("Число");
|
||||
Значение = ОписаниеТипа.ПривестиЗначение(Значение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ЭтоКоллекция(Знач Значение)
|
||||
|
||||
Возврат ТипЗнч(Значение) = Тип("Массив")
|
||||
Или ТипЗнч(Значение) = Тип("Структура")
|
||||
Или ТипЗнч(Значение) = Тип("Соответствие");
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЭтоСимвольное(Знач Значение)
|
||||
|
||||
Возврат ТипЗнч(Значение) = Тип("Строка")
|
||||
Или ТипЗнч(Значение) = Тип("Число")
|
||||
Или ТипЗнч(Значение) = Тип("Дата");
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user