1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-15 20:13:31 +02:00

Табуляция в локализации

This commit is contained in:
Anton
2024-06-01 00:49:49 +03:00
parent cd23b8744e
commit 659d0bf349
42 changed files with 12544 additions and 12539 deletions

View File

@@ -111,11 +111,16 @@
ТекущаяСтрока = СокрЛП(ДокументМодуля.ПолучитьСтроку(Н));
Если Не ЗначениеЗаполнено(ТекущаяСтрока) Тогда
Продолжить;
КонецЕсли;
Пока СтрНайти(ТекущаяСтрока, " ") <> 0 Цикл
ТекущаяСтрока = СтрЗаменить(ТекущаяСтрока, " ", " ");
КонецЦикла;
ДокументМодуля.ЗаменитьСтроку(Н, ТекущаяСтрока);
ВыводимаяСтрока = СтрЗаменить(ДокументМодуля.ПолучитьСтроку(Н), СокрЛП(ДокументМодуля.ПолучитьСтроку(Н)), ТекущаяСтрока);
ДокументМодуля.ЗаменитьСтроку(Н, ВыводимаяСтрока);
КонецЦикла;

View File

@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>OPI</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ExtensionNature</nature>
</natures>
<name>OPI</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
<nature>com._1c.g5.v8.dt.core.V8ExtensionNature</nature>
</natures>
</projectDescription>

View File

@@ -46,17 +46,17 @@
// Key-Value Pair - serialized JSON response from Airtable
Function GetListOfBases(Val Token, Val Indent = "") Export
OPI_TypeConversion.GetLine(Indent);
OPI_TypeConversion.GetLine(Indent);
URL = "https://api.airtable.com/v0/meta/bases";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
URL = "https://api.airtable.com/v0/meta/bases";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("offset", Indent, "String", Parameters);
OPI_Tools.AddField("offset", Indent, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -71,14 +71,14 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function GetDatabaseTables(Val Token, Val Base) Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Base);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables";
Headers = GetAuthorizationHeader(Token);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables";
Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Get(URL, , Headers);
Response = OPI_Tools.Get(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -95,34 +95,34 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function CreateDatabase(Val Token, Val Workspace, Val Name, Val TableCollection) Export
OPI_TypeConversion.GetCollection(TableCollection);
OPI_TypeConversion.GetCollection(TableCollection);
If Not TypeValue(TableCollection) = Type("Structure")
And Not TypeValue(TableCollection) = Type("Match") Then
If Not TypeValue(TableCollection) = Type("Structure")
And Not TypeValue(TableCollection) = Type("Match") Then
Raise "Error in table collection data";
Raise "Error in table collection data";
EndIf;
EndIf;
URL = "https://api.airtable.com/v0/meta/bases";
Headers = GetAuthorizationHeader(Token);
TableArray = New Array;
URL = "https://api.airtable.com/v0/meta/bases";
Headers = GetAuthorizationHeader(Token);
TableArray = New Array;
For Each Table In TableCollection Do
For Each Table In TableCollection Do
Description = GenerateTableDescription(Table.Key, Table.Value);
TableArray.Add(Description);
Description = GenerateTableDescription(Table.Key, Table.Value);
TableArray.Add(Description);
EndDo;
EndDo;
Parameters = New Structure;
OPI_Tools.AddField("name" , Name , "String", Parameters);
OPI_Tools.AddField("tables" , TableArray , "Array", Parameters);
OPI_Tools.AddField("workspaceId", Workspace, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("name" , Name , "String", Parameters);
OPI_Tools.AddField("tables" , TableArray , "Array", Parameters);
OPI_Tools.AddField("workspaceId", Workspace, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -144,15 +144,15 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function CreateTable(Val Token, Val Base, Val Name, Val FieldArray, Val Description = "") Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Base);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables";
Headers = GetAuthorizationHeader(Token);
Parameters = GenerateTableDescription(Name, FieldArray, Description);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables";
Headers = GetAuthorizationHeader(Token);
Parameters = GenerateTableDescription(Name, FieldArray, Description);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -170,19 +170,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function ModifyTable(Val Token, Val Base, Val Table, Val Name = "", Val Description = "") Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table;
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table;
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("name" , Name, "String", Parameters);
OPI_Tools.AddField("description", Description , "String", Parameters);
OPI_Tools.AddField("name" , Name, "String", Parameters);
OPI_Tools.AddField("description", Description , "String", Parameters);
Response = OPI_Tools.Patch(URL, Parameters, Headers);
Response = OPI_Tools.Patch(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -203,23 +203,23 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function CreateField(Val Token, Val Base, Val Table, Val FieldStructure) Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetCollection(FieldStructure);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetCollection(FieldStructure);
If Not TypeValue(FieldStructure) = Type("Structure")
And Not TypeValue(FieldStructure) = Type("Match") Then
If Not TypeValue(FieldStructure) = Type("Structure")
And Not TypeValue(FieldStructure) = Type("Match") Then
Raise "Error in field description data";
Raise "Error in field description data";
EndIf;
EndIf;
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table + "/fields";
Headers = GetAuthorizationHeader(Token);
URL = "https://api.airtable.com/v0/meta/bases/" + Base + "/tables/" + Table + "/fields";
Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Post(URL, FieldStructure, Headers);
Response = OPI_Tools.Post(URL, FieldStructure, Headers);
Return Response;
Return Response;
EndFunction
@@ -238,26 +238,26 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function ModifyField(Val Token, Val Base, Val Table, Val Field, Val Name = "", Val Description = "") Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Field);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Field);
URL = "https://api.airtable.com/v0/meta/bases/"
+ Base
+ "/tables/"
+ Table
+ "/fields/"
+ Field;
URL = "https://api.airtable.com/v0/meta/bases/"
+ Base
+ "/tables/"
+ Table
+ "/fields/"
+ Field;
Headers = GetAuthorizationHeader(Token);
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure();
OPI_Tools.AddField("name" , Name, "String", Parameters);
OPI_Tools.AddField("description", Description , "String", Parameters);
Parameters = New Structure();
OPI_Tools.AddField("name" , Name, "String", Parameters);
OPI_Tools.AddField("description", Description , "String", Parameters);
Response = OPI_Tools.Patch(URL, Parameters, Headers);
Response = OPI_Tools.Patch(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -270,7 +270,7 @@ EndFunction
// Return value:
// Structure - Field description
Function GetStringField(Val Name) Export
Return PrimitiveFieldDescription(Name, "richText");
Return PrimitiveFieldDescription(Name, "richText");
EndFunction
// Get поле (чиwithлоinое)
@@ -284,10 +284,10 @@ EndFunction
// Structure - Field description
Function GetNumberField(Val Name, Val Precision = 0) Export
OPI_TypeConversion.GetNumber(Precision);
OPI_TypeConversion.GetNumber(Precision);
OptionsStructure = New Structure("precision", Precision);
Return PrimitiveFieldDescription(Name, "number", OptionsStructure);
OptionsStructure = New Structure("precision", Precision);
Return PrimitiveFieldDescription(Name, "number", OptionsStructure);
EndFunction
@@ -300,7 +300,7 @@ EndFunction
// Return value:
// Structure - Field description
Function GetAttachmentField(Val Name) Export
Return PrimitiveFieldDescription(Name, "multipleAttachments");
Return PrimitiveFieldDescription(Name, "multipleAttachments");
EndFunction
// Get поле (флажоto)
@@ -313,8 +313,8 @@ EndFunction
// Structure - Field description
Function GetCheckboxField(Val Name) Export
OptionsStructure = New Structure("icon,color", "check", "yellowBright");
Return PrimitiveFieldDescription(Name, "checkbox", OptionsStructure);
OptionsStructure = New Structure("icon,color", "check", "yellowBright");
Return PrimitiveFieldDescription(Name, "checkbox", OptionsStructure);
EndFunction
@@ -328,10 +328,10 @@ EndFunction
// Structure - Field description
Function GetDateField(Val Name) Export
FormatStructure = New Structure("format,name", "YYYY-MM-DD", "iso");
OptionsStructure = New Structure("dateFormat", FormatStructure);
FormatStructure = New Structure("format,name", "YYYY-MM-DD", "iso");
OptionsStructure = New Structure("dateFormat", FormatStructure);
Return PrimitiveFieldDescription(Name, "date", OptionsStructure);
Return PrimitiveFieldDescription(Name, "date", OptionsStructure);
EndFunction
@@ -344,7 +344,7 @@ EndFunction
// Return value:
// Structure - Field description
Function GetEmailField(Val Name) Export
Return PrimitiveFieldDescription(Name, "email");
Return PrimitiveFieldDescription(Name, "email");
EndFunction
// Get поле (телефон)
@@ -356,7 +356,7 @@ EndFunction
// Return value:
// Structure - Field description
Function GetPhoneField(Val Name) Export
Return PrimitiveFieldDescription(Name, "phoneNumber");
Return PrimitiveFieldDescription(Name, "phoneNumber");
EndFunction
// Get поле (url)
@@ -368,7 +368,7 @@ EndFunction
// Return value:
// Structure - Field description
Function GetLinkField(Val Name) Export
Return PrimitiveFieldDescription(Name, "url");
Return PrimitiveFieldDescription(Name, "url");
EndFunction
#EndRegion
@@ -388,18 +388,18 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function GetListOfRecords(Val Token, Val Base, Val Table, Val Indent = "") Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table;
Headers = GetAuthorizationHeader(Token);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table;
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure();
OPI_Tools.AddField("offset", Indent, "String", Parameters);
Parameters = New Structure();
OPI_Tools.AddField("offset", Indent, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -416,16 +416,16 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function GetRecord(Val Token, Val Base, Val Table, Val Record) Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record;
Headers = GetAuthorizationHeader(Token);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record;
Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Get(URL, , Headers);
Response = OPI_Tools.Get(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -442,19 +442,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function CreatePosts(Val Token, Val Base, Val Table, Val Data) Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetCollection(Data);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetCollection(Data);
Parameters = New Structure();
AddDataDescription(Data, Parameters);
Parameters = New Structure();
AddDataDescription(Data, Parameters);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table;
Headers = GetAuthorizationHeader(Token);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table;
Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -471,25 +471,25 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function DeletePosts(Val Token, Val Base, Val Table, Val Records) Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetArray(Records);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetArray(Records);
RecordString = "";
RecordString = "";
For Each Record In Records Do
RecordString = RecordString
+ ?(ValueIsFilled(RecordString), "&", "?")
+ "records[]="
+ OPI_Tools.NumberToString(Record);
EndDo;
For Each Record In Records Do
RecordString = RecordString
+ ?(ValueIsFilled(RecordString), "&", "?")
+ "records[]="
+ OPI_Tools.NumberToString(Record);
EndDo;
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + RecordString;
Headers = GetAuthorizationHeader(Token);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + RecordString;
Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Delete(URL, , Headers);
Response = OPI_Tools.Delete(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -511,19 +511,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function GetComments(Val Token, Val Base, Val Table, Val Record, Val Indent = "") Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments";
Headers = GetAuthorizationHeader(Token);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure();
OPI_Tools.AddField("offset", Indent, "String", Parameters);
Parameters = New Structure();
OPI_Tools.AddField("offset", Indent, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -541,19 +541,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function CreateComment(Val Token, Val Base, Val Table, Val Record, Val Text) Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments";
Headers = GetAuthorizationHeader(Token);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure();
OPI_Tools.AddField("text", Text, "String", Parameters);
Parameters = New Structure();
OPI_Tools.AddField("text", Text, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -572,20 +572,20 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function EditComment(Val Token, Val Base, Val Table, Val Record, Val Comment, Val Text) Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Comment);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Comment);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment;
Headers = GetAuthorizationHeader(Token);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment;
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure();
OPI_Tools.AddField("text", Text, "String", Parameters);
Parameters = New Structure();
OPI_Tools.AddField("text", Text, "String", Parameters);
Response = OPI_Tools.Patch(URL, Parameters, Headers);
Response = OPI_Tools.Patch(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -603,17 +603,17 @@ EndFunction
// Key-Value Pair - serialized JSON response from Airtable
Function DeleteComment(Val Token, Val Base, Val Table, Val Record, Val Comment) Export
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Comment);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Table);
OPI_TypeConversion.GetLine(Record);
OPI_TypeConversion.GetLine(Comment);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment;
Headers = GetAuthorizationHeader(Token);
URL = "https://api.airtable.com/v0/" + Base + "/" + Table + "/" + Record + "/comments/" + Comment;
Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Delete(URL, , Headers);
Response = OPI_Tools.Delete(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -625,56 +625,56 @@ EndFunction
Function GetAuthorizationHeader(Val Token)
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Token);
Headers = New Match;
Headers.Insert("Authorization", "Bearer " + Token);
Headers = New Match;
Headers.Insert("Authorization", "Bearer " + Token);
Return Headers;
Return Headers;
EndFunction
Function GenerateTableDescription(Val Name, Val FieldArray, Val Description = "")
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetCollection(FieldArray);
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetCollection(FieldArray);
TableDescription = New Structure("name,fields", Name, FieldArray);
TableDescription = New Structure("name,fields", Name, FieldArray);
OPI_Tools.AddField("description", Description, "String", TableDescription);
OPI_Tools.AddField("description", Description, "String", TableDescription);
Return TableDescription;
Return TableDescription;
EndFunction
Function PrimitiveFieldDescription(Val Name, Val Type, Val Options = "")
FieldStructure = New Structure();
OPI_Tools.AddField("name" , Name, "String" , FieldStructure);
OPI_Tools.AddField("type" , Type , "String" , FieldStructure);
OPI_Tools.AddField("options", Options , "Collection", FieldStructure);
FieldStructure = New Structure();
OPI_Tools.AddField("name" , Name, "String" , FieldStructure);
OPI_Tools.AddField("type" , Type , "String" , FieldStructure);
OPI_Tools.AddField("options", Options , "Collection", FieldStructure);
Return FieldStructure;
Return FieldStructure;
EndFunction
Procedure AddDataDescription(Val Data, Parameters)
If TypeValue(Data) = Type("Array") Then
If TypeValue(Data) = Type("Array") Then
SendArray = New Array;
SendArray = New Array;
For Each RecordDescription In Data Do
SendArray.Add(New Structure("fields", RecordDescription));
EndDo;
For Each RecordDescription In Data Do
SendArray.Add(New Structure("fields", RecordDescription));
EndDo;
OPI_Tools.AddField("records", SendArray, "Array", Parameters);
OPI_Tools.AddField("records", SendArray, "Array", Parameters);
Else
Else
OPI_Tools.AddField("fields", Data, "Collection", Parameters);
OPI_Tools.AddField("fields", Data, "Collection", Parameters);
EndIf;
EndIf;
EndProcedure

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="457991ad-c2ad-49b8-a26a-9fc83c8a7d11">
<name>OPI_Airtable</name>
<synonym>
<key></key>
<value>OPI airtable</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_Airtable</name>
<synonym>
<key></key>
<value>OPI airtable</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -42,66 +42,66 @@
Function HMACSHA256(Val Key, Val Data) Export
Return HMAC(Key, Data, HashFunction.SHA256, 64);
Return HMAC(Key, Data, HashFunction.SHA256, 64);
EndFunction
Function Hash(BinaryData, Type) Export
Hashing = New DataHashing(Type);
Hashing.Add(BinaryData);
Hashing = New DataHashing(Type);
Hashing.Add(BinaryData);
Return Hashing.HashSum;
Return Hashing.HashSum;
EndFunction
Function HMAC(Val Key, Val Data, Type, BlockSize) Export
Twice = 2;
Twice = 2;
If Key.Size() > BlockSize Then
Key = Hash(Key, Type);
EndIf;
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;
If Key.Size() <= BlockSize Then
Key = GetHexStringFromBinaryData(Key);
Key = Left(Key + RepeatString("00", BlockSize), BlockSize * Twice);
EndIf;
Key = GetBinaryDataBufferFromBinaryData(GetBinaryDataFromHexString(Key));
Key = GetBinaryDataBufferFromBinaryData(GetBinaryDataFromHexString(Key));
Ipad = GetBinaryDataBufferFromHexString(RepeatString("36", BlockSize));
Opad = GetBinaryDataBufferFromHexString(RepeatString("5c", BlockSize));
Ipad = GetBinaryDataBufferFromHexString(RepeatString("36", BlockSize));
Opad = GetBinaryDataBufferFromHexString(RepeatString("5c", BlockSize));
Ipad.WriteBitwiseExclusiveOr(0, Key);
Ikeypad = GetBinaryDataFromBinaryDataBuffer(ipad);
Ipad.WriteBitwiseExclusiveOr(0, Key);
Ikeypad = GetBinaryDataFromBinaryDataBuffer(ipad);
Opad.WriteBitwiseExclusiveOr(0, Key);
Okeypad = GetBinaryDataFromBinaryDataBuffer(opad);
Opad.WriteBitwiseExclusiveOr(0, Key);
Okeypad = GetBinaryDataFromBinaryDataBuffer(opad);
Return Hash(ConcatenateBinaryData(okeypad, Hash(ConcatenateBinaryData(ikeypad, Data), Type)), Type);
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);
BinaryDataArray = New Array;
BinaryDataArray.Add(BinaryData1);
BinaryDataArray.Add(BinaryData2);
Return JoinBinaryData(BinaryDataArray);
Return JoinBinaryData(BinaryDataArray);
EndFunction
Function RepeatString(String, Quantity) Export
Parts = New Array(Quantity);
Parts = New Array(Quantity);
For To = 1 For Quantity Do
Parts.Add(String);
EndDo;
For To = 1 For Quantity Do
Parts.Add(String);
EndDo;
Return StrJoin(Parts, "");
Return StrJoin(Parts, "");
EndFunction

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="55bb3987-d7ac-4ed7-a6fd-aa4cfeb61c27">
<name>OPI_Cryptography</name>
<synonym>
<key>ru</key>
<value>Toриптография (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_Cryptography</name>
<synonym>
<key>ru</key>
<value>Toриптография (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -45,10 +45,10 @@
// String - URL for browser transition
Function GetAuthorizationLink(Val AppKey) Export
OPI_TypeConversion.GetLine(AppKey);
Return "https://www.dropbox.com/oauth2/authorize?client_id="
+ AppKey
+ "&response_type=code&token_access_type=offline";
OPI_TypeConversion.GetLine(AppKey);
Return "https://www.dropbox.com/oauth2/authorize?client_id="
+ AppKey
+ "&response_type=code&token_access_type=offline";
EndFunction
@@ -64,29 +64,29 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function GetToken(Val AppKey, Val AppSecret, Val Code) Export
URL = "https://api.dropbox.com/oauth2/token";
DataType = "application/x-www-form-urlencoded; charset=utf-8";
URL = "https://api.dropbox.com/oauth2/token";
DataType = "application/x-www-form-urlencoded; charset=utf-8";
Parameters = New Structure;
OPI_Tools.AddField("code" , Code , "String", Parameters);
OPI_Tools.AddField("grant_type", "authorization_code", "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("code" , Code , "String", Parameters);
OPI_Tools.AddField("grant_type", "authorization_code", "String", Parameters);
URLStructure = OPI_Tools.SplitURL(URL);
Server = URLStructure["Server"];
Address = URLStructure["Address"];
URLStructure = OPI_Tools.SplitURL(URL);
Server = URLStructure["Server"];
Address = URLStructure["Address"];
Request = OPI_Tools.CreateRequest(Address, , DataType);
Connection = OPI_Tools.CreateConnection(Server, AppKey, AppSecret);
Request = OPI_Tools.CreateRequest(Address, , DataType);
Connection = OPI_Tools.CreateConnection(Server, AppKey, AppSecret);
ParameterString = OPI_Tools.RequestParametersToString(Parameters);
Data = Right(ParameterString, StrLength(ParameterString) - 1);
ParameterString = OPI_Tools.RequestParametersToString(Parameters);
Data = Right(ParameterString, StrLength(ParameterString) - 1);
Request.SetBodyFromString(Data);
Request.SetBodyFromString(Data);
Response = Connection.CallHTTPMethod("POST", Request);
OPI_Tools.ProcessResponse(Response);
Response = Connection.CallHTTPMethod("POST", Request);
OPI_Tools.ProcessResponse(Response);
Return Response;
Return Response;
EndFunction
@@ -102,18 +102,18 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function RefreshToken(Val AppKey, Val AppSecret, Val RefreshToken) Export
String_ = "String";
URL = "https://api.dropbox.com/oauth2/token";
String_ = "String";
URL = "https://api.dropbox.com/oauth2/token";
Parameters = New Structure;
OPI_Tools.AddField("refresh_token", RefreshToken , String_, Parameters);
OPI_Tools.AddField("grant_type" , "refresh_token" , String_, Parameters);
OPI_Tools.AddField("client_id" , AppKey , String_, Parameters);
OPI_Tools.AddField("client_secret", AppSecret, String_, Parameters);
Parameters = New Structure;
OPI_Tools.AddField("refresh_token", RefreshToken , String_, Parameters);
OPI_Tools.AddField("grant_type" , "refresh_token" , String_, Parameters);
OPI_Tools.AddField("client_id" , AppKey , String_, Parameters);
OPI_Tools.AddField("client_secret", AppSecret, String_, Parameters);
Response = OPI_Tools.Post(URL, Parameters, , False);
Response = OPI_Tools.Post(URL, Parameters, , False);
Return Response;
Return Response;
EndFunction
@@ -128,13 +128,13 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function GetAccountInformation(Val Token, Val Account = "") Export
If ValueIsFilled(Account) Then
Result = GetAccount(Token, Account);
Else
Result = GetOwnAccount(Token);
EndIf;
If ValueIsFilled(Account) Then
Result = GetAccount(Token, Account);
Else
Result = GetOwnAccount(Token);
EndIf;
Return Result;
Return Result;
EndFunction
@@ -148,16 +148,16 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function GetSpaceUsageData(Val Token) Export
URL = "https://api.dropboxapi.com/2/users/get_space_usage";
Headers = GetRequestHeaders(Token);
URL = "https://api.dropboxapi.com/2/users/get_space_usage";
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.PostBinary(URL
, GetBinaryDataFromString("null")
, Headers
,
, "text/plain; charset=dropbox-cors-hack");
Response = OPI_Tools.PostBinary(URL
, GetBinaryDataFromString("null")
, Headers
,
, "text/plain; charset=dropbox-cors-hack");
Return Response;
Return Response;
EndFunction
@@ -177,16 +177,16 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function GetObjectInformation(Val Token, Val Path, Val Detailed = False) Export
URL = "https://api.dropboxapi.com/2/files/get_metadata";
URL = "https://api.dropboxapi.com/2/files/get_metadata";
Parameters = New Structure;
OPI_Tools.AddField("path" , Path , "String", Parameters);
OPI_Tools.AddField("include_media_info", Detailed, "Boolean", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("path" , Path , "String", Parameters);
OPI_Tools.AddField("include_media_info", Detailed, "Boolean", Parameters);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -203,28 +203,28 @@ EndFunction
// HTTPResponse - Get list of folder files
Function GetListOfFolderFiles(Val Token, Val Path = "", Val Detailed = False, Val Cursor = "") Export
If Not ValueIsFilled(Cursor) Then
If Not ValueIsFilled(Cursor) Then
URL = "https://api.dropboxapi.com/2/files/list_folder";
URL = "https://api.dropboxapi.com/2/files/list_folder";
Parameters = New Structure;
OPI_Tools.AddField("path" , Path , "String", Parameters);
OPI_Tools.AddField("include_media_info", Detailed , "Boolean", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("path" , Path , "String", Parameters);
OPI_Tools.AddField("include_media_info", Detailed , "Boolean", Parameters);
Else
Else
URL = "https://api.dropboxapi.com/2/files/list_folder/continue";
URL = "https://api.dropboxapi.com/2/files/list_folder/continue";
Parameters = New Structure;
OPI_Tools.AddField("cursor", Cursor, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("cursor", Cursor, "String", Parameters);
EndIf;
EndIf;
Headers = GetRequestHeaders(Token);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -239,10 +239,10 @@ EndFunction
// BinaryData - document preview
Function GetPreview(Val Token, Val Path) Export
URL = "https://content.dropboxapi.com/2/files/get_preview";
Response = ProcessObject(Token, URL, Path, True);
URL = "https://content.dropboxapi.com/2/files/get_preview";
Response = ProcessObject(Token, URL, Path, True);
Return Response;
Return Response;
EndFunction
@@ -259,21 +259,21 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function UploadFile(Val Token, Val File, Val Path, Val Overwrite = False) Export
OPI_TypeConversion.GetBinaryData(File);
OPI_TypeConversion.GetBoolean(Overwrite);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBinaryData(File);
OPI_TypeConversion.GetBoolean(Overwrite);
OPI_TypeConversion.GetLine(Path);
Mode = ?(Overwrite, "overwrite", "add");
Size = File.Size();
Boundary = 100000000;
Mode = ?(Overwrite, "overwrite", "add");
Size = File.Size();
Boundary = 100000000;
If Size > Border Then
Response = UploadLargeFile(Token, File, Path, Mode);
Else
Response = UploadSmallFile(Token, File, Path, Mode);
EndIf;
If Size > Border Then
Response = UploadLargeFile(Token, File, Path, Mode);
Else
Response = UploadSmallFile(Token, File, Path, Mode);
EndIf;
Return Response;
Return Response;
EndFunction
@@ -289,16 +289,16 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function UploadFileByURL(Val Token, Val FileURL, Val Path) Export
URL = "https://api.dropboxapi.com/2/files/save_url";
URL = "https://api.dropboxapi.com/2/files/save_url";
Parameters = New Structure;
OPI_Tools.AddField("path", Path , "String", Parameters);
OPI_Tools.AddField("url" , FileURL , "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("path", Path , "String", Parameters);
OPI_Tools.AddField("url" , FileURL , "String", Parameters);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -313,15 +313,15 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function GetUploadStatusByURL(Val Token, Val JobID) Export
URL = "https://api.dropboxapi.com/2/files/save_url/check_job_status";
URL = "https://api.dropboxapi.com/2/files/save_url/check_job_status";
Parameters = New Structure;
OPI_Tools.AddField("async_job_id", JobID, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("async_job_id", JobID, "String", Parameters);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -337,17 +337,17 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function DeleteObject(Val Token, Val Path, Val Irretrievably = False) Export
OPI_TypeConversion.GetBoolean(Irretrievably);
OPI_TypeConversion.GetBoolean(Irretrievably);
If Irretrievably Then
URL = "https://api.dropboxapi.com/2/files/permanently_delete";
Else
URL = "https://api.dropboxapi.com/2/files/delete_v2";
EndIf;
If Irretrievably Then
URL = "https://api.dropboxapi.com/2/files/permanently_delete";
Else
URL = "https://api.dropboxapi.com/2/files/delete_v2";
EndIf;
Response = ProcessObject(Token, URL, Path);
Response = ProcessObject(Token, URL, Path);
Return Response;
Return Response;
EndFunction
@@ -363,17 +363,17 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function CopyObject(Val Token, Val From, Val To) Export
URL = "https://api.dropboxapi.com/2/files/copy_v2";
URL = "https://api.dropboxapi.com/2/files/copy_v2";
Parameters = New Structure;
OPI_Tools.AddField("from_path", From, "String", Parameters);
OPI_Tools.AddField("to_path" , To , "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("from_path", From, "String", Parameters);
OPI_Tools.AddField("to_path" , To , "String", Parameters);
Headers = GetRequestHeaders(Token);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -389,17 +389,17 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function MoveObject(Val Token, Val From, Val To) Export
URL = "https://api.dropboxapi.com/2/files/move_v2";
URL = "https://api.dropboxapi.com/2/files/move_v2";
Parameters = New Structure;
OPI_Tools.AddField("from_path", From, "String", Parameters);
OPI_Tools.AddField("to_path" , To , "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("from_path", From, "String", Parameters);
OPI_Tools.AddField("to_path" , To , "String", Parameters);
Headers = GetRequestHeaders(Token);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -414,10 +414,10 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function CreateFolder(Val Token, Val Path) Export
URL = "https://api.dropboxapi.com/2/files/create_folder_v2";
Response = ProcessObject(Token, URL, Path);
URL = "https://api.dropboxapi.com/2/files/create_folder_v2";
Response = ProcessObject(Token, URL, Path);
Return Response;
Return Response;
EndFunction
@@ -432,10 +432,10 @@ EndFunction
// BinaryData - binary data of the file
Function DownloadFile(Val Token, Val Path) Export
URL = "https://content.dropboxapi.com/2/files/download";
Response = ProcessObject(Token, URL, Path, True);
URL = "https://content.dropboxapi.com/2/files/download";
Response = ProcessObject(Token, URL, Path, True);
Return Response;
Return Response;
EndFunction
@@ -450,10 +450,10 @@ EndFunction
// BinaryData - binary data of the zip archive with the contents of the directory
Function DownloadFolder(Val Token, Val Path) Export
URL = "https://content.dropboxapi.com/2/files/download_zip";
Response = ProcessObject(Token, URL, Path, True);
URL = "https://content.dropboxapi.com/2/files/download_zip";
Response = ProcessObject(Token, URL, Path, True);
Return Response;
Return Response;
EndFunction
@@ -469,16 +469,16 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function GetObjectVersionList(Val Token, Val Path, Val Quantity = 10) Export
URL = "https://api.dropboxapi.com/2/files/list_revisions";
URL = "https://api.dropboxapi.com/2/files/list_revisions";
Parameters = New Structure;
OPI_Tools.AddField("path" , Path , "String", Parameters);
OPI_Tools.AddField("limit", Quantity, "Number" , Parameters);
Parameters = New Structure;
OPI_Tools.AddField("path" , Path , "String", Parameters);
OPI_Tools.AddField("limit", Quantity, "Number" , Parameters);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -494,16 +494,16 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function RestoreObjectToVersion(Val Token, Val Path, Val Version) Export
URL = "https://api.dropboxapi.com/2/files/restore";
URL = "https://api.dropboxapi.com/2/files/restore";
Parameters = New Structure;
OPI_Tools.AddField("path", Path , "String", Parameters);
OPI_Tools.AddField("rev" , Version, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("path", Path , "String", Parameters);
OPI_Tools.AddField("rev" , Version, "String", Parameters);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -522,16 +522,16 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function GetTagList(Val Token, Val Paths) Export
URL = "https://api.dropboxapi.com/2/files/tags/get";
URL = "https://api.dropboxapi.com/2/files/tags/get";
Parameters = New Structure;
OPI_Tools.AddField("paths", Paths, "Array", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("paths", Paths, "Array", Parameters);
Headers = GetRequestHeaders(Token);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -547,7 +547,7 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function AddTag(Val Token, Val Path, Val Tag) Export
Return ProcessTag(Token, Path, Tag);
Return ProcessTag(Token, Path, Tag);
EndFunction
@@ -563,7 +563,7 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function DeleteTag(Val Token, Val Path, Val Tag) Export
Return ProcessTag(Token, Path, Tag, True);
Return ProcessTag(Token, Path, Tag, True);
EndFunction
@@ -582,10 +582,10 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function PublishFolder(Val Token, Val Path) Export
URL = "https://api.dropboxapi.com/2/sharing/share_folder";
Response = ProcessObject(Token, URL, Path);
URL = "https://api.dropboxapi.com/2/sharing/share_folder";
Response = ProcessObject(Token, URL, Path);
Return Response;
Return Response;
EndFunction
@@ -600,15 +600,15 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function CancelFolderPublication(Val Token, Val FolderID) Export
URL = "https://api.dropboxapi.com/2/sharing/unshare_folder";
URL = "https://api.dropboxapi.com/2/sharing/unshare_folder";
Parameters = New Structure;
OPI_Tools.AddField("shared_folder_id", FolderID, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("shared_folder_id", FolderID, "String", Parameters);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -625,43 +625,43 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function AddUsersToFile(Val Token, Val FileID, Val EmailAddresses, Val ViewOnly = True) Export
String_ = "String";
String_ = "String";
OPI_TypeConversion.GetArray(EmailAddresses);
OPI_TypeConversion.GetLine(FileID);
OPI_TypeConversion.GetBoolean(ViewOnly);
OPI_TypeConversion.GetArray(EmailAddresses);
OPI_TypeConversion.GetLine(FileID);
OPI_TypeConversion.GetBoolean(ViewOnly);
If Not StringStartsWith(FileID, "id:") Then
FileID = "id:" + FileID;
EndIf;
If Not StringStartsWith(FileID, "id:") Then
FileID = "id:" + FileID;
EndIf;
URL = "https://api.dropboxapi.com/2/sharing/add_file_member";
URL = "https://api.dropboxapi.com/2/sharing/add_file_member";
ArrayOfUsers = New Array;
ArrayOfUsers = New Array;
For Each Address In EmailAddresses Do
For Each Address In EmailAddresses Do
UserData = New Match;
OPI_Tools.AddField(".tag" , "email", String_, UserData);
OPI_Tools.AddField("email", Address , String_, UserData);
UserData = New Match;
OPI_Tools.AddField(".tag" , "email", String_, UserData);
OPI_Tools.AddField("email", Address , String_, UserData);
ArrayOfUsers.Add(UserData);
ArrayOfUsers.Add(UserData);
EndDo;
EndDo;
Parameters = New Structure;
OPI_Tools.AddField("file" , FileID , String_, Parameters);
OPI_Tools.AddField("members", ArrayOfUsers , "Array", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("file" , FileID , String_, Parameters);
OPI_Tools.AddField("members", ArrayOfUsers , "Array", Parameters);
Mode = ?(ViewOnly, "viewer", "editor");
Mode = ?(ViewOnly, "viewer", "editor");
OPI_Tools.AddField("access_level", Mode , String_, Parameters);
OPI_Tools.AddField("access_level", Mode , String_, Parameters);
Headers = GetRequestHeaders(Token);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -678,37 +678,37 @@ EndFunction
// Undefined - empty response
Function AddUsersToFolder(Val Token, Val FolderID, Val EmailAddresses, Val ViewOnly = True) Export
String_ = "String";
String_ = "String";
OPI_TypeConversion.GetArray(EmailAddresses);
OPI_TypeConversion.GetBoolean(ViewOnly);
Mode = ?(ViewOnly, "viewer", "editor");
OPI_TypeConversion.GetArray(EmailAddresses);
OPI_TypeConversion.GetBoolean(ViewOnly);
Mode = ?(ViewOnly, "viewer", "editor");
URL = "https://api.dropboxapi.com/2/sharing/add_folder_member";
URL = "https://api.dropboxapi.com/2/sharing/add_folder_member";
ArrayOfUsers = New Array;
ArrayOfUsers = New Array;
For Each Address In EmailAddresses Do
For Each Address In EmailAddresses Do
UserData = New Match;
OPI_Tools.AddField(".tag" , "email", String_, UserData);
OPI_Tools.AddField("email", Address , String_, UserData);
UserData = New Match;
OPI_Tools.AddField(".tag" , "email", String_, UserData);
OPI_Tools.AddField("email", Address , String_, UserData);
UserStructure = New Structure("member,access_level", UserData, Mode);
UserStructure = New Structure("member,access_level", UserData, Mode);
ArrayOfUsers.Add(UserStructure);
ArrayOfUsers.Add(UserStructure);
EndDo;
EndDo;
Parameters = New Structure;
OPI_Tools.AddField("shared_folder_id", FolderID , String_, Parameters);
OPI_Tools.AddField("members" , ArrayOfUsers , "Array", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("shared_folder_id", FolderID , String_, Parameters);
OPI_Tools.AddField("members" , ArrayOfUsers , "Array", Parameters);
Headers = GetRequestHeaders(Token);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -723,15 +723,15 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function GetAsynchronousChangeStatus(Val Token, Val JobID) Export
URL = "https://api.dropboxapi.com/2/sharing/check_job_status";
URL = "https://api.dropboxapi.com/2/sharing/check_job_status";
Parameters = New Structure;
OPI_Tools.AddField("async_job_id", JobID, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("async_job_id", JobID, "String", Parameters);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -746,21 +746,21 @@ EndFunction
// Key-Value Pair - serialized JSON response from Dropbox
Function CancelFilePublication(Val Token, Val FileID) Export
OPI_TypeConversion.GetLine(FileID);
OPI_TypeConversion.GetLine(FileID);
If Not StringStartsWith(FileID, "id:") Then
FileID = "id:" + FileID;
EndIf;
If Not StringStartsWith(FileID, "id:") Then
FileID = "id:" + FileID;
EndIf;
URL = "https://api.dropboxapi.com/2/sharing/unshare_file";
URL = "https://api.dropboxapi.com/2/sharing/unshare_file";
Parameters = New Structure;
OPI_Tools.AddField("file", FileID, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("file", FileID, "String", Parameters);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -772,189 +772,189 @@ EndFunction
Function ProcessObject(Val Token, Val URL, Val Path, Val InHeaders = False)
Parameters = New Structure;
OPI_Tools.AddField("path", Path, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("path", Path, "String", Parameters);
If InHeaders Then
Headers = GetRequestHeaders(Token, Parameters);
Response = OPI_Tools.PostBinary(URL, GetBinaryDataFromString(""), Headers);
Else
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
EndIf;
If InHeaders Then
Headers = GetRequestHeaders(Token, Parameters);
Response = OPI_Tools.PostBinary(URL, GetBinaryDataFromString(""), Headers);
Else
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
EndIf;
Return Response;
Return Response;
EndFunction
Function ProcessTag(Val Token, Val Path, Val Tag, Val ThisIsDeletion = False)
If ThisIsDeletion Then
URL = "https://api.dropboxapi.com/2/files/tags/remove";
Else
URL = "https://api.dropboxapi.com/2/files/tags/add";
EndIf;
If ThisIsDeletion Then
URL = "https://api.dropboxapi.com/2/files/tags/remove";
Else
URL = "https://api.dropboxapi.com/2/files/tags/add";
EndIf;
Parameters = New Structure;
OPI_Tools.AddField("path" , Path, "String", Parameters);
OPI_Tools.AddField("tag_text" , Tag , "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("path" , Path, "String", Parameters);
OPI_Tools.AddField("tag_text" , Tag , "String", Parameters);
Headers = GetRequestHeaders(Token);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
Function GetRequestHeaders(Val Token, Val Parameters = "")
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Token);
Headers = New Match;
Headers.Insert("Authorization" , "Bearer " + Token);
Headers = New Match;
Headers.Insert("Authorization" , "Bearer " + Token);
If ValueIsFilled(Parameters) Then
If ValueIsFilled(Parameters) Then
JSON = OPI_Tools.JSONString(Parameters, "No");
JSON = StringReplace(JSON, Symbols.VK + Symbols.PS, "");
JSON = OPI_Tools.JSONString(Parameters, "No");
JSON = StringReplace(JSON, Symbols.VK + Symbols.PS, "");
Headers.Insert("Dropbox-API-Arg", JSON);
Headers.Insert("Dropbox-API-Arg", JSON);
EndIf;
EndIf;
Return Headers;
Return Headers;
EndFunction
Function UploadLargeFile(Val Token, Val File, Val Path, Val Mode)
URL = "https://content.dropboxapi.com/2/files/upload_session/append_v2";
URL = "https://content.dropboxapi.com/2/files/upload_session/append_v2";
ChunkSize = 100000000;
CurrentPosition = 0;
BytesRead = 0;
TotalSize = File.Size();
Session = OpenSession(Token);
ChunkSize = 100000000;
CurrentPosition = 0;
BytesRead = 0;
TotalSize = File.Size();
Session = OpenSession(Token);
WHile BytesRead < TotalSize Do
WHile BytesRead < TotalSize Do
Indent = CurrentPosition;
Cursor = New Structure("offset,session_id", Indent, Session);
Indent = CurrentPosition;
Cursor = New Structure("offset,session_id", Indent, Session);
Parameters = New Structure("cursor", Cursor);
Headers = GetRequestHeaders(Token, Parameters);
Parameters = New Structure("cursor", Cursor);
Headers = GetRequestHeaders(Token, Parameters);
ReadingData = New ReadingData(File);
BytesRead = ReadingData.Skip(CurrentPosition);
Result = ReadingData.Read(ChunkSize);
Current data = Result.GetBinaryData();
CurrentSize = Current data.Size();
NextPosition = CurrentPosition + CurrentSize;
ReadingData = New ReadingData(File);
BytesRead = ReadingData.Skip(CurrentPosition);
Result = ReadingData.Read(ChunkSize);
Current data = Result.GetBinaryData();
CurrentSize = Current data.Size();
NextPosition = CurrentPosition + CurrentSize;
If Not ValueIsFilled(Current data) Then
Break;
EndIf;
If Not ValueIsFilled(Current data) Then
Break;
EndIf;
Response = OPI_Tools.PostBinary(URL, Current data, Headers);
Response = OPI_Tools.PostBinary(URL, Current data, Headers);
CurrentPosition = NextPosition;
CurrentPosition = NextPosition;
// !OInt KBytes = 1024;
// !OInt MByte = KBytes * KBytes;
// !OInt Notify(OPI_Tools.ProgressInformation(CurrentPosition, TotalSize, "MB", MByte));
// !OInt KBytes = 1024;
// !OInt MByte = KBytes * KBytes;
// !OInt Notify(OPI_Tools.ProgressInformation(CurrentPosition, TotalSize, "MB", MByte));
// !OInt PerformGarbageCollection();
// !OInt ReleaseObject(Current data);
// !OInt PerformGarbageCollection();
// !OInt ReleaseObject(Current data);
EndDo;
EndDo;
Response = CloseSession(Token, Path, Mode, TotalSize, Session);
Response = CloseSession(Token, Path, Mode, TotalSize, Session);
Return Response;
Return Response;
EndFunction
Function UploadSmallFile(Val Token, Val File, Val Path, Val Mode)
Boolean_ = "Boolean";
String_ = "String";
URL = "https://content.dropboxapi.com/2/files/upload";
Boolean_ = "Boolean";
String_ = "String";
URL = "https://content.dropboxapi.com/2/files/upload";
Parameters = New Structure;
Parameters = New Structure;
OPI_Tools.AddField("autorename" , False , Boolean_, Parameters);
OPI_Tools.AddField("mode" , Mode, String_, Parameters);
OPI_Tools.AddField("mute" , False , Boolean_, Parameters);
OPI_Tools.AddField("path" , Path , String_, Parameters);
OPI_Tools.AddField("strict_conflict", False , Boolean_, Parameters);
OPI_Tools.AddField("autorename" , False , Boolean_, Parameters);
OPI_Tools.AddField("mode" , Mode, String_, Parameters);
OPI_Tools.AddField("mute" , False , Boolean_, Parameters);
OPI_Tools.AddField("path" , Path , String_, Parameters);
OPI_Tools.AddField("strict_conflict", False , Boolean_, Parameters);
Headers = GetRequestHeaders(Token, Parameters);
Headers = GetRequestHeaders(Token, Parameters);
Response = OPI_Tools.PostBinary(URL, File, Headers);
Response = OPI_Tools.PostBinary(URL, File, Headers);
Return Response;
Return Response;
EndFunction
Function OpenSession(Val Token)
SessionId = "session_id";
URL = "https://content.dropboxapi.com/2/files/upload_session/start";
Headers = GetRequestHeaders(Token);
SessionId = "session_id";
URL = "https://content.dropboxapi.com/2/files/upload_session/start";
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.PostBinary(URL, GetBinaryDataFromString(""), Headers);
Response = OPI_Tools.PostBinary(URL, GetBinaryDataFromString(""), Headers);
Return Response[SessionId];
Return Response[SessionId];
EndFunction
Function CloseSession(Val Token, Val Path, Val Mode, Val TotalSize, Val Session)
URL = "https://content.dropboxapi.com/2/files/upload_session/finish";
URL = "https://content.dropboxapi.com/2/files/upload_session/finish";
Commit = New Structure();
OPI_Tools.AddField("mode", Mode, "String", Commit);
OPI_Tools.AddField("path", Path, "String", Commit);
Commit = New Structure();
OPI_Tools.AddField("mode", Mode, "String", Commit);
OPI_Tools.AddField("path", Path, "String", Commit);
Cursor = New Structure("offset,session_id", TotalSize, Session);
Cursor = New Structure("offset,session_id", TotalSize, Session);
Parameters = New Structure("commit,cursor", Commit, Cursor);
Headers = GetRequestHeaders(Token, Parameters);
Parameters = New Structure("commit,cursor", Commit, Cursor);
Headers = GetRequestHeaders(Token, Parameters);
Response = OPI_Tools.PostBinary(URL, GetBinaryDataFromString(""), Headers);
Response = OPI_Tools.PostBinary(URL, GetBinaryDataFromString(""), Headers);
Return Response;
Return Response;
EndFunction
Function GetAccount(Val Token, Val Account)
URL = "https://api.dropboxapi.com/2/users/get_account";
URL = "https://api.dropboxapi.com/2/users/get_account";
Parameters = New Structure;
OPI_Tools.AddField("account_id", Account, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("account_id", Account, "String", Parameters);
Headers = GetRequestHeaders(Token);
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
Function GetOwnAccount(Val Token)
URL = "https://api.dropboxapi.com/2/users/get_current_account";
Headers = GetRequestHeaders(Token);
URL = "https://api.dropboxapi.com/2/users/get_current_account";
Headers = GetRequestHeaders(Token);
Response = OPI_Tools.PostBinary(URL
, GetBinaryDataFromString("null")
, Headers
,
, "text/plain; charset=dropbox-cors-hack");
Response = OPI_Tools.PostBinary(URL
, GetBinaryDataFromString("null")
, Headers
,
, "text/plain; charset=dropbox-cors-hack");
Return Response;
Return Response;
EndFunction

View File

@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="66ce7792-41e5-47e4-bfad-2dcff1c96287">
<name>OPI_Dropbox</name>
<synonym>
<key></key>
<value>OPI dropbox</value>
</synonym>
<synonym>
<key>ru</key>
<value>Drop box</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_Dropbox</name>
<synonym>
<key></key>
<value>OPI dropbox</value>
</synonym>
<synonym>
<key>ru</key>
<value>Drop box</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -43,331 +43,331 @@
Function GetTestingSectionMapping() Export
StandardDependencies = "[Decode, Build]";
GoogleDependencies = "Testing-GoogleWorkspace";
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);
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;
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";
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");
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, "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, "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, "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, "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, "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, "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, "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, "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, "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, "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, "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, "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);
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;
Return TestTable;
EndFunction
Function ExpectsThat(Value) Export
Try
Try
Module = GetCommonModule("UTest");
Awaiting = TypeValue(Module) = Type("CommonModule");
Return Module.ExpectsThat(Value);
Module = GetCommonModule("UTest");
Awaiting = TypeValue(Module) = Type("CommonModule");
Return Module.ExpectsThat(Value);
Except
Return Awaiting.What(Value);
EndTry;
Except
Return Awaiting.What(Value);
EndTry;
EndFunction
Function FormYAXTests() Export
Module = GetCommonModule("UTTests");
Sections = GetTestingSectionMapping();
TestTable = GetTestTable();
Module = GetCommonModule("UTTests");
Sections = GetTestingSectionMapping();
TestTable = GetTestTable();
For Each Section In Sections Do
For Each Section In Sections Do
CurrentSection = Section.Key;
Filter = New Structure("Section", CurrentSection);
SectionTests = TestTable.FindLines(Filter);
CurrentSection = Section.Key;
Filter = New Structure("Section", CurrentSection);
SectionTests = TestTable.FindLines(Filter);
Set = Module.AddTestSet(CurrentSection);
Set = Module.AddTestSet(CurrentSection);
For Each Test In SectionTests Do
Set.AddServerTest(Test.Method, Test.Synonym);
EndDo;
For Each Test In SectionTests Do
Set.AddServerTest(Test.Method, Test.Synonym);
EndDo;
EndDo;
EndDo;
Return "";
Return "";
EndFunction
Function FormAssertsTests() Export
TestTable = GetTestTable();
ArrayOfTests = New Array;
TestTable = GetTestTable();
ArrayOfTests = New Array;
For Each Test In TestTable Do
ArrayOfTests.Add(Test.Method);
EndDo;
For Each Test In TestTable Do
ArrayOfTests.Add(Test.Method);
EndDo;
Return ArrayOfTests;
Return ArrayOfTests;
EndFunction
Function GetParameter(Parameter) Export
Path = DataFilePath();
Return GetValueFromFile(Parameter, Path);
Path = DataFilePath();
Return GetValueFromFile(Parameter, Path);
EndFunction
Function GetBinary(Parameter) Export
Path = DataFilePath();
LocalParameter = Parameter + "Local";
MainValue = GetValueFromFile(Parameter , Path);
LocalValue = GetValueFromFile(LocalParameter, Path);
Path = DataFilePath();
LocalParameter = Parameter + "Local";
MainValue = GetValueFromFile(Parameter , Path);
LocalValue = GetValueFromFile(LocalParameter, Path);
LocalFile = New File(LocalValue);
LocalFile = New File(LocalValue);
If LocalFile.Exists() Then
Value = New BinaryData(LocalValue);
Else
Value = MainValue;
EndIf;
If LocalFile.Exists() Then
Value = New BinaryData(LocalValue);
Else
Value = MainValue;
EndIf;
If TypeValue(Value) = Type("String") Then
Value = GetFilePath(Value, LocalParameter);
EndIf;
If TypeValue(Value) = Type("String") Then
Value = GetFilePath(Value, LocalParameter);
EndIf;
Return Value;
Return Value;
EndFunction
Function GetFilePath(Val Path, LocalParameter, Val SaveLocally = True) Export
If StrFind(Path, "http") > 0
Or StrFind(Path, "www") > 0 Then
If StrFind(Path, "http") > 0
Or StrFind(Path, "www") > 0 Then
AndVF = GetTempFileName();
CopyFile(Path, AndVF);
Path = AndVF;
Binary = New BinaryData(Path);
AndVF = GetTempFileName();
CopyFile(Path, AndVF);
Path = AndVF;
Binary = New BinaryData(Path);
If SaveLocally Then
WriteParameter(LocalParameter, AndVF);
Else
DeleteFiles(AndVF);
EndIf;
If SaveLocally Then
WriteParameter(LocalParameter, AndVF);
Else
DeleteFiles(AndVF);
EndIf;
Else
Else
Binary = New BinaryData(Path);
Binary = New BinaryData(Path);
EndIf;
EndIf;
Return Binary;
Return Binary;
EndFunction
Procedure ParameterToCollection(Parameter, Collection) Export
Value = GetParameter(Parameter);
Collection.Insert(Parameter, Value);
Value = GetParameter(Parameter);
Collection.Insert(Parameter, Value);
EndProcedure
Procedure BinaryToCollection(Parameter, Collection) Export
Value = GetBinary(Parameter);
Collection.Insert(Parameter, Value);
Value = GetBinary(Parameter);
Collection.Insert(Parameter, Value);
EndProcedure
Procedure WriteParameter(Parameter, Value) Export
Path = DataFilePath();
WriteParameterToFile(Parameter, Value, Path);
Path = DataFilePath();
WriteParameterToFile(Parameter, Value, Path);
EndProcedure
Procedure WriteLog(Val Result, Val Method, Val Library = "") Export
Header = String(OPI_Tools.GetCurrentDate()) + " | " + Method;
Header = String(OPI_Tools.GetCurrentDate()) + " | " + Method;
Try
Data = OPI_Tools.JSONString(Result);
Except
Data = "Not JSON: " + String(Result);
EndTry;
Try
Data = OPI_Tools.JSONString(Result);
Except
Data = "Not JSON: " + String(Result);
EndTry;
Data = " " + Data;
Data = " " + Data;
Notify(Header);
Notify(Symbols.PS);
Notify(Data);
Notify(Symbols.PS);
Notify("---------------------------------");
Notify(Symbols.PS);
Notify(Header);
Notify(Symbols.PS);
Notify(Data);
Notify(Symbols.PS);
Notify("---------------------------------");
Notify(Symbols.PS);
If ValueIsFilled(Library) Then
WriteLogFile(Data, Method, Library);
EndIf;
If ValueIsFilled(Library) Then
WriteLogFile(Data, Method, Library);
EndIf;
EndProcedure
@@ -377,93 +377,93 @@ EndProcedure
Function GetValueFromFile(Parameter, Path)
Values = OPI_Tools.ReadJSONFile(Path);
Return ?(Values.Property(Parameter), Values[Parameter], "");
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");
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 In PossiblePaths Do
For Each PossiblePath In PossiblePaths Do
RepositoryFile = New File(PossiblePath);
RepositoryFile = New File(PossiblePath);
If RepositoryFile.Exists() Then
Path = PossiblePath;
EndIf;
If RepositoryFile.Exists() Then
Path = PossiblePath;
EndIf;
EndDo;
EndDo;
Return Path;
Return Path;
EndFunction
Function GetCommonModule(Val Name)
SetSafeMode(True);
Module = Calculate(Name);
SetSafeMode(False);
Return Module;
SetSafeMode(True);
Module = Calculate(Name);
SetSafeMode(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;
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);
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();
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)
Try
Try
LogPath = "./docs/results";
LibraryLogPath = LogPath + "/" + Library;
LogPath = "./docs/results";
LibraryLogPath = LogPath + "/" + Library;
LogDirectory = New File(LogPath);
LogDirectory = New File(LogPath);
If Not LogDirectory.Exists() Then
CreateDirectory(LogPath);
EndIf;
If Not LogDirectory.Exists() Then
CreateDirectory(LogPath);
EndIf;
LibraryLogCatalog = New File(LibraryLogPath);
LibraryLogCatalog = New File(LibraryLogPath);
If Not LibraryLogCatalog.Exists() Then
CreateDirectory(LibraryLogPath);
EndIf;
If Not LibraryLogCatalog.Exists() Then
CreateDirectory(LibraryLogPath);
EndIf;
FilePath = LibraryLogPath + "/" + Method + ".log";
LogFile = New File(FilePath);
FilePath = LibraryLogPath + "/" + Method + ".log";
LogFile = New File(FilePath);
If Not LogFile.Exists() Then
LogDocument = New TextDocument;
LogDocument.SetText(Data);
LogDocument.Write(FilePath);
EndIf;
If Not LogFile.Exists() Then
LogDocument = New TextDocument;
LogDocument.SetText(Data);
LogDocument.Write(FilePath);
EndIf;
Except
Notify("Failed to write log file!: " + ErrorDescription());
EndTry;
Except
Notify("Failed to write log file!: " + ErrorDescription());
EndTry;
EndProcedure

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="546edcad-c9a0-4823-a44c-fefd7200de6c">
<name>OPI_GetTestData</name>
<synonym>
<key></key>
<value>OPI test data retrieval</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_GetTestData</name>
<synonym>
<key></key>
<value>OPI test data retrieval</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -47,19 +47,19 @@
// Key-Value Pair - serialized JSON response from Google
Function CreateCalendar(Val Token, Val Name) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Name);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars";
Parameters = New Structure;
Parameters.Insert("summary" , Name);
Parameters.Insert("timeZone", "Europe/Moscow");
Parameters = New Structure;
Parameters.Insert("summary" , Name);
Parameters.Insert("timeZone", "Europe/Moscow");
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -74,14 +74,14 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function GetCalendarMetadata(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Response = OPI_Tools.Get(URL, , Headers);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Response = OPI_Tools.Get(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -97,31 +97,31 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Google
Function EditCalendarMetadata(Val Token
, Val Calendar
, Val Name = ""
, Val Description = "") Export
, Val Calendar
, Val Name = ""
, Val Description = "") Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Description);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Description);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Parameters = New Structure;
Parameters = New Structure;
If ValueIsFilled(Name) Then
Parameters.Insert("summary", Name);
EndIf;
If ValueIsFilled(Name) Then
Parameters.Insert("summary", Name);
EndIf;
If ValueIsFilled(Description) Then
Parameters.Insert("description", Description);
EndIf;
If ValueIsFilled(Description) Then
Parameters.Insert("description", Description);
EndIf;
Response = OPI_Tools.Patch(URL, Parameters, Headers, True);
Response = OPI_Tools.Patch(URL, Parameters, Headers, True);
Return Response;
Return Response;
EndFunction
@@ -135,13 +135,13 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function ClearMainCalendar(Val Token) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Token);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear";
Response = OPI_Tools.Post(URL, , Headers, False);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/primary/clear";
Response = OPI_Tools.Post(URL, , Headers, False);
Return Response;
Return Response;
EndFunction
@@ -156,14 +156,14 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function DeleteCalendar(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Response = OPI_Tools.Delete(URL, , Headers);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/" + Calendar;
Response = OPI_Tools.Delete(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -181,14 +181,14 @@ EndFunction
// Key-Value Pair - Array of calendar data mappings
Function GetCalendarList(Val Token) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Token);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfCalendars = New Array;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfCalendars = New Array;
GetCalendarsListRecursively(Headers, ArrayOfCalendars);
GetCalendarsListRecursively(Headers, ArrayOfCalendars);
Return ArrayOfCalendars;
Return ArrayOfCalendars;
EndFunction
@@ -203,18 +203,18 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function AddCalendarToList(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList";
Parameters = New Structure;
Parameters.Insert("id", Calendar);
Parameters = New Structure;
Parameters.Insert("id", Calendar);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -229,14 +229,14 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function GetListCalendar(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar;
Response = OPI_Tools.Get(URL, , Headers);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar;
Response = OPI_Tools.Get(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -251,14 +251,14 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function DeleteCalendarFromList(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar;
Response = OPI_Tools.Delete(URL, , Headers);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar;
Response = OPI_Tools.Delete(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -275,28 +275,28 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Google
Function EditListCalendar(Val Token
, Val Calendar
, Val PrimaryColor
, Val SecondaryColor
, Val Hidden = False) Export
, Val Calendar
, Val PrimaryColor
, Val SecondaryColor
, Val Hidden = False) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(PrimaryColor);
OPI_TypeConversion.GetLine(SecondaryColor);
OPI_TypeConversion.GetBoolean(Hidden);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(PrimaryColor);
OPI_TypeConversion.GetLine(SecondaryColor);
OPI_TypeConversion.GetBoolean(Hidden);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar + "?colorRgbFormat=true";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/users/me/calendarList/" + Calendar + "?colorRgbFormat=true";
Parameters = New Match;
Parameters.Insert("hidden" , Hidden);
Parameters.Insert("foregroundColor", PrimaryColor);
Parameters.Insert("backgroundColor", SecondaryColor);
Parameters = New Match;
Parameters.Insert("hidden" , Hidden);
Parameters.Insert("foregroundColor", PrimaryColor);
Parameters.Insert("backgroundColor", SecondaryColor);
Response = OPI_Tools.Put(URL, Parameters, Headers);
Response = OPI_Tools.Put(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -310,19 +310,19 @@ EndFunction
// Key-Value Pair - Empty event template
Function GetEventDescription() Export
CurrentDate = OPI_Tools.GetCurrentDate();
Hour = 3600;
Event = New Match;
CurrentDate = OPI_Tools.GetCurrentDate();
Hour = 3600;
Event = New Match;
Event.Insert("Description" , ""); // Event description
Event.Insert("Title" , "New event"); // Title events
Event.Insert("Venue" , ""); // String description of the venue of the event
Event.Insert("StartDate" , CurrentDate); // Date of start events
Event.Insert("EndDate" , CurrentDate + Hour); // Date of end events
Event.Insert("ArrayOfAttachmentURLs", New Match); // Key - name, Value - URL to file
Event.Insert("SendNotifications" , True); // Indication of sending notifications to participants
Event.Insert("Description" , ""); // Event description
Event.Insert("Title" , "New event"); // Title events
Event.Insert("Venue" , ""); // String description of the venue of the event
Event.Insert("StartDate" , CurrentDate); // Date of start events
Event.Insert("EndDate" , CurrentDate + Hour); // Date of end events
Event.Insert("ArrayOfAttachmentURLs", New Match); // Key - name, Value - URL to file
Event.Insert("SendNotifications" , True); // Indication of sending notifications to participants
Return Event;
Return Event;
EndFunction
@@ -337,15 +337,15 @@ EndFunction
// Key-Value Pair - Array of event mappings
Function GetEventList(Val Token, Val Calendar) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfEvents = New Array;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfEvents = New Array;
GetEventsListRecursively(Headers, Calendar, ArrayOfEvents);
GetEventsListRecursively(Headers, Calendar, ArrayOfEvents);
Return ArrayOfEvents;
Return ArrayOfEvents;
EndFunction
@@ -361,19 +361,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function GetEvent(Val Token, Val Calendar, Val Event) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar
+ "/events/"
+ Event;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar
+ "/events/"
+ Event;
Response = OPI_Tools.Get(URL, , Headers);
Response = OPI_Tools.Get(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -388,7 +388,7 @@ EndFunction
// Return value:
// String, Arbitrary, HTTPResponse, BinaryData, Undefined - Google server response
Function CreateEvent(Val Token, Val Calendar, Val EventDescription) Export
Return EventManagement(Token, Calendar, EventDescription);
Return EventManagement(Token, Calendar, EventDescription);
EndFunction
// Move event
@@ -404,22 +404,22 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function MoveEvent(Val Token, Val SourceCalendar, Val TargetCalendar, Val Event) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(SourceCalendar);
OPI_TypeConversion.GetLine(TargetCalendar);
OPI_TypeConversion.GetLine(Event);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(SourceCalendar);
OPI_TypeConversion.GetLine(TargetCalendar);
OPI_TypeConversion.GetLine(Event);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ SourceCalendar
+ "/events/"
+ Event
+ "/move?destination="
+ TargetCalendar;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ SourceCalendar
+ "/events/"
+ Event
+ "/move?destination="
+ TargetCalendar;
Response = OPI_Tools.Post(URL, , Headers);
Response = OPI_Tools.Post(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -435,7 +435,7 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Google
Function EditEvent(Val Token, Val Calendar, Val EventDescription, Val Event) Export
Return EventManagement(Token, Calendar, EventDescription, Event);
Return EventManagement(Token, Calendar, EventDescription, Event);
EndFunction
// Delete event
@@ -450,19 +450,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function DeleteEvent(Val Token, Val Calendar, Val Event) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar
+ "/events/"
+ Event;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar
+ "/events/"
+ Event;
Response = OPI_Tools.Delete(URL, , Headers);
Response = OPI_Tools.Delete(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -474,157 +474,157 @@ EndFunction
Function ConvertDate(Val Date)
OPI_TypeConversion.GetDate(Date);
OPI_TypeConversion.GetDate(Date);
DateStructure = New Structure;
DateStructure = New Structure;
If Not TypeValue(Date) = Type("Date") Then
Return Undefined;
EndIf;
If Not TypeValue(Date) = Type("Date") Then
Return Undefined;
EndIf;
If Date = StartOfDay(Date) Then
DateFormat = "DF=yyyy-MM-dd";
Field = "date";
Else
DateFormat = "DF=yyyy-MM-ddTHH:mm:ssZ";
Field = "dateTime";
EndIf;
If Date = StartOfDay(Date) Then
DateFormat = "DF=yyyy-MM-dd";
Field = "date";
Else
DateFormat = "DF=yyyy-MM-ddTHH:mm:ssZ";
Field = "dateTime";
EndIf;
Date = Format(Date, DateFormat);
DateStructure.Insert(Field , Date);
DateStructure.Insert("timeZone", "Europe/Moscow");
Date = Format(Date, DateFormat);
DateStructure.Insert(Field , Date);
DateStructure.Insert("timeZone", "Europe/Moscow");
Return DateStructure;
Return DateStructure;
EndFunction
Function ConvertAttachments(Val Attachments)
OPI_TypeConversion.GetCollection(Attachments);
OPI_TypeConversion.GetCollection(Attachments);
AttachmentsArray = New Array;
AttachmentsArray = New Array;
If TypeValue(Attachments) = Type("Match") Or TypeValue(Attachments) = Type("Structure") Then
If TypeValue(Attachments) = Type("Match") Or TypeValue(Attachments) = Type("Structure") Then
For Each Attachment In Attachments Do
For Each Attachment In Attachments Do
CurrentAttachment = New Structure;
CurrentAttachment.Insert("title" , Attachment.Key);
CurrentAttachment.Insert("fileUrl", Attachment.Value);
CurrentAttachment = New Structure;
CurrentAttachment.Insert("title" , Attachment.Key);
CurrentAttachment.Insert("fileUrl", Attachment.Value);
AttachmentsArray.Add(CurrentAttachment);
AttachmentsArray.Add(CurrentAttachment);
EndDo;
EndDo;
EndIf;
EndIf;
If AttachmentsArray.Quantity() > 0 Then
Return AttachmentsArray;
Else
Return Undefined;
EndIf;
If AttachmentsArray.Quantity() > 0 Then
Return AttachmentsArray;
Else
Return Undefined;
EndIf;
EndFunction
Function EventManagement(Val Token, Val Calendar, Val EventDescription, Val Event = "")
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event);
OPI_TypeConversion.GetCollection(EventDescription);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Calendar);
OPI_TypeConversion.GetLine(Event);
OPI_TypeConversion.GetCollection(EventDescription);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
Existing = ValueIsFilled(Event);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar
+ "/events"
+ ?(Existing, "/" + Event, "");
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
Existing = ValueIsFilled(Event);
URL = "https://www.googleapis.com/calendar/v3/calendars/"
+ Calendar
+ "/events"
+ ?(Existing, "/" + Event, "");
Date0 = EventDescription["StartDate"];
Date1 = EventDescription["EndDate"];
Attachments = EventDescription["ArrayOfAttachmentURLs"];
Attachments = ConvertAttachments(Attachments);
Notifications = ?(EventDescription["SendNotifications"] = Undefined
, False
, EventDescription["SendNotifications"]);
Date0 = EventDescription["StartDate"];
Date1 = EventDescription["EndDate"];
Attachments = EventDescription["ArrayOfAttachmentURLs"];
Attachments = ConvertAttachments(Attachments);
Notifications = ?(EventDescription["SendNotifications"] = Undefined
, False
, EventDescription["SendNotifications"]);
Parameters = New Structure;
Parameters.Insert("summary" , EventDescription["Title"]);
Parameters.Insert("description", EventDescription["Description"]);
Parameters.Insert("location" , EventDescription["Venue"]);
Parameters.Insert("start" , ConvertDate(Date0));
Parameters.Insert("end" , ConvertDate(Date1));
Parameters.Insert("attachments", Attachments);
Parameters = New Structure;
Parameters.Insert("summary" , EventDescription["Title"]);
Parameters.Insert("description", EventDescription["Description"]);
Parameters.Insert("location" , EventDescription["Venue"]);
Parameters.Insert("start" , ConvertDate(Date0));
Parameters.Insert("end" , ConvertDate(Date1));
Parameters.Insert("attachments", Attachments);
URLParameters = New Structure;
URLParameters.Insert("sendUpdates" , ?(Notifications, "all", "none"));
URLParameters.Insert("supportsAttachments" , ?(ValueIsFilled(Attachments), "true", "false"));
URLParameters = New Structure;
URLParameters.Insert("sendUpdates" , ?(Notifications, "all", "none"));
URLParameters.Insert("supportsAttachments" , ?(ValueIsFilled(Attachments), "true", "false"));
URL = URL + OPI_Tools.RequestParametersToString(URLParameters);
URL = URL + OPI_Tools.RequestParametersToString(URLParameters);
OPI_Tools.RemoveEmptyCollectionFields(Parameters);
OPI_Tools.RemoveEmptyCollectionFields(Parameters);
If Existing Then
Response = OPI_Tools.Patch(URL, Parameters, Headers, True);
Else
Response = OPI_Tools.Post(URL, Parameters, Headers, True);
EndIf;
If Existing Then
Response = OPI_Tools.Patch(URL, Parameters, Headers, True);
Else
Response = OPI_Tools.Post(URL, Parameters, Headers, True);
EndIf;
Return Response;
Return Response;
EndFunction
Procedure GetCalendarsListRecursively(Val Headers, ArrayOfCalendars, Page = "")
Items = "items";
NPT = "nextPageToken";
Parameters = New Structure;
Items = "items";
NPT = "nextPageToken";
Parameters = New Structure;
If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page);
EndIf;
If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page);
EndIf;
Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList"
, Parameters
, Headers);
Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/users/me/calendarList"
, Parameters
, Headers);
Calendars = Result[Items];
Page = Result[NPT];
Calendars = Result[Items];
Page = Result[NPT];
For Each Calendar In Calendars Do
ArrayOfCalendars.Add(Calendar);
EndDo;
For Each Calendar In Calendars Do
ArrayOfCalendars.Add(Calendar);
EndDo;
If Calendars.Quantity() > 0 And ValueIsFilled(Page) Then
GetCalendarsListRecursively(Headers, ArrayOfCalendars, Page);
EndIf;
If Calendars.Quantity() > 0 And ValueIsFilled(Page) Then
GetCalendarsListRecursively(Headers, ArrayOfCalendars, Page);
EndIf;
EndProcedure
Procedure GetEventsListRecursively(Val Headers, Val Calendar, ArrayOfEvents, Page = "")
Items = "items";
NPT = "nextPageToken";
Parameters = New Structure;
Items = "items";
NPT = "nextPageToken";
Parameters = New Structure;
If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page);
EndIf;
If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page);
EndIf;
Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/calendars/" + Calendar + "/events"
, Parameters
, Headers);
Result = OPI_Tools.Get("https://www.googleapis.com/calendar/v3/calendars/" + Calendar + "/events"
, Parameters
, Headers);
Events = Result[Items];
Page = Result[NPT];
Events = Result[Items];
Page = Result[NPT];
For Each Event In Events Do
ArrayOfEvents.Add(Event);
EndDo;
For Each Event In Events Do
ArrayOfEvents.Add(Event);
EndDo;
If Events.Quantity() > 0 And ValueIsFilled(Page) Then
GetEventsListRecursively(Headers, ArrayOfEvents, Page);
EndIf;
If Events.Quantity() > 0 And ValueIsFilled(Page) Then
GetEventsListRecursively(Headers, ArrayOfEvents, Page);
EndIf;
EndProcedure

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="d27d4ffb-31c2-4362-bd6d-d785ce171b49">
<name>OPI_GoogleCalendar</name>
<synonym>
<key></key>
<value>OPI google calendar</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_GoogleCalendar</name>
<synonym>
<key></key>
<value>OPI google calendar</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -47,18 +47,18 @@
// Key-Value Pair - serialized JSON response from Google
Function GetObjectInformation(Val Token, Val Identifier) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Parameters = New Structure;
Parameters.Insert("fields", "*");
Parameters = New Structure;
Parameters.Insert("fields", "*");
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -74,27 +74,27 @@ EndFunction
// Key-Value Pair - Array of directory mappings
Function GetDirectoriesList(Val Token, Val NameContains = "", Val Detailed = False) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NameContains);
OPI_TypeConversion.GetBoolean(Detailed);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NameContains);
OPI_TypeConversion.GetBoolean(Detailed);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfObjects = New Array;
Filter = New Array;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfObjects = New Array;
Filter = New Array;
Filter.Add("mimeType = 'application/vnd.google-apps.folder'");
Filter.Add("mimeType = 'application/vnd.google-apps.folder'");
If ValueIsFilled(NameContains) Then
Filter.Add("name contains '" + NameContains + "'");
EndIf;
If ValueIsFilled(NameContains) Then
Filter.Add("name contains '" + NameContains + "'");
EndIf;
GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter);
GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter);
If Detailed Then
BreakDownObjectsInDetail(Token, ArrayOfObjects);
EndIf;
If Detailed Then
BreakDownObjectsInDetail(Token, ArrayOfObjects);
EndIf;
Return ArrayOfObjects;
Return ArrayOfObjects;
EndFunction
@@ -110,27 +110,27 @@ EndFunction
// Key-Value Pair - Array of file mappings
Function GetFilesList(Val Token, Val NameContains = "", Val Directory = "") Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NameContains);
OPI_TypeConversion.GetLine(Directory);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NameContains);
OPI_TypeConversion.GetLine(Directory);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfObjects = New Array;
Filter = New Array;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
ArrayOfObjects = New Array;
Filter = New Array;
Filter.Add("mimeType != 'application/vnd.google-apps.folder'");
Filter.Add("mimeType != 'application/vnd.google-apps.folder'");
If ValueIsFilled(NameContains) Then
Filter.Add("name contains '" + NameContains + "'");
EndIf;
If ValueIsFilled(NameContains) Then
Filter.Add("name contains '" + NameContains + "'");
EndIf;
If ValueIsFilled(Directory) Then
Filter.Add("'" + Directory + "' in parents");
EndIf;
If ValueIsFilled(Directory) Then
Filter.Add("'" + Directory + "' in parents");
EndIf;
GetObjectsListRecursively(Headers, ArrayOfObjects, , Filter);
GetObjectsListRecursively(Headers, ArrayOfObjects, , Filter);
Return ArrayOfObjects;
Return ArrayOfObjects;
EndFunction
@@ -145,7 +145,7 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Google
Function UploadFile(Val Token, Val File, Val Description) Export
Return FileManagement(Token, File, Description);
Return FileManagement(Token, File, Description);
EndFunction
// Create folder
@@ -160,17 +160,17 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function CreateFolder(Val Token, Val Name, Val Parent = "") Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Parent);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Parent);
Description = New Match;
Description.Insert("MIME" , "application/vnd.google-apps.folder");
Description.Insert("Name" , Name);
Description.Insert("Description", "");
Description.Insert("Parent", ?(ValueIsFilled(Parent), Parent, "root"));
Description = New Match;
Description.Insert("MIME" , "application/vnd.google-apps.folder");
Description.Insert("Name" , Name);
Description.Insert("Description", "");
Description.Insert("Parent", ?(ValueIsFilled(Parent), Parent, "root"));
Return FileManagement(Token, , Description);
Return FileManagement(Token, , Description);
EndFunction
@@ -186,18 +186,18 @@ EndFunction
// BinaryData,String - Binary data or file path when SavePath parameter is specified
Function DownloadFile(Val Token, Val Identifier, Val SavePath = "") Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Parameters = New Match;
Parameters.Insert("alt", "media");
Parameters = New Match;
Parameters.Insert("alt", "media");
Response = OPI_Tools.Get(URL, Parameters , Headers, SavePath);
Response = OPI_Tools.Get(URL, Parameters , Headers, SavePath);
Return Response;
Return Response;
EndFunction
@@ -214,31 +214,31 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function CopyObject(Val Token, Val Identifier, Val NewName = "", Val NewParent = "") Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NewName);
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(NewParent);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(NewName);
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(NewParent);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/copy";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/copy";
Parameters = New Structure;
Parameters = New Structure;
If ValueIsFilled(NewName) Then
Parameters.Insert("name", NewName);
EndIf;
If ValueIsFilled(NewName) Then
Parameters.Insert("name", NewName);
EndIf;
If ValueIsFilled(NewParent) Then
If ValueIsFilled(NewParent) Then
ArrayOfParents = New Array;
ArrayOfParents.Add(NewParent);
Parameters.Insert("parents", ArrayOfParents);
ArrayOfParents = New Array;
ArrayOfParents.Add(NewParent);
Parameters.Insert("parents", ArrayOfParents);
EndIf;
EndIf;
Response = OPI_Tools.Post(URL, Parameters , Headers, True);
Response = OPI_Tools.Post(URL, Parameters , Headers, True);
Return Response;
Return Response;
EndFunction
@@ -255,19 +255,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function UpdateFile(Val Token, Val Identifier, Val File, Val NewName = "") Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(NewName);
OPI_TypeConversion.GetBinaryData(File);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(NewName);
OPI_TypeConversion.GetBinaryData(File);
If ValueIsFilled(NewName) Then
Description = New Match;
Description.Insert("Name", NewName);
Else
Description = "";
EndIf;
If ValueIsFilled(NewName) Then
Description = New Match;
Description.Insert("Name", NewName);
Else
Description = "";
EndIf;
Return FileManagement(Token, File, Description, Identifier);
Return FileManagement(Token, File, Description, Identifier);
EndFunction
@@ -282,14 +282,14 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function DeleteObject(Val Token, Val Identifier) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Response = OPI_Tools.Delete(URL, , Headers);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier;
Response = OPI_Tools.Delete(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -299,13 +299,13 @@ EndFunction
// Key-Value Pair - File description
Function GetFileDescription() Export
Description = New Match;
Description.Insert("MIME" , "image/jpeg"); // MIME-type uploading file
Description.Insert("Name" , "New file.jpg"); // File name with extension
Description.Insert("Description" , "This is a new file"); // File description
Description.Insert("Parent" , "root"); // ID directory upload or "root" for upload in root
Description = New Match;
Description.Insert("MIME" , "image/jpeg"); // MIME-type uploading file
Description.Insert("Name" , "New file.jpg"); // File name with extension
Description.Insert("Description" , "This is a new file"); // File description
Description.Insert("Parent" , "root"); // ID directory upload or "root" for upload in root
Return Description;
Return Description;
EndFunction
@@ -325,19 +325,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function CreateComment(Val Token, Val Identifier, Val Comment) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(Comment);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(Comment);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/comments?fields=*";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + Identifier + "/comments?fields=*";
Parameters = New Structure;
Parameters.Insert("content", Comment);
Parameters = New Structure;
Parameters.Insert("content", Comment);
Response = OPI_Tools.POST(URL, Parameters, Headers);
Response = OPI_Tools.POST(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -353,19 +353,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function GetComment(Val Token, Val ObjectID, Val CommentID) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID);
OPI_TypeConversion.GetLine(CommentID);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID);
OPI_TypeConversion.GetLine(CommentID);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID;
Parameters = New Structure;
Parameters.Insert("fields", "*");
Parameters = New Structure;
Parameters.Insert("fields", "*");
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -380,18 +380,18 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function GetCommentList(Val Token, Val ObjectID) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments";
Parameters = New Structure;
Parameters.Insert("fields", "*");
Parameters = New Structure;
Parameters.Insert("fields", "*");
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -407,16 +407,16 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function DeleteComment(Val Token, Val ObjectID, Val CommentID) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID);
OPI_TypeConversion.GetLine(CommentID);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(ObjectID);
OPI_TypeConversion.GetLine(CommentID);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://www.googleapis.com/drive/v3/files/" + ObjectID + "/comments/" + CommentID;
Response = OPI_Tools.Delete(URL, , Headers);
Response = OPI_Tools.Delete(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -428,291 +428,291 @@ EndFunction
Procedure GetObjectsListRecursively(Val Headers, ArrayOfObjects, Detailed = False, Filter = "", Page = "")
URL = "https://www.googleapis.com/drive/v3/files";
Files = "files";
NPT = "nextPageToken";
Parameters = New Structure;
Parameters.Insert("fields", "*");
URL = "https://www.googleapis.com/drive/v3/files";
Files = "files";
NPT = "nextPageToken";
Parameters = New Structure;
Parameters.Insert("fields", "*");
If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page);
EndIf;
If ValueIsFilled(Page) Then
Parameters.Insert("pageToken", Page);
EndIf;
If ValueIsFilled(Filter) And TypeValue(Filter) = Type("Array") Then
FilterString = StrJoin(Filter, " and ");
Parameters.Insert("q", FilterString);
EndIf;
If ValueIsFilled(Filter) And TypeValue(Filter) = Type("Array") Then
FilterString = StrJoin(Filter, " and ");
Parameters.Insert("q", FilterString);
EndIf;
Result = OPI_Tools.Get(URL, Parameters, Headers);
Result = OPI_Tools.Get(URL, Parameters, Headers);
Objects = Result[Files];
Page = Result[NPT];
Objects = Result[Files];
Page = Result[NPT];
For Each CurrentObject In Objects Do
ArrayOfObjects.Add(CurrentObject);
EndDo;
For Each CurrentObject In Objects Do
ArrayOfObjects.Add(CurrentObject);
EndDo;
If Objects.Quantity() > 0 And ValueIsFilled(Page) Then
GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter, Page);
EndIf;
If Objects.Quantity() > 0 And ValueIsFilled(Page) Then
GetObjectsListRecursively(Headers, ArrayOfObjects, Detailed, Filter, Page);
EndIf;
EndProcedure
Procedure BreakDownObjectsInDetail(Val Token, ArrayOfObjects)
For Each CurrentObject In ArrayOfObjects Do
For Each CurrentObject In ArrayOfObjects Do
ArrayOfFiles = New Array;
CurrentID = CurrentObject["id"];
ArrayOfFiles = New Array;
CurrentID = CurrentObject["id"];
Result = GetFilesList(Token, , CurrentID);
Result = GetFilesList(Token, , CurrentID);
For Each File In Result Do
ArrayOfFiles.Add(File);
EndDo;
For Each File In Result Do
ArrayOfFiles.Add(File);
EndDo;
CurrentObject.Insert("files", ArrayOfFiles);
CurrentObject.Insert("files", ArrayOfFiles);
EndDo;
EndDo;
EndProcedure
Procedure FormFileUploadParameters(Description)
FormedDescription = New Match;
OPI_Tools.RemoveEmptyCollectionFields(Description);
FormedDescription = New Match;
OPI_Tools.RemoveEmptyCollectionFields(Description);
FieldMapping = New Match;
FieldMapping.Insert("MIME" , "mimeType");
FieldMapping.Insert("Name" , "name");
FieldMapping.Insert("Description" , "description");
FieldMapping.Insert("Parent" , "parents");
FieldMapping.Insert("Extension", "fileExtension");
FieldMapping = New Match;
FieldMapping.Insert("MIME" , "mimeType");
FieldMapping.Insert("Name" , "name");
FieldMapping.Insert("Description" , "description");
FieldMapping.Insert("Parent" , "parents");
FieldMapping.Insert("Extension", "fileExtension");
For Each Element In Description Do
For Each Element In Description Do
If Element.Key = "Parent" Then
If Element.Key = "Parent" Then
CurrentValue = New Array;
CurrentValue.Add(Element.Value);
CurrentValue = New Array;
CurrentValue.Add(Element.Value);
Else
Else
CurrentValue = Element.Value;
CurrentValue = Element.Value;
EndIf;
EndIf;
FieldName = FieldMapping.Get(Element.Key);
FormedDescription.Insert(FieldName, CurrentValue);
FieldName = FieldMapping.Get(Element.Key);
FormedDescription.Insert(FieldName, CurrentValue);
EndDo;
EndDo;
Description = FormedDescription;
Description = FormedDescription;
EndProcedure
Function FileManagement(Val Token, Val File = "", Val Description = "", Val Identifier = "")
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Identifier);
If ValueIsFilled(Description) Then
OPI_TypeConversion.GetCollection(Description);
EndIf;
If ValueIsFilled(Description) Then
OPI_TypeConversion.GetCollection(Description);
EndIf;
MimeType = "mimeType";
MimeType = "mimeType";
If ValueIsFilled(Identifier) Then
MIME = GetObjectInformation(Token, Identifier)[MimeType];
Else
MIME = Description["MIME"];
EndIf;
If ValueIsFilled(Identifier) Then
MIME = GetObjectInformation(Token, Identifier)[MimeType];
Else
MIME = Description["MIME"];
EndIf;
If Not ValueIsFilled(Description) Then
Description = New Match;
EndIf;
If Not ValueIsFilled(Description) Then
Description = New Match;
EndIf;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
FormFileUploadParameters(Description);
JSONDescription = OPI_Tools.JSONString(Description);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
FormFileUploadParameters(Description);
JSONDescription = OPI_Tools.JSONString(Description);
FileMapping = New Match;
FileMapping = New Match;
If ValueIsFilled(File) Then
If ValueIsFilled(File) Then
ChunkSize = 268435457;
Size = OPI_Tools.ConvertDataWithSizeRetrieval(File, ChunkSize);
ChunkSize = 268435457;
Size = OPI_Tools.ConvertDataWithSizeRetrieval(File, ChunkSize);
FileMapping.Insert(File, MIME);
FileMapping.Insert(File, MIME);
If Size < ChunkSize And TypeValue(File) = Type("BinaryData") Then
Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier);
Else
Response = UploadLargeFile(Description, FileMapping, Headers, Identifier);
EndIf;
If Size < ChunkSize And TypeValue(File) = Type("BinaryData") Then
Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier);
Else
Response = UploadLargeFile(Description, FileMapping, Headers, Identifier);
EndIf;
Else
Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier);
EndIf;
Else
Response = UploadSmallFile(JSONDescription, FileMapping, Headers, Identifier);
EndIf;
Return Response;
Return Response;
EndFunction
Function UploadSmallFile(Val Description, Val FileMapping, Val Headers, Val Identifier = "")
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart";
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart";
If ValueIsFilled(Identifier) Then
URL = StringReplace(URL, "/files", "/files/" + Identifier);
Response = OPI_Tools.PatchMultipartRelated(URL, Description, FileMapping, Headers);
Else
Response = OPI_Tools.PostMultipartRelated(URL, Description, FileMapping, Headers);
EndIf;
If ValueIsFilled(Identifier) Then
URL = StringReplace(URL, "/files", "/files/" + Identifier);
Response = OPI_Tools.PatchMultipartRelated(URL, Description, FileMapping, Headers);
Else
Response = OPI_Tools.PostMultipartRelated(URL, Description, FileMapping, Headers);
EndIf;
Return Response;
Return Response;
EndFunction
Function UploadLargeFile(Val Description, Val FileMapping, Val Headers, Val Identifier = "")
For Each File In FileMapping Do
Binary = File.Key;
Break;
EndDo;
For Each File In FileMapping Do
Binary = File.Key;
Break;
EndDo;
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable";
URL = "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable";
If ValueIsFilled(Identifier) Then
URL = StringReplace(URL, "/files", "/files/" + Identifier);
Response = OPI_Tools.Patch(URL, Description, Headers, True, True);
Else
Response = OPI_Tools.Post(URL, Description, Headers, True, True);
EndIf;
If ValueIsFilled(Identifier) Then
URL = StringReplace(URL, "/files", "/files/" + Identifier);
Response = OPI_Tools.Patch(URL, Description, Headers, True, True);
Else
Response = OPI_Tools.Post(URL, Description, Headers, True, True);
EndIf;
UploadURL = Response.Headers["Location"];
UploadURL = Response.Headers["Location"];
If Not ValueIsFilled(UploadURL) Then
OPI_Tools.ProcessResponse(Response);
Return Response;
EndIf;
If Not ValueIsFilled(UploadURL) Then
OPI_Tools.ProcessResponse(Response);
Return Response;
EndIf;
UploadResponse = UploadFileInParts(Binary, UploadURL);
Response = ?(ValueIsFilled(UploadResponse), UploadResponse, Response);
UploadResponse = UploadFileInParts(Binary, UploadURL);
Response = ?(ValueIsFilled(UploadResponse), UploadResponse, Response);
OPI_Tools.ProcessResponse(Response);
Return Response;
OPI_Tools.ProcessResponse(Response);
Return Response;
EndFunction
Function UploadFileInParts(Val Binary, Val UploadURL)
Response = "";
ChunkSize = 268435456;
BytesRead = 0;
CurrentPosition = 0;
TotalSize = Binary.Size();
StrTotalSize = OPI_Tools.NumberToString(TotalSize);
ReadingData = New ReadingData(Binary);
SourceStream = ReadingData.SourceStream();
Response = "";
ChunkSize = 268435456;
BytesRead = 0;
CurrentPosition = 0;
TotalSize = Binary.Size();
StrTotalSize = OPI_Tools.NumberToString(TotalSize);
ReadingData = New ReadingData(Binary);
SourceStream = ReadingData.SourceStream();
WHile BytesRead < TotalSize Do
WHile BytesRead < TotalSize Do
BytesRead = SourceStream.CurrentPosition();
Result = ReadingData.Read(ChunkSize);
Current data = Result.GetBinaryData();
CurrentSize = Current data.Size();
NextPosition = CurrentPosition + CurrentSize - 1;
BytesRead = SourceStream.CurrentPosition();
Result = ReadingData.Read(ChunkSize);
Current data = Result.GetBinaryData();
CurrentSize = Current data.Size();
NextPosition = CurrentPosition + CurrentSize - 1;
If Not ValueIsFilled(Current data) Then
Break;
EndIf;
If Not ValueIsFilled(Current data) Then
Break;
EndIf;
StreamHeader = "bytes "
+ OPI_Tools.NumberToString(CurrentPosition)
+ "-"
+ OPI_Tools.NumberToString(NextPosition)
+ "/"
+ StrTotalSize;
StreamHeader = "bytes "
+ OPI_Tools.NumberToString(CurrentPosition)
+ "-"
+ OPI_Tools.NumberToString(NextPosition)
+ "/"
+ StrTotalSize;
AdditionalHeaders = New Match;
AdditionalHeaders.Insert("Content-Length", OPI_Tools.NumberToString(CurrentSize));
AdditionalHeaders.Insert("Content-Range" , StreamHeader);
AdditionalHeaders.Insert("Content-Type" , "application/octet-stream");
AdditionalHeaders = New Match;
AdditionalHeaders.Insert("Content-Length", OPI_Tools.NumberToString(CurrentSize));
AdditionalHeaders.Insert("Content-Range" , StreamHeader);
AdditionalHeaders.Insert("Content-Type" , "application/octet-stream");
Response = OPI_Tools.Put(UploadURL, Current data, AdditionalHeaders, False, True);
Response = OPI_Tools.Put(UploadURL, Current data, AdditionalHeaders, False, True);
CheckResult = CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition);
CheckResult = CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition);
If ValueIsFilled(CheckResult) Then
Return CheckResult;
EndIf;
If ValueIsFilled(CheckResult) Then
Return CheckResult;
EndIf;
// !OInt KBytes = 1024;
// !OInt MByte = KBytes * KBytes;
// !OInt Notify(OPI_Tools.ProgressInformation(CurrentPosition, TotalSize, "MB", MByte));
// !OInt KBytes = 1024;
// !OInt MByte = KBytes * KBytes;
// !OInt Notify(OPI_Tools.ProgressInformation(CurrentPosition, TotalSize, "MB", MByte));
// !OInt PerformGarbageCollection();
// !OInt ReleaseObject(Current data);
// !OInt PerformGarbageCollection();
// !OInt ReleaseObject(Current data);
EndDo;
EndDo;
Return Response;
Return Response;
EndFunction
Function CheckPartUpload(Response, StrTotalSize, AdditionalHeaders, UploadURL, CurrentPosition)
StartOfErrorCodes = 400;
EndOfFailureCodes = 600;
StartOfSuccessCodes = 200;
EndOfSuccessCodes = 300;
Redirection = 308;
StartOfErrorCodes = 400;
EndOfFailureCodes = 600;
StartOfSuccessCodes = 200;
EndOfSuccessCodes = 300;
Redirection = 308;
If Response.StatusCode >= StartOfErrorCodes And Response.StatusCode < EndOfFailureCodes Then
If Response.StatusCode >= StartOfErrorCodes And Response.StatusCode < EndOfFailureCodes Then
StreamHeader = "bytes */" + StrTotalSize;
AdditionalHeaders.Insert("Content-Range" , StreamHeader);
StreamHeader = "bytes */" + StrTotalSize;
AdditionalHeaders.Insert("Content-Range" , StreamHeader);
CheckResponse = OPI_Tools.Put(UploadURL, "", AdditionalHeaders, False, True);
CheckResponse = OPI_Tools.Put(UploadURL, "", AdditionalHeaders, False, True);
If CheckResponse.StatusCode >= StartOfSuccessCodes And CheckResponse.StatusCode < EndOfSuccessCodes Then
If CheckResponse.StatusCode >= StartOfSuccessCodes And CheckResponse.StatusCode < EndOfSuccessCodes Then
OPI_Tools.ProcessResponse(CheckResponse);
Return CheckResponse;
OPI_Tools.ProcessResponse(CheckResponse);
Return CheckResponse;
ElsIf CheckResponse.StatusCode = Redirection Then
ElsIf CheckResponse.StatusCode = Redirection Then
UploadedData = Response.Headers["Range"];
UploadedData = Response.Headers["Range"];
Else
Else
OPI_Tools.ProcessResponse(Response);
Return Response;
OPI_Tools.ProcessResponse(Response);
Return Response;
EndIf;
EndIf;
Else
UploadedData = Response.Headers["Range"];
EndIf;
Else
UploadedData = Response.Headers["Range"];
EndIf;
If Not ValueIsFilled(UploadedData) Then
OPI_Tools.ProcessResponse(Response);
Return Response;
EndIf;
If Not ValueIsFilled(UploadedData) Then
OPI_Tools.ProcessResponse(Response);
Return Response;
EndIf;
UploadedData = StringReplace(UploadedData, "bytes=", "");
ArrayOfInformation = StrSplit(UploadedData, "-", False);
PartsRequired = 2;
UploadedData = StringReplace(UploadedData, "bytes=", "");
ArrayOfInformation = StrSplit(UploadedData, "-", False);
PartsRequired = 2;
If Not ArrayOfInformation.Quantity() = PartsRequired Then
OPI_Tools.ProcessResponse(Response);
Return Response;
EndIf;
If Not ArrayOfInformation.Quantity() = PartsRequired Then
OPI_Tools.ProcessResponse(Response);
Return Response;
EndIf;
CurrentPosition = Number(ArrayOfInformation[1]) + 1;
CurrentPosition = Number(ArrayOfInformation[1]) + 1;
Return "";
Return "";
EndFunction

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3bf39c90-a263-4300-b800-7fd85f7c6d40">
<name>OPI_GoogleDrive</name>
<synonym>
<key></key>
<value>OPI google drive</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_GoogleDrive</name>
<synonym>
<key></key>
<value>OPI google drive</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -48,24 +48,24 @@
// Key-Value Pair - serialized JSON response from Google
Function CreateBook(Val Token, Val Name, Val ArrayOfSheetNames) Export
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetCollection(ArrayOfSheetNames);
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetCollection(ArrayOfSheetNames);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets";
Properties = New Structure("title" , Name);
Sheets = New Array;
Properties = New Structure("title" , Name);
Sheets = New Array;
FillSheetArray(ArrayOfSheetNames, Sheets);
FillSheetArray(ArrayOfSheetNames, Sheets);
Parameters = New Structure;
OPI_Tools.AddField("properties", Properties, "Collection", Parameters);
OPI_Tools.AddField("sheets" , Sheets , "Collection", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("properties", Properties, "Collection", Parameters);
OPI_Tools.AddField("sheets" , Sheets , "Collection", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -80,14 +80,14 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function GetBook(Val Token, Val Identifier) Export
OPI_TypeConversion.GetLine(Identifier);
OPI_TypeConversion.GetLine(Identifier);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Identifier;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Identifier;
Response = OPI_Tools.Get(URL, , Headers);
Response = OPI_Tools.Get(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -103,24 +103,24 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function EditBookTitle(Val Token, Val Book, Val Name) Export
OPI_TypeConversion.GetLine(Book);
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Book);
OPI_TypeConversion.GetLine(Name);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + ":batchUpdate";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + ":batchUpdate";
Change = New Structure("title", Name);
ChangeRequest = New Structure("properties,fields", Change, "title");
Request = New Structure("updateSpreadsheetProperties", ChangeRequest);
Change = New Structure("title", Name);
ChangeRequest = New Structure("properties,fields", Change, "title");
Request = New Structure("updateSpreadsheetProperties", ChangeRequest);
ArrayOfRequests = New Array;
ArrayOfRequests.Add(Request);
ArrayOfRequests = New Array;
ArrayOfRequests.Add(Request);
Parameters = New Structure("requests", ArrayOfRequests);
Parameters = New Structure("requests", ArrayOfRequests);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -141,21 +141,21 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function AddSheet(Val Token, Val Book, Val Name) Export
OPI_TypeConversion.GetLine(Book);
OPI_TypeConversion.GetLine(Book);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + ":batchUpdate";
Sheet = CreateSheet(Name);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + ":batchUpdate";
Sheet = CreateSheet(Name);
Requests = New Array;
Change = New Structure("addSheet", Sheet);
Requests.Add(Change);
Requests = New Array;
Change = New Structure("addSheet", Sheet);
Requests.Add(Change);
Parameters = New Structure("requests", Requests);
Parameters = New Structure("requests", Requests);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -171,22 +171,22 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function DeleteSheet(Val Token, Val Book, Val Sheet) Export
OPI_TypeConversion.GetLine(Book);
OPI_TypeConversion.GetLine(Sheet);
OPI_TypeConversion.GetLine(Book);
OPI_TypeConversion.GetLine(Sheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + ":batchUpdate";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + ":batchUpdate";
Requests = New Array;
Sheet = New Structure("sheetId" , Sheet);
Change = New Structure("deleteSheet", Sheet);
Requests.Add(Change);
Requests = New Array;
Sheet = New Structure("sheetId" , Sheet);
Change = New Structure("deleteSheet", Sheet);
Requests.Add(Change);
Parameters = New Structure("requests", Requests);
Parameters = New Structure("requests", Requests);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -203,21 +203,21 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function CopySheet(Val Token, Val From, Val To, Val Sheet) Export
OPI_TypeConversion.GetLine(From);
OPI_TypeConversion.GetLine(To);
OPI_TypeConversion.GetLine(Sheet);
OPI_TypeConversion.GetLine(From);
OPI_TypeConversion.GetLine(To);
OPI_TypeConversion.GetLine(Sheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/"
+ From
+ "/sheets/"
+ Sheet
+ ":copyTo";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/"
+ From
+ "/sheets/"
+ Sheet
+ ":copyTo";
Parameters = New Structure("destinationSpreadsheetId", To);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Parameters = New Structure("destinationSpreadsheetId", To);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -238,27 +238,27 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Google
Function SetCellValues(Val Token
, Val Book
, Val ValueMapping
, Val Sheet = ""
, Val MajorDimension = "COLUMNS") Export
, Val Book
, Val ValueMapping
, Val Sheet = ""
, Val MajorDimension = "COLUMNS") Export
OPI_TypeConversion.GetLine(Book);
OPI_TypeConversion.GetCollection(ValueMapping);
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;
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;
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + "/values:batchUpdate";
Data array = FormCellDataArray(ValueMapping, MajorDimension, Sheet);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + "/values:batchUpdate";
Data array = FormCellDataArray(ValueMapping, MajorDimension, Sheet);
Parameters = New Structure("data,valueInputOption", Data array, "USER_ENTERED");
Response = OPI_Tools.Post(URL, Parameters, Headers);
Parameters = New Structure("data,valueInputOption", Data array, "USER_ENTERED");
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -275,18 +275,18 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function ClearCells(Val Token, Val Book, Val Cell array, Val Sheet = "") Export
OPI_TypeConversion.GetLine(Book);
OPI_TypeConversion.GetCollection(Cell array);
OPI_TypeConversion.GetLine(Book);
OPI_TypeConversion.GetCollection(Cell array);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + "/values:batchClear";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + "/values:batchClear";
FormCellNameArray(Cell array, Sheet);
FormCellNameArray(Cell array, Sheet);
Parameters = New Structure("ranges", Cell array);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Parameters = New Structure("ranges", Cell array);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -303,28 +303,28 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function GetCellValues(Val Token, Val Book, Val Cell array = "", Val Sheet = "") Export
OPI_TypeConversion.GetLine(Book);
OPI_TypeConversion.GetLine(Book);
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + "/values:batchGet";
Headers = OPI_GoogleWorkspace.GetAuthorizationHeader(Token);
URL = "https://sheets.googleapis.com/v4/spreadsheets/" + Book + "/values:batchGet";
If ValueIsFilled(Cell array) Then
OPI_TypeConversion.GetCollection(Cell array);
FormCellNameArray(Cell array, Sheet);
If ValueIsFilled(Cell array) Then
OPI_TypeConversion.GetCollection(Cell array);
FormCellNameArray(Cell array, Sheet);
First = True;
For Each Cell In Cell array Do
Delimiter = ?(First, "?", "&");
URL = URL + Delimiter + "ranges=" + Cell;
First = False;
EndDo;
Else
URL = URL + "?ranges='" + Sheet + "'";
EndIf;
First = True;
For Each Cell In Cell array Do
Delimiter = ?(First, "?", "&");
URL = URL + Delimiter + "ranges=" + Cell;
First = False;
EndDo;
Else
URL = URL + "?ranges='" + Sheet + "'";
EndIf;
Response = OPI_Tools.Get(URL, , Headers);
Response = OPI_Tools.Get(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -336,73 +336,73 @@ EndFunction
Procedure FillSheetArray(Val ArrayOfNames, SheetArray)
For Each SheetName In ArrayOfNames Do
For Each SheetName In ArrayOfNames Do
Sheet = CreateSheet(SheetName);
SheetArray.Add(Sheet);
Sheet = CreateSheet(SheetName);
SheetArray.Add(Sheet);
EndDo;
EndDo;
EndProcedure
Procedure AddSheetName(Cell, Val Sheet)
If ValueIsFilled(Sheet) Then
Cell = "'" + Sheet + "'!" + Cell;
EndIf;
If ValueIsFilled(Sheet) Then
Cell = "'" + Sheet + "'!" + Cell;
EndIf;
EndProcedure
Function CreateSheet(Val Name)
OPI_TypeConversion.GetLine(Name);
OPI_TypeConversion.GetLine(Name);
Sheet properties = New Structure("title" , Name);
Sheet = New Structure("properties", Sheet properties);
Sheet properties = New Structure("title" , Name);
Sheet = New Structure("properties", Sheet properties);
Return Sheet;
Return Sheet;
EndFunction
Function FormCellDataArray(Val ValueStructure, Val MajorDimension, Val Sheet)
OPI_TypeConversion.GetLine(Sheet);
OPI_TypeConversion.GetLine(Sheet);
Data array = New Array;
Data array = New Array;
For Each CellData In ValueStructure Do
For Each CellData In ValueStructure Do
CurrentValue = CellData.Value;
Current key = CellData.Key;
CurrentValue = CellData.Value;
Current key = CellData.Key;
AddSheetName(Current key, Sheet);
AddSheetName(Current key, Sheet);
OPI_TypeConversion.GetArray(CurrentValue);
OPI_TypeConversion.GetArray(CurrentValue);
Current data = New Match;
Current array = New Array;
Current data = New Match;
Current array = New Array;
Current array.Add(CurrentValue);
Current array.Add(CurrentValue);
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);
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);
Data array.Add(Current data);
EndDo;
EndDo;
Return Data array;
Return Data array;
EndFunction
Procedure FormCellNameArray(Val ArrayOfNames, Val Sheet)
OPI_TypeConversion.GetLine(Sheet);
OPI_TypeConversion.GetLine(Sheet);
For N = 0 For ArrayOfNames.WithinBoundary() Do
AddSheetName(ArrayOfNames[N], Sheet);
EndDo;
For N = 0 For ArrayOfNames.WithinBoundary() Do
AddSheetName(ArrayOfNames[N], Sheet);
EndDo;
EndProcedure

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="3890523a-552f-495c-ae7d-2991df8bb175">
<name>OPI_GoogleSheets</name>
<synonym>
<key></key>
<value>OPI google sheets</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_GoogleSheets</name>
<synonym>
<key></key>
<value>OPI google sheets</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -46,27 +46,27 @@
// Return value:
// String - Code retrieval link
Function FormCodeRetrievalLink(Val ClientID
, Val Calendar = True
, Val Drive = True
, Val Sheets = True) Export
, Val Calendar = True
, Val Drive = True
, Val Sheets = True) Export
OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetBoolean(Calendar);
OPI_TypeConversion.GetBoolean(Sheets);
OPI_TypeConversion.GetBoolean(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 = "https://accounts.google.com/o/oauth2/auth";
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));
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_Tools.RequestParametersToString(URLParameters);
URL = URL + OPI_Tools.RequestParametersToString(URLParameters);
Return URL;
Return URL;
EndFunction
@@ -82,22 +82,22 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function GetTokenByCode(Val ClientID, Val ClientSecret, Val Code) Export
OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(Code);
OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(Code);
URL = "https://accounts.google.com/o/oauth2/token";
URL = "https://accounts.google.com/o/oauth2/token";
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);
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);
Response = OPI_Tools.Post(URL, URLParameters, , False);
Response = OPI_Tools.Post(URL, URLParameters, , False);
Return Response;
Return Response;
EndFunction
@@ -113,21 +113,21 @@ EndFunction
// Key-Value Pair - serialized JSON response from Google
Function RefreshToken(Val ClientID, Val ClientSecret, Val RefreshToken) Export
OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(RefreshToken);
OPI_TypeConversion.GetLine(ClientID);
OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(RefreshToken);
URL = "https://accounts.google.com/o/oauth2/token";
URL = "https://accounts.google.com/o/oauth2/token";
URLParameters = New Structure;
URLParameters.Insert("grant_type" , "refresh_token");
URLParameters.Insert("client_id" , ClientID);
URLParameters.Insert("client_secret", ClientSecret);
URLParameters.Insert("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);
Response = OPI_Tools.Post(URL, URLParameters, , False);
Response = OPI_Tools.Post(URL, URLParameters, , False);
Return Response;
Return Response;
EndFunction
@@ -137,12 +137,12 @@ EndFunction
Function GetAuthorizationHeader(Val Token) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Token);
Headers = New Match;
Headers.Insert("Authorization", "Bearer " + Token);
Headers = New Match;
Headers.Insert("Authorization", "Bearer " + Token);
Return Headers;
Return Headers;
EndFunction
@@ -152,21 +152,21 @@ EndFunction
Function GetPermissionsList(Calendar, Drive, Sheets)
Permissions array = New Array;
Permissions array = New Array;
If Calendar Then
Permissions array.Add("https://www.googleapis.com/auth/calendar");
EndIf;
If Calendar Then
Permissions array.Add("https://www.googleapis.com/auth/calendar");
EndIf;
If Drive Then
Permissions array.Add("https://www.googleapis.com/auth/drive");
EndIf;
If Drive Then
Permissions array.Add("https://www.googleapis.com/auth/drive");
EndIf;
If Sheets Then
Permissions array.Add("https://www.googleapis.com/auth/spreadsheets");
EndIf;
If Sheets Then
Permissions array.Add("https://www.googleapis.com/auth/spreadsheets");
EndIf;
Return StrJoin(Permissions array, " ");
Return StrJoin(Permissions array, " ");
EndFunction

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e5bf1867-4c83-4724-91f2-931150325ea0">
<name>OPI_GoogleWorkspace</name>
<synonym>
<key></key>
<value>OPI google workspace</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_GoogleWorkspace</name>
<synonym>
<key></key>
<value>OPI google workspace</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1bef723b-a2a4-4547-b29f-63cf9c78d813">
<name>OPI_Notion</name>
<synonym>
<key>ru</key>
<value>Methodы work with Notion (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_Notion</name>
<synonym>
<key>ru</key>
<value>Methodы work with Notion (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -46,12 +46,12 @@
// Key-Value Pair - Serialized JSON response from Slack
Function GetBotInformation(Val Token) Export
URL = "https://slack.com/api/auth.test";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/auth.test";
Headers = GetAuthorizationHeader(Token);
Response = OPI_Tools.Get(URL, , Headers);
Response = OPI_Tools.Get(URL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -66,10 +66,10 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetWorkspaceList(Val Token, Val Cursor = "") Export
URL = "https://slack.com/api/auth.teams.list";
Response = GeneralDataRetrieval(Token, URL, Cursor);
URL = "https://slack.com/api/auth.teams.list";
Response = GeneralDataRetrieval(Token, URL, Cursor);
Return Response;
Return Response;
EndFunction
@@ -84,10 +84,10 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetUserList(Val Token, Val Cursor = "") Export
URL = "https://slack.com/api/users.list";
Response = GeneralDataRetrieval(Token, URL, Cursor);
URL = "https://slack.com/api/users.list";
Response = GeneralDataRetrieval(Token, URL, Cursor);
Return Response;
Return Response;
EndFunction
@@ -109,42 +109,42 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function SendMessage(Val Token, Val Channel, Val Text = "", Val Sending date = "", Val Blocks = "") Export
String_ = "String";
HasDate = ValueIsFilled(Sending date);
Headers = GetAuthorizationHeader(Token);
String_ = "String";
HasDate = ValueIsFilled(Sending date);
Headers = GetAuthorizationHeader(Token);
If ValueIsFilled(Blocks) And TypeValue(Blocks) = Type(String_) Then
OPI_TypeConversion.GetCollection(Blocks);
If ValueIsFilled(Blocks) And TypeValue(Blocks) = Type(String_) Then
OPI_TypeConversion.GetCollection(Blocks);
If TypeValue(Blocks) = Type("Array") Then
If TypeValue(Blocks) = Type("Array") Then
For N = 0 For Blocks.WithinBoundary() Do
OPI_TypeConversion.GetCollection(Blocks[N]);
EndDo;
For N = 0 For Blocks.WithinBoundary() Do
OPI_TypeConversion.GetCollection(Blocks[N]);
EndDo;
EndIf;
EndIf;
EndIf;
EndIf;
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel, String_ , Parameters);
OPI_Tools.AddField("text" , Text, String_ , Parameters);
OPI_Tools.AddField("blocks" , Blocks, "Array" , Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel, String_ , Parameters);
OPI_Tools.AddField("text" , Text, String_ , Parameters);
OPI_Tools.AddField("blocks" , Blocks, "Array" , Parameters);
If HasDate Then
If HasDate Then
URL = "https://slack.com/api/chat.scheduleMessage";
OPI_Tools.AddField("post_at", Sending date, "Date", Parameters);
URL = "https://slack.com/api/chat.scheduleMessage";
OPI_Tools.AddField("post_at", Sending date, "Date", Parameters);
Else
Else
URL = "https://slack.com/api/chat.postMessage";
URL = "https://slack.com/api/chat.postMessage";
EndIf;
EndIf;
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -162,30 +162,30 @@ EndFunction
// Return value:
// Key-Value Pair - Serialized JSON response from Slack
Function SendEphemeralMessage(Val Token
, Val Channel
, Val Text = ""
, Val User = ""
, Val Blocks = "") Export
, Val Channel
, Val Text = ""
, Val User = ""
, Val Blocks = "") Export
String_ = "String";
String_ = "String";
If ValueIsFilled(Blocks) And Not TypeValue(Blocks) = Type(String_) Then
OPI_TypeConversion.GetArray(Blocks);
EndIf;
If ValueIsFilled(Blocks) And Not TypeValue(Blocks) = Type(String_) Then
OPI_TypeConversion.GetArray(Blocks);
EndIf;
Headers = GetAuthorizationHeader(Token);
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , String_ , Parameters);
OPI_Tools.AddField("text" , Text , String_ , Parameters);
OPI_Tools.AddField("user" , User, String_ , Parameters);
OPI_Tools.AddField("blocks" , Blocks , "Collection", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , String_ , Parameters);
OPI_Tools.AddField("text" , Text , String_ , Parameters);
OPI_Tools.AddField("user" , User, String_ , Parameters);
OPI_Tools.AddField("blocks" , Blocks , "Collection", Parameters);
URL = "https://slack.com/api/chat.postEphemeral";
URL = "https://slack.com/api/chat.postEphemeral";
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -203,19 +203,19 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function EditMessage(Val Token, Val Channel, Val Timestamp, Val Text = "", Val BlockArray = "") Export
String_ = "String";
URL = "https://slack.com/api/chat.update";
Headers = GetAuthorizationHeader(Token);
String_ = "String";
URL = "https://slack.com/api/chat.update";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , String_ , Parameters);
OPI_Tools.AddField("text" , Text , String_ , Parameters);
OPI_Tools.AddField("ts" , Timestamp , String_ , Parameters);
OPI_Tools.AddField("blocks" , BlockArray, "Collection", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , String_ , Parameters);
OPI_Tools.AddField("text" , Text , String_ , Parameters);
OPI_Tools.AddField("ts" , Timestamp , String_ , Parameters);
OPI_Tools.AddField("blocks" , BlockArray, "Collection", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -232,25 +232,25 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function DeleteMessage(Val Token, Val Channel, Val Timestamp, Val IsDelayed = False) Export
OPI_TypeConversion.GetBoolean(IsDelayed);
OPI_TypeConversion.GetBoolean(IsDelayed);
Headers = GetAuthorizationHeader(Token);
Headers = GetAuthorizationHeader(Token);
If IsDelayed Then
URL = "https://slack.com/api/chat.deleteScheduledMessage";
TimestampField = "scheduled_message_id";
Else
URL = "https://slack.com/api/chat.delete";
TimestampField = "ts";
EndIf;
If IsDelayed Then
URL = "https://slack.com/api/chat.deleteScheduledMessage";
TimestampField = "scheduled_message_id";
Else
URL = "https://slack.com/api/chat.delete";
TimestampField = "ts";
EndIf;
Parameters = New Structure;
OPI_Tools.AddField("channel" , Channel , "String", Parameters);
OPI_Tools.AddField(TimestampField, Timestamp, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel" , Channel , "String", Parameters);
OPI_Tools.AddField(TimestampField, Timestamp, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -266,16 +266,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetDelayedMessageList(Val Token, Val Channel, Val Cursor = "") Export
URL = "https://slack.com/api/chat.scheduledMessages.list";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/chat.scheduledMessages.list";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("cursor" , Cursor, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("cursor" , Cursor, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -291,16 +291,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetMessageLink(Val Token, Val Channel, Val Timestamp) Export
URL = "https://slack.com/api/chat.getPermalink";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/chat.getPermalink";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel" , Channel , "String", Parameters);
OPI_Tools.AddField("message_ts", Timestamp, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel" , Channel , "String", Parameters);
OPI_Tools.AddField("message_ts", Timestamp, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -317,18 +317,18 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetMessageReplyList(Val Token, Val Channel, Val Timestamp, Val Cursor = "") Export
String_ = "String";
URL = "https://slack.com/api/conversations.replies";
Headers = GetAuthorizationHeader(Token);
String_ = "String";
URL = "https://slack.com/api/conversations.replies";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , String_, Parameters);
OPI_Tools.AddField("cursor" , Cursor , String_, Parameters);
OPI_Tools.AddField("ts" , Timestamp, String_, Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , String_, Parameters);
OPI_Tools.AddField("cursor" , Cursor , String_, Parameters);
OPI_Tools.AddField("ts" , Timestamp, String_, Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -348,16 +348,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetChannelList(Val Token, Val ExcludeArchived = False, Val Cursor = "") Export
URL = "https://slack.com/api/conversations.list";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/conversations.list";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("exclude_archived", ExcludeArchived, "Boolean", Parameters);
OPI_Tools.AddField("cursor" , Cursor , "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("exclude_archived", ExcludeArchived, "Boolean", Parameters);
OPI_Tools.AddField("cursor" , Cursor , "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -373,16 +373,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetChannelUserList(Val Token, Val Channel, Val Cursor = "") Export
URL = "https://slack.com/api/conversations.members";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/conversations.members";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("cursor" , Cursor, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("cursor" , Cursor, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -398,16 +398,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function CreateChannel(Val Token, Val Name, Val Private = False) Export
URL = "https://slack.com/api/conversations.create";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/conversations.create";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("name" , Name , "String", Parameters);
OPI_Tools.AddField("is_private", Private, "Boolean", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("name" , Name , "String", Parameters);
OPI_Tools.AddField("is_private", Private, "Boolean", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -422,9 +422,9 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function ArchiveChannel(Val Token, Val Channel) Export
URL = "https://slack.com/api/conversations.archive";
Response = DialogManagement(Token, Channel, URL);
Return Response;
URL = "https://slack.com/api/conversations.archive";
Response = DialogManagement(Token, Channel, URL);
Return Response;
EndFunction
@@ -439,9 +439,9 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetChannel(Val Token, Val Channel) Export
URL = "https://slack.com/api/conversations.info";
Response = DialogManagement(Token, Channel, URL, "GET");
Return Response;
URL = "https://slack.com/api/conversations.info";
Response = DialogManagement(Token, Channel, URL, "GET");
Return Response;
EndFunction
@@ -456,9 +456,9 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetChannelHistory(Val Token, Val Channel) Export
URL = "https://slack.com/api/conversations.history";
Response = DialogManagement(Token, Channel, URL, "GET");
Return Response;
URL = "https://slack.com/api/conversations.history";
Response = DialogManagement(Token, Channel, URL, "GET");
Return Response;
EndFunction
@@ -474,19 +474,19 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function InviteUsersToChannel(Val Token, Val Channel, Val ArrayOfUsers) Export
URL = "https://slack.com/api/conversations.invite";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/conversations.invite";
Headers = GetAuthorizationHeader(Token);
OPI_TypeConversion.GetCollection(ArrayOfUsers);
ArrayOfUsers = StrJoin(ArrayOfUsers, ",");
OPI_TypeConversion.GetCollection(ArrayOfUsers);
ArrayOfUsers = StrJoin(ArrayOfUsers, ",");
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("users" , ArrayOfUsers, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("users" , ArrayOfUsers, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -502,16 +502,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function KickUserFromChannel(Val Token, Val Channel, Val User) Export
URL = "https://slack.com/api/conversations.kick";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/conversations.kick";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("user" , User, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("user" , User, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -526,9 +526,9 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function JoinChannel(Val Token, Val Channel) Export
URL = "https://slack.com/api/conversations.join";
Response = DialogManagement(Token, Channel, URL);
Return Response;
URL = "https://slack.com/api/conversations.join";
Response = DialogManagement(Token, Channel, URL);
Return Response;
EndFunction
@@ -543,9 +543,9 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function LeaveChannel(Val Token, Val Channel) Export
URL = "https://slack.com/api/conversations.leave";
Response = DialogManagement(Token, Channel, URL);
Return Response;
URL = "https://slack.com/api/conversations.leave";
Response = DialogManagement(Token, Channel, URL);
Return Response;
EndFunction
@@ -561,16 +561,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function SetChannelTopic(Val Token, Val Channel, Val Topic) Export
URL = "https://slack.com/api/conversations.setTopic";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/conversations.setTopic";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("topic" , Topic , "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("topic" , Topic , "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -586,16 +586,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function SetChannelGoal(Val Token, Val Channel, Val Purpose) Export
URL = "https://slack.com/api/conversations.setPurpose";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/conversations.setPurpose";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("purpose", Purpose , "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("purpose", Purpose , "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -611,16 +611,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function RenameChannel(Val Token, Val Channel, Val Name) Export
URL = "https://slack.com/api/conversations.rename";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/conversations.rename";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("name" , Name, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("name" , Name, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -639,18 +639,18 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function OpenDialog(Val Token, Val ArrayOfUsers) Export
URL = "https://slack.com/api/conversations.open";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/conversations.open";
Headers = GetAuthorizationHeader(Token);
OPI_TypeConversion.GetCollection(ArrayOfUsers);
ArrayOfUsers = StrJoin(ArrayOfUsers, ",");
OPI_TypeConversion.GetCollection(ArrayOfUsers);
ArrayOfUsers = StrJoin(ArrayOfUsers, ",");
Parameters = New Structure;
OPI_Tools.AddField("users", ArrayOfUsers, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("users", ArrayOfUsers, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -665,9 +665,9 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function CloseDialog(Val Token, Val Dialog) Export
URL = "https://slack.com/api/conversations.close";
Response = DialogManagement(Token, Dialog, URL);
Return Response;
URL = "https://slack.com/api/conversations.close";
Response = DialogManagement(Token, Dialog, URL);
Return Response;
EndFunction
@@ -687,16 +687,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetFilesList(Val Token, Val Channel = "", Val PageNumber = 1) Export
URL = "https://slack.com/api/files.list";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/files.list";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("page" , PageNumber, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("page" , PageNumber, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -714,44 +714,44 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function UploadFile(Val Token, Val File, Val FileName, Val Title, Val Channel = "") Export
OPI_TypeConversion.GetBinaryData(File);
OPI_TypeConversion.GetLine(FileName);
OPI_TypeConversion.GetLine(Title);
OPI_TypeConversion.GetBinaryData(File);
OPI_TypeConversion.GetLine(FileName);
OPI_TypeConversion.GetLine(Title);
String_ = "String";
Upload_url = "upload_url";
File_id = "file_id";
URL = "https://slack.com/api/files.getUploadURLExternal";
Headers = GetAuthorizationHeader(Token);
Size = File.Size();
String_ = "String";
Upload_url = "upload_url";
File_id = "file_id";
URL = "https://slack.com/api/files.getUploadURLExternal";
Headers = GetAuthorizationHeader(Token);
Size = File.Size();
Parameters = New Structure;
OPI_Tools.AddField("filename", FileName, String_, Parameters);
OPI_Tools.AddField("length" , Size , String_, Parameters);
Parameters = New Structure;
OPI_Tools.AddField("filename", FileName, String_, Parameters);
OPI_Tools.AddField("length" , Size , String_, Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
URL = Response[Upload_url];
Identifier = Response[File_id];
Response = OPI_Tools.Get(URL, Parameters, Headers);
URL = Response[Upload_url];
Identifier = Response[File_id];
If Not ValueIsFilled(URL) Or Not ValueIsFilled(Identifier) Then
Return Response;
EndIf;
If Not ValueIsFilled(URL) Or Not ValueIsFilled(Identifier) Then
Return Response;
EndIf;
Files = New Match;
Files.Insert(FileName, File);
Files = New Match;
Files.Insert(FileName, File);
Response = OPI_Tools.PostMultipart(URL, , Files, , Headers);
URL = "https://slack.com/api/files.completeUploadExternal";
SlackFile = New Structure("id, title", Identifier, Title);
Response = OPI_Tools.PostMultipart(URL, , Files, , Headers);
URL = "https://slack.com/api/files.completeUploadExternal";
SlackFile = New Structure("id, title", Identifier, Title);
Parameters = New Structure;
OPI_Tools.AddField("filename" , FileName, String_, Parameters);
OPI_Tools.AddField("channel_id", Channel , String_, Parameters);
OPI_Tools.AddField("files" , SlackFile, "Array", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("filename" , FileName, String_, Parameters);
OPI_Tools.AddField("channel_id", Channel , String_, Parameters);
OPI_Tools.AddField("files" , SlackFile, "Array", Parameters);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Response = OPI_Tools.Post(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -766,10 +766,10 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetFileData(Val Token, Val FileID) Export
URL = "https://slack.com/api/files.info";
Response = FileManagement(Token, FileID, URL, "GET");
URL = "https://slack.com/api/files.info";
Response = FileManagement(Token, FileID, URL, "GET");
Return Response;
Return Response;
EndFunction
@@ -784,10 +784,10 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function DeleteFile(Val Token, Val FileID) Export
URL = "https://slack.com/api/files.delete";
Response = FileManagement(Token, FileID, URL);
URL = "https://slack.com/api/files.delete";
Response = FileManagement(Token, FileID, URL);
Return Response;
Return Response;
EndFunction
@@ -802,10 +802,10 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function MakeFilePublic(Val Token, Val FileID) Export
URL = "https://slack.com/api/files.sharedPublicURL";
Response = FileManagement(Token, FileID, URL);
URL = "https://slack.com/api/files.sharedPublicURL";
Response = FileManagement(Token, FileID, URL);
Return Response;
Return Response;
EndFunction
@@ -820,10 +820,10 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function MakeFilePrivate(Val Token, Val FileID) Export
URL = "https://slack.com/api/files.revokePublicURL";
Response = FileManagement(Token, FileID, URL);
URL = "https://slack.com/api/files.revokePublicURL";
Response = FileManagement(Token, FileID, URL);
Return Response;
Return Response;
EndFunction
@@ -843,16 +843,16 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetExternalFileList(Val Token, Val Channel = "", Val Cursor = "") Export
URL = "https://slack.com/api/files.remote.list";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/files.remote.list";
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("cursor" , Cursor, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel , "String", Parameters);
OPI_Tools.AddField("cursor" , Cursor, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -867,10 +867,10 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function GetExternalFile(Val Token, Val FileID) Export
URL = "https://slack.com/api/files.remote.info";
Response = ExternalFileManagement(Token, FileID, URL);
URL = "https://slack.com/api/files.remote.info";
Response = ExternalFileManagement(Token, FileID, URL);
Return Response;
Return Response;
EndFunction
@@ -886,19 +886,19 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function AddExternalFile(Val Token, Val URL, Val Title) Export
String_ = "String";
URL = "https://slack.com/api/files.remote.add";
Headers = GetAuthorizationHeader(Token);
UID = String(New UniqueIdentifier());
String_ = "String";
URL = "https://slack.com/api/files.remote.add";
Headers = GetAuthorizationHeader(Token);
UID = String(New UniqueIdentifier());
Parameters = New Structure;
OPI_Tools.AddField("external_url", URL , String_, Parameters);
OPI_Tools.AddField("external_id" , UID , String_, Parameters);
OPI_Tools.AddField("title" , Title , String_, Parameters);
Parameters = New Structure;
OPI_Tools.AddField("external_url", URL , String_, Parameters);
OPI_Tools.AddField("external_id" , UID , String_, Parameters);
OPI_Tools.AddField("title" , Title , String_, Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -914,19 +914,19 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function SendExternalFile(Val Token, Val FileID, Val ChannelArray) Export
URL = "https://slack.com/api/files.remote.share";
Headers = GetAuthorizationHeader(Token);
URL = "https://slack.com/api/files.remote.share";
Headers = GetAuthorizationHeader(Token);
OPI_TypeConversion.GetCollection(ChannelArray);
ChannelArray = StrJoin(ChannelArray, ",");
OPI_TypeConversion.GetCollection(ChannelArray);
ChannelArray = StrJoin(ChannelArray, ",");
Parameters = New Structure;
OPI_Tools.AddField("file" , FileID , "String", Parameters);
OPI_Tools.AddField("channels", ChannelArray , "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("file" , FileID , "String", Parameters);
OPI_Tools.AddField("channels", ChannelArray , "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -941,10 +941,10 @@ EndFunction
// Key-Value Pair - Serialized JSON response from Slack
Function DeleteExternalFile(Val Token, Val FileID) Export
URL = "https://slack.com/api/files.remote.remove";
Response = ExternalFileManagement(Token, FileID, URL);
URL = "https://slack.com/api/files.remote.remove";
Response = ExternalFileManagement(Token, FileID, URL);
Return Response;
Return Response;
EndFunction
@@ -963,14 +963,14 @@ EndFunction
// Key-Value Pair - Image block
Function GenerateImageBlock(Val URL, Val AlternateText = "") Export
String_ = "String";
String_ = "String";
Block = New Match;
OPI_Tools.AddField("type" , "image" , String_, Block);
OPI_Tools.AddField("image_url", URL , String_, Block);
OPI_Tools.AddField("alt_text" , AlternateText , String_, Block);
Block = New Match;
OPI_Tools.AddField("type" , "image" , String_, Block);
OPI_Tools.AddField("image_url", URL , String_, Block);
OPI_Tools.AddField("alt_text" , AlternateText , String_, Block);
Return Block;
Return Block;
EndFunction
@@ -982,73 +982,73 @@ EndFunction
Function GetAuthorizationHeader(Val Token)
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Token);
Headers = New Match;
Headers.Insert("Authorization", "Bearer " + Token);
Return Headers;
Headers = New Match;
Headers.Insert("Authorization", "Bearer " + Token);
Return Headers;
EndFunction
Function DialogManagement(Val Token, Val Channel, Val URL, Val RequestType = "POST")
Headers = GetAuthorizationHeader(Token);
RequestType = inReg(RequestType);
Headers = GetAuthorizationHeader(Token);
RequestType = inReg(RequestType);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("channel", Channel, "String", Parameters);
If RequestType = "POST" Then
Response = OPI_Tools.Post(URL, Parameters, Headers);
Else
Response = OPI_Tools.Get(URL, Parameters, Headers);
EndIf;
If RequestType = "POST" Then
Response = OPI_Tools.Post(URL, Parameters, Headers);
Else
Response = OPI_Tools.Get(URL, Parameters, Headers);
EndIf;
Return Response;
Return Response;
EndFunction
Function FileManagement(Val Token, Val FileID, Val URL, Val RequestType = "POST")
Headers = GetAuthorizationHeader(Token);
RequestType = inReg(RequestType);
Headers = GetAuthorizationHeader(Token);
RequestType = inReg(RequestType);
Parameters = New Structure;
OPI_Tools.AddField("file", FileID , "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("file", FileID , "String", Parameters);
If RequestType = "POST" Then
Response = OPI_Tools.Post(URL, Parameters, Headers);
Else
Response = OPI_Tools.Get(URL, Parameters, Headers);
EndIf;
If RequestType = "POST" Then
Response = OPI_Tools.Post(URL, Parameters, Headers);
Else
Response = OPI_Tools.Get(URL, Parameters, Headers);
EndIf;
Return Response;
Return Response;
EndFunction
Function GeneralDataRetrieval(Val Token, Val URL, Val Cursor)
Headers = GetAuthorizationHeader(Token);
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("cursor", Cursor, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("cursor", Cursor, "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction
Function ExternalFileManagement(Val Token, Val FileID, Val URL)
Headers = GetAuthorizationHeader(Token);
Headers = GetAuthorizationHeader(Token);
Parameters = New Structure;
OPI_Tools.AddField("file", FileID , "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("file", FileID , "String", Parameters);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Response = OPI_Tools.Get(URL, Parameters, Headers);
Return Response;
Return Response;
EndFunction

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="21b89e7a-e792-4a4c-9d01-c630225fe48a">
<name>OPI_Slack</name>
<synonym>
<key>ru</key>
<value>Slack</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_Slack</name>
<synonym>
<key>ru</key>
<value>Slack</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="fe603e76-e34a-40fd-977d-ee3c2dbc6620">
<name>OPI_Telegram</name>
<synonym>
<key>ru</key>
<value>Methodы интеграции with Telegram (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_Telegram</name>
<synonym>
<key>ru</key>
<value>Methodы интеграции with Telegram (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ca6868b2-8987-4ae3-9d97-50a8becc72df">
<name>OPI_Tests</name>
<synonym>
<key></key>
<value>OPI tests</value>
</synonym>
<synonym>
<key>ru</key>
<value>Tests for YaxUnit (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_Tests</name>
<synonym>
<key></key>
<value>OPI tests</value>
</synonym>
<synonym>
<key>ru</key>
<value>Tests for YaxUnit (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e810f1d2-6714-4c85-94b1-c3ce20788e78">
<name>OPI_Tools</name>
<synonym>
<key>ru</key>
<value>OPI tools</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_Tools</name>
<synonym>
<key>ru</key>
<value>OPI tools</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -53,22 +53,22 @@
// String - URL for browser transition
Function GetAuthorizationLink(Parameters = "") Export
Parameters_ = GetStandardParameters(Parameters);
Parameters_ = GetStandardParameters(Parameters);
URLParameters = New Structure;
URLParameters = New Structure;
URLParameters.Insert("response_type" , "code");
URLParameters.Insert("client_id" , Parameters_["client_id"]);
URLParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]);
URLParameters.Insert("scope" , Parameters_["scope"]);
URLParameters.Insert("state" , "state");
URLParameters.Insert("code_challenge" , "challenge");
URLParameters.Insert("code_challenge_method", "plain");
URLParameters.Insert("response_type" , "code");
URLParameters.Insert("client_id" , Parameters_["client_id"]);
URLParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]);
URLParameters.Insert("scope" , Parameters_["scope"]);
URLParameters.Insert("state" , "state");
URLParameters.Insert("code_challenge" , "challenge");
URLParameters.Insert("code_challenge_method", "plain");
URLParameters = OPI_Tools.RequestParametersToString(URLParameters);
Link = "https://twitter.com/i/oauth2/authorize" + URLParameters;
URLParameters = OPI_Tools.RequestParametersToString(URLParameters);
Link = "https://twitter.com/i/oauth2/authorize" + URLParameters;
Return Link;
Return Link;
EndFunction
@@ -83,21 +83,21 @@ EndFunction
// Key-Value Pair - serialized JSON response from Twitter
Function GetToken(Val Code, Val Parameters = "") Export
OPI_TypeConversion.GetLine(Code);
OPI_TypeConversion.GetLine(Code);
Parameters_ = GetStandardParameters(Parameters);
Parameters_ = GetStandardParameters(Parameters);
RequestParameters = New Structure;
RequestParameters.Insert("code" , Code);
RequestParameters.Insert("grant_type" , "authorization_code");
RequestParameters.Insert("client_id" , Parameters_["client_id"]);
RequestParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]);
RequestParameters.Insert("code_verifier", "challenge");
RequestParameters = New Structure;
RequestParameters.Insert("code" , Code);
RequestParameters.Insert("grant_type" , "authorization_code");
RequestParameters.Insert("client_id" , Parameters_["client_id"]);
RequestParameters.Insert("redirect_uri" , Parameters_["redirect_uri"]);
RequestParameters.Insert("code_verifier", "challenge");
Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token"
, RequestParameters, , False);
Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token"
, RequestParameters, , False);
Return Response;
Return Response;
EndFunction
@@ -111,18 +111,18 @@ EndFunction
// Key-Value Pair - serialized JSON response from Twitter
Function RefreshToken(Val Parameters = "") Export
Parameters_ = GetStandardParameters(Parameters);
Refresh = "refresh_token";
Parameters_ = GetStandardParameters(Parameters);
Refresh = "refresh_token";
RequestParameters = New Structure;
RequestParameters.Insert(Refresh , Parameters_[Refresh]);
RequestParameters.Insert("grant_type" , Refresh);
RequestParameters.Insert("client_id" , Parameters_["client_id"]);
RequestParameters = New Structure;
RequestParameters.Insert(Refresh , Parameters_[Refresh]);
RequestParameters.Insert("grant_type" , Refresh);
RequestParameters.Insert("client_id" , Parameters_["client_id"]);
Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token"
, RequestParameters, , False);
Response = OPI_Tools.Post("https://api.twitter.com/2/oauth2/token"
, RequestParameters, , False);
Return Response;
Return Response;
EndFunction
@@ -138,16 +138,16 @@ EndFunction
// HTTPResponse, Arbitrary, BinaryData - Result of reading the JSON response from the server
Function HandleIncomingRequestAfterAuthorization(Request) Export
Code = Request.RequestParameters["code"];
TokenResponse = GetToken(Code);
Code = Request.RequestParameters["code"];
TokenResponse = GetToken(Code);
// BSLLS:CommentedCode-off
// Preferred token storage
// Constants.TwitterRefresh.Уwithтаноinить(TokenResponse["refresh_token"]);
// Constants.TwitterToken.Уwithтаноinить(TokenResponse["access_token"]);
// BSLLS:CommentedCode-on
// BSLLS:CommentedCode-off
// Preferred token storage
// Constants.TwitterRefresh.Уwithтаноinить(TokenResponse["refresh_token"]);
// Constants.TwitterToken.Уwithтаноinить(TokenResponse["access_token"]);
// BSLLS:CommentedCode-on
Return TokenResponse;
Return TokenResponse;
EndFunction
@@ -168,54 +168,54 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Twitter
Function CreateCustomTweet(Val Text = ""
, Val MediaArray = ""
, Val PollOptionsArray = ""
, Val PollDuration = ""
, Val Parameters = "") Export
, Val MediaArray = ""
, Val PollOptionsArray = ""
, Val PollDuration = ""
, Val Parameters = "") Export
OPI_TypeConversion.GetLine(Text);
OPI_TypeConversion.GetLine(PollDuration);
OPI_TypeConversion.GetLine(Text);
OPI_TypeConversion.GetLine(PollDuration);
If ValueIsFilled(MediaArray) Then
OPI_TypeConversion.GetCollection(MediaArray);
EndIf;
If ValueIsFilled(MediaArray) Then
OPI_TypeConversion.GetCollection(MediaArray);
EndIf;
If ValueIsFilled(PollOptionsArray) Then
OPI_TypeConversion.GetCollection(PollOptionsArray);
EndIf;
If ValueIsFilled(PollOptionsArray) Then
OPI_TypeConversion.GetCollection(PollOptionsArray);
EndIf;
Parameters_ = GetStandardParameters(Parameters);
URL = "https://api.twitter.com/2/tweets";
Array = "Array";
Fields = New Match;
Parameters_ = GetStandardParameters(Parameters);
URL = "https://api.twitter.com/2/tweets";
Array = "Array";
Fields = New Match;
If ValueIsFilled(Text) Then
Fields.Insert("text", Text);
EndIf;
If ValueIsFilled(Text) Then
Fields.Insert("text", Text);
EndIf;
If TypeValue(PollOptionsArray) = Type(Array) And ValueIsFilled(PollDuration) Then
If TypeValue(PollOptionsArray) = Type(Array) And ValueIsFilled(PollDuration) Then
PollDuration = Number(PollDuration);
PollDuration = Number(PollDuration);
If PollOptionsArray.Quantity() > 0 Then
If PollOptionsArray.Quantity() > 0 Then
OptionStructure = New Structure("options,duration_minutes", PollOptionsArray, PollDuration);
Fields.Insert("poll", OptionStructure);
OptionStructure = New Structure("options,duration_minutes", PollOptionsArray, PollDuration);
Fields.Insert("poll", OptionStructure);
EndIf;
EndIf;
EndIf;
EndIf;
If TypeValue(MediaArray) = Type(Array) Then
If MediaArray.Quantity() > 0 Then
Fields.Insert("media", New Structure("media_ids", MediaArray));
EndIf;
EndIf;
If TypeValue(MediaArray) = Type(Array) Then
If MediaArray.Quantity() > 0 Then
Fields.Insert("media", New Structure("media_ids", MediaArray));
EndIf;
EndIf;
Authorization = CreateAuthorizationHeaderV2(Parameters_);
Response = OPI_Tools.Post(URL, Fields, Authorization);
Authorization = CreateAuthorizationHeaderV2(Parameters_);
Response = OPI_Tools.Post(URL, Fields, Authorization);
Return Response;
Return Response;
EndFunction
@@ -229,7 +229,7 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Twitter
Function CreateTextTweet(Val Text, Val Parameters = "") Export
Return CreateCustomTweet(Text, , , , Parameters);
Return CreateCustomTweet(Text, , , , Parameters);
EndFunction
// Create image tweet
@@ -244,8 +244,8 @@ EndFunction
// Key-Value Pair - serialized JSON response from Twitter
Function Create image tweet(Val Text, Val ImageArray, Val Parameters = "") Export
MediaArray = Upload attachments array(ImageArray, "tweet_image", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters);
MediaArray = Upload attachments array(ImageArray, "tweet_image", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters);
EndFunction
@@ -261,8 +261,8 @@ EndFunction
// Key-Value Pair - serialized JSON response from Twitter
Function CreateGifTweet(Val Text, Val Gif array, Val Parameters = "") Export
MediaArray = Upload attachments array(Gif array, "tweet_gif", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters);
MediaArray = Upload attachments array(Gif array, "tweet_gif", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters);
EndFunction
@@ -278,8 +278,8 @@ EndFunction
// Key-Value Pair - serialized JSON response from Twitter
Function CreateVideoTweet(Val Text, Val Video array, Val Parameters = "") Export
MediaArray = Upload attachments array(Video array, "tweet_video", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters);
MediaArray = Upload attachments array(Video array, "tweet_video", Parameters);
Return CreateCustomTweet(Text, MediaArray, , , Parameters);
EndFunction
@@ -295,7 +295,7 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Twitter
Function CreatePollTweet(Val Text, Val OptionArray, Val Duration, Val Parameters = "") Export
Return CreateCustomTweet(Text, , OptionArray, Duration, Parameters);
Return CreateCustomTweet(Text, , OptionArray, Duration, Parameters);
EndFunction
// Upload attachments array !NOCLI
@@ -310,33 +310,33 @@ EndFunction
// Array Of String - Media ID array
Function Upload attachments array(Val ArrayOfFiles, Val AttachmentsType, Val Parameters = "") Export
OPI_TypeConversion.GetLine(AttachmentsType);
OPI_TypeConversion.GetCollection(ArrayOfFiles);
OPI_TypeConversion.GetLine(AttachmentsType);
OPI_TypeConversion.GetCollection(ArrayOfFiles);
MediaArray = New Array;
Parameters_ = GetStandardParameters(Parameters);
MIS = "media_id_string";
MediaArray = New Array;
Parameters_ = GetStandardParameters(Parameters);
MIS = "media_id_string";
If ValueIsFilled(ArrayOfFiles) Then
If ValueIsFilled(ArrayOfFiles) Then
For Each SendingFile In ArrayOfFiles Do
For Each SendingFile In ArrayOfFiles Do
OPI_TypeConversion.GetBinaryData(SendingFile);
OPI_TypeConversion.GetBinaryData(SendingFile);
Response = UploadMediaFile(SendingFile, AttachmentsType, Parameters_);
MediaID = Response[MIS];
Response = UploadMediaFile(SendingFile, AttachmentsType, Parameters_);
MediaID = Response[MIS];
If Not ValueIsFilled(MediaID) Then
Return Response;
EndIf;
If Not ValueIsFilled(MediaID) Then
Return Response;
EndIf;
MediaArray.Add(MediaID);
MediaArray.Add(MediaID);
EndDo;
EndDo;
EndIf;
EndIf;
Return MediaArray;
Return MediaArray;
EndFunction
@@ -348,334 +348,334 @@ EndFunction
Function UploadMediaFile(Val File, Val Type, Val Parameters)
OPI_TypeConversion.GetBinaryData(File);
OPI_TypeConversion.GetBinaryData(File);
RequestType = "POST";
Parameters_ = GetStandardParameters(Parameters);
URL = "https://upload.twitter.com/1.1/media/upload.json";
RequestType = "POST";
Parameters_ = GetStandardParameters(Parameters);
URL = "https://upload.twitter.com/1.1/media/upload.json";
If Type = "tweet_image" Then
If Type = "tweet_image" Then
Fields = New Structure;
Fields.Insert("media_data" , Base64String(File));
Fields.Insert("media_category", Type);
Fields = New Structure;
Fields.Insert("media_data" , Base64String(File));
Fields.Insert("media_category", Type);
Authorization = CreateAuthorizationHeaderV1(Parameters_, Fields, RequestType, URL);
Response = OPI_Tools.Post(URL, Fields, Authorization, False);
Authorization = CreateAuthorizationHeaderV1(Parameters_, Fields, RequestType, URL);
Response = OPI_Tools.Post(URL, Fields, Authorization, False);
Else
Else
Response = UploadMediaInParts(File, Type, RequestType, URL, Parameters_);
Response = UploadMediaInParts(File, Type, RequestType, URL, Parameters_);
EndIf;
EndIf;
Return Response;
Return Response;
EndFunction
Function UploadMediaInParts(Val File, Val Type, Val RequestType, Val URL, Parameters)
Unit = 1024;
Quantity = 4;
MediaKey = "media_key";
MIS = "media_id_string";
Command = "command";
Size = File.Size();
Unit = 1024;
Quantity = 4;
MediaKey = "media_key";
MIS = "media_id_string";
Command = "command";
Size = File.Size();
MIMETypeMapping = New Match;
MIMETypeMapping.Insert("tweet_image", "image/jpeg");
MIMETypeMapping.Insert("tweet_video", "video/mp4");
MIMETypeMapping.Insert("tweet_gif" , "image/gif");
MIMETypeMapping = New Match;
MIMETypeMapping.Insert("tweet_image", "image/jpeg");
MIMETypeMapping.Insert("tweet_video", "video/mp4");
MIMETypeMapping.Insert("tweet_gif" , "image/gif");
ChunkSize = Quantity * Unit * Unit;
ArrayReading = SplitBinaryData(File, ChunkSize);
ChunkSize = Quantity * Unit * Unit;
ArrayReading = SplitBinaryData(File, ChunkSize);
Fields = New Structure;
Fields.Insert(Command , "INIT");
Fields.Insert("total_bytes" , OPI_Tools.NumberToString(Size));
Fields.Insert("media_type" , MIMETypeMapping.Get(Type));
Fields.Insert("media_category" , Type);
Fields = New Structure;
Fields.Insert(Command , "INIT");
Fields.Insert("total_bytes" , OPI_Tools.NumberToString(Size));
Fields.Insert("media_type" , MIMETypeMapping.Get(Type));
Fields.Insert("media_category" , Type);
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, RequestType, URL);
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, RequestType, URL);
InitializationResponse = OPI_Tools.Post(URL, Fields, Authorization, False);
InitializationKey = InitializationResponse[MediaKey];
InitializationID = InitializationResponse[MIS];
InitializationResponse = OPI_Tools.Post(URL, Fields, Authorization, False);
InitializationKey = InitializationResponse[MediaKey];
InitializationID = InitializationResponse[MIS];
If Not ValueIsFilled(InitializationKey) Or Not ValueIsFilled(InitializationID) Then
Return InitializationResponse;
EndIf;
If Not ValueIsFilled(InitializationKey) Or Not ValueIsFilled(InitializationID) Then
Return InitializationResponse;
EndIf;
Counter = 0;
Counter = 0;
For Each Part In ArrayReading Do
For Each Part In ArrayReading Do
Fields = New Structure;
Fields.Insert(Command , "APPEND");
Fields.Insert("media_key" , InitializationKey);
Fields.Insert("segment_index" , OPI_Tools.NumberToString(Counter));
Fields.Insert("media" , Part);
Fields = New Structure;
Fields.Insert(Command , "APPEND");
Fields.Insert("media_key" , InitializationKey);
Fields.Insert("segment_index" , OPI_Tools.NumberToString(Counter));
Fields.Insert("media" , Part);
Authorization = CreateAuthorizationHeaderV1(Parameters, New Structure, RequestType, URL);
Authorization = CreateAuthorizationHeaderV1(Parameters, New Structure, RequestType, URL);
OPI_Tools.PostMultipart(URL, Fields, , , Authorization);
OPI_Tools.PostMultipart(URL, Fields, , , Authorization);
Counter = Counter + 1;
Counter = Counter + 1;
EndDo;
EndDo;
Fields = New Structure;
Fields.Insert(Command , "FINALIZE");
Fields.Insert("media_id", InitializationID);
Fields = New Structure;
Fields.Insert(Command , "FINALIZE");
Fields.Insert("media_id", InitializationID);
ProcessingStatus = GetProcessingStatus(Parameters, Fields, URL);
ProcessingStatus = GetProcessingStatus(Parameters, Fields, URL);
If Not TypeValue(ProcessingStatus) = Type("String") Then
Return ProcessingStatus;
EndIf;
If Not TypeValue(ProcessingStatus) = Type("String") Then
Return ProcessingStatus;
EndIf;
Response = WaitForProcessingCompletion(ProcessingStatus, InitializationID, URL, Parameters);
Response = WaitForProcessingCompletion(ProcessingStatus, InitializationID, URL, Parameters);
Return Response;
Return Response;
EndFunction
Function WaitForProcessingCompletion(Val ProcessingStatus, Val InitializationID, Val URL, Val Parameters)
ProcessingInfo = "processing_info";
Command = "command";
Fields = New Structure;
ProcessingInfo = "processing_info";
Command = "command";
Fields = New Structure;
Fields.Insert(Command , "STATUS");
Fields.Insert("media_id", InitializationID);
Fields.Insert(Command , "STATUS");
Fields.Insert("media_id", InitializationID);
WHile String(ProcessingStatus) = "pending" Or String(ProcessingStatus) = "in_progress" Do
WHile String(ProcessingStatus) = "pending" Or String(ProcessingStatus) = "in_progress" Do
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "GET", URL);
Response = OPI_Tools.Get(URL, Fields, Authorization);
Information = Response[ProcessingInfo];
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "GET", URL);
Response = OPI_Tools.Get(URL, Fields, Authorization);
Information = Response[ProcessingInfo];
If Not ValueIsFilled(Information) Then
Return Response;
EndIf;
If Not ValueIsFilled(Information) Then
Return Response;
EndIf;
ProcessingStatus = Information["state"];
ProcessingStatus = Information["state"];
If Not ValueIsFilled(ProcessingStatus) Then
Return Response;
EndIf;
If Not ValueIsFilled(ProcessingStatus) Then
Return Response;
EndIf;
EndDo;
EndDo;
If ProcessingStatus = "failed" Then
Raise "Twitter could not process the video you uploaded";
EndIf;
If ProcessingStatus = "failed" Then
Raise "Twitter could not process the video you uploaded";
EndIf;
Return Response;
Return Response;
EndFunction
Function GetStandardParameters(Val Parameters = "")
// Зdеwithь withобрано опреdеление data, необхоdимых for work.
// For Twitter this dоinольно зtoчительный toбор, which is due to the presence of two at once API,
// toоторые, при thisм, withозdаны не for разныз заdач, но проwithто яinляютwithя inерwithиями dруг dруга.
// Аtoтуальной inерwithией API яinляетwithя v2 и оto требует получения inременных тоtoеноin. Notwithмотря to то,
// that Twitter insists on using this latest version, they somehow managed not to transfer
// file upload mechanism and some others from the old version - v1.1. Therefore, something needs to be done
// to inерwithии 1.1, and something on 2: up to the point that they removed the ability to post tweets from v1.1,
// but only through it you can add a picture to the tweet. At the same time, their authentication methods and tokens are different
// Зdеwithь withобрано опреdеление data, необхоdимых for work.
// For Twitter this dоinольно зtoчительный toбор, which is due to the presence of two at once API,
// toоторые, при thisм, withозdаны не for разныз заdач, но проwithто яinляютwithя inерwithиями dруг dруга.
// Аtoтуальной inерwithией API яinляетwithя v2 и оto требует получения inременных тоtoеноin. Notwithмотря to то,
// that Twitter insists on using this latest version, they somehow managed not to transfer
// file upload mechanism and some others from the old version - v1.1. Therefore, something needs to be done
// to inерwithии 1.1, and something on 2: up to the point that they removed the ability to post tweets from v1.1,
// but only through it you can add a picture to the tweet. At the same time, their authentication methods and tokens are different
// Мироinая гигоtoорпорация Andлоto Маwithtoа, towithтати, toпомиtoю ;)
// Мироinая гигоtoорпорация Andлоto Маwithtoа, towithтати, toпомиtoю ;)
// P.S Далее чаwithто упомиtoетwithя "withтраница towithтроеto Twitter Developer" - this
// https://developer.twitter.com/en/portal/dashboard и inыбор toонtoретного проеtoта from withпиwithtoа (зtoчеto c toлючем)
// P.S Далее чаwithто упомиtoетwithя "withтраница towithтроеto Twitter Developer" - this
// https://developer.twitter.com/en/portal/dashboard и inыбор toонtoретного проеtoта from withпиwithtoа (зtoчеto c toлючем)
Parameters_ = New Match;
Permissions = "tweet.read tweet.write tweet.moderate.write users.read "
+ "follows.read follows.write offline.access space.read mute.read "
+ "mute.write like.read like.write list.read list.write block.read "
+ "block.write bookmark.read bookmark.write";
Parameters_ = New Match;
Permissions = "tweet.read tweet.write tweet.moderate.write users.read "
+ "follows.read follows.write offline.access space.read mute.read "
+ "mute.write like.read like.write list.read list.write block.read "
+ "block.write bookmark.read bookmark.write";
// Data for API v2
// Data for API v2
// redirect_uri - URL of your http service (or other request handler) for authorization
// scope - a set of permissions for the received key. Can be any, but offline.access is mandatory
// client_id - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer
// client_secret - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer
// access_token - GetAuthorizationLink() -> Браузер -> code приdет to redirect_uri -> GetToken(code)
// refresh_token - Comes together with access_token and is used to refresh it (access_token lifetime - 2 ч)
// Обноinление проиwithхоdит methodом RefreshToken with ноinыми access_token и refresh_token.
// For the next update, you need to use a new refresh_token, so hardcode
// не получитwithя (access_token тоже не получитwithя)
// redirect_uri - URL of your http service (or other request handler) for authorization
// scope - a set of permissions for the received key. Can be any, but offline.access is mandatory
// client_id - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer
// client_secret - From OAuth 2.0 Client ID and Client Secret settings page of Twitter Developer
// access_token - GetAuthorizationLink() -> Браузер -> code приdет to redirect_uri -> GetToken(code)
// refresh_token - Comes together with access_token and is used to refresh it (access_token lifetime - 2 ч)
// Обноinление проиwithхоdит methodом RefreshToken with ноinыми access_token и refresh_token.
// For the next update, you need to use a new refresh_token, so hardcode
// не получитwithя (access_token тоже не получитwithя)
// |--> RefreshToken() ->|access_token --> Andwithпользуетwithя in т-нии 2-х чаwithоin for запроwithоin
// | |refresh_token --|
// |--------[after 2 hrs.]-------------------|
// |--> RefreshToken() ->|access_token --> Andwithпользуетwithя in т-нии 2-х чаwithоin for запроwithоin
// | |refresh_token --|
// |--------[after 2 hrs.]-------------------|
// Data for API v1.1
// Data for API v1.1
// oauth_token - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer
// oauth_token_secret - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer
// oauth_consumer_key - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer
// oauth_consumer_secret - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer
// oauth_token - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer
// oauth_token_secret - From Authentication Tokens -> Access Token and Secret settings page of Twitter Developer
// oauth_consumer_key - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer
// oauth_consumer_secret - From Consumer Keys -> Access Token and Secret settings page of Twitter Developer
// These tokens do not need to be updated
// These tokens do not need to be updated
Parameters_.Insert("redirect_uri" , "");
Parameters_.Insert("scope" , Permissions);
Parameters_.Insert("client_id" , "");
Parameters_.Insert("client_secret" , "");
Parameters_.Insert("access_token" , ""); // Should be something like Constants.TwitterToken.Get()
Parameters_.Insert("refresh_token" , ""); // Should be something like Constants.TwitterRefresh.Get()
Parameters_.Insert("oauth_token" , "");
Parameters_.Insert("oauth_token_secret" , "");
Parameters_.Insert("oauth_consumer_key" , "");
Parameters_.Insert("oauth_consumer_secret", "");
Parameters_.Insert("redirect_uri" , "");
Parameters_.Insert("scope" , Permissions);
Parameters_.Insert("client_id" , "");
Parameters_.Insert("client_secret" , "");
Parameters_.Insert("access_token" , ""); // Should be something like Constants.TwitterToken.Get()
Parameters_.Insert("refresh_token" , ""); // Should be something like Constants.TwitterRefresh.Get()
Parameters_.Insert("oauth_token" , "");
Parameters_.Insert("oauth_token_secret" , "");
Parameters_.Insert("oauth_consumer_key" , "");
Parameters_.Insert("oauth_consumer_secret", "");
OPI_TypeConversion.GetCollection(Parameters);
OPI_TypeConversion.GetCollection(Parameters);
If TypeValue(Parameters) = Type("Structure") Or TypeValue(Parameters) = Type("Match") Then
For Each PassedParameter In Parameters Do
Parameters_.Insert(PassedParameter.Key, OPI_Tools.NumberToString(PassedParameter.Value));
EndDo;
EndIf;
If TypeValue(Parameters) = Type("Structure") Or TypeValue(Parameters) = Type("Match") Then
For Each PassedParameter In Parameters Do
Parameters_.Insert(PassedParameter.Key, OPI_Tools.NumberToString(PassedParameter.Value));
EndDo;
EndIf;
Return Parameters_;
Return Parameters_;
EndFunction
Function CreateAuthorizationHeaderV1(Val Parameters, Val Fields, Val RequestType, Val URL)
CurrentDate = OPI_Tools.GetCurrentDate();
AuthorizationHeader = "";
HashingMethod = "HMAC-SHA1";
APIVersion = "1.0";
SignatureString = "";
Signature = "";
OCK = "oauth_consumer_key";
OTK = "oauth_token";
CurrentUNIXDate = OPI_Tools.UNIXTime(CurrentDate);
CurrentUNIXDate = OPI_Tools.NumberToString(CurrentUNIXDate);
ParametersTable = New ValueTable;
ParametersTable.Columns.Add("Key");
ParametersTable.Columns.Add("Value");
CurrentDate = OPI_Tools.GetCurrentDate();
AuthorizationHeader = "";
HashingMethod = "HMAC-SHA1";
APIVersion = "1.0";
SignatureString = "";
Signature = "";
OCK = "oauth_consumer_key";
OTK = "oauth_token";
CurrentUNIXDate = OPI_Tools.UNIXTime(CurrentDate);
CurrentUNIXDate = OPI_Tools.NumberToString(CurrentUNIXDate);
ParametersTable = New ValueTable;
ParametersTable.Columns.Add("Key");
ParametersTable.Columns.Add("Value");
For Each Field In Fields Do
For Each Field In Fields Do
NewLine = ParametersTable.Add();
NewLine.Key = Field.Key;
NewLine.Value = Field.Value;
NewLine = ParametersTable.Add();
NewLine.Key = Field.Key;
NewLine.Value = Field.Value;
EndDo;
EndDo;
NewLine = ParametersTable.Add();
NewLine.Key = OCK;
NewLine.Value = Parameters[OCK];
NewLine = ParametersTable.Add();
NewLine.Key = OCK;
NewLine.Value = Parameters[OCK];
NewLine = ParametersTable.Add();
NewLine.Key = OTK;
NewLine.Value = Parameters[OTK];
NewLine = ParametersTable.Add();
NewLine.Key = OTK;
NewLine.Value = Parameters[OTK];
NewLine = ParametersTable.Add();
NewLine.Key = "oauth_version";
NewLine.Value = APIVersion;
NewLine = ParametersTable.Add();
NewLine.Key = "oauth_version";
NewLine.Value = APIVersion;
NewLine = ParametersTable.Add();
NewLine.Key = "oauth_signature_method";
NewLine.Value = HashingMethod;
NewLine = ParametersTable.Add();
NewLine.Key = "oauth_signature_method";
NewLine.Value = HashingMethod;
NewLine = ParametersTable.Add();
NewLine.Key = "oauth_timestamp";
NewLine.Value = CurrentUNIXDate;
NewLine = ParametersTable.Add();
NewLine.Key = "oauth_timestamp";
NewLine.Value = CurrentUNIXDate;
NewLine = ParametersTable.Add();
NewLine.Key = "oauth_nonce";
NewLine.Value = CurrentUNIXDate;
NewLine = ParametersTable.Add();
NewLine.Key = "oauth_nonce";
NewLine.Value = CurrentUNIXDate;
For Each TableRow In ParametersTable Do
For Each TableRow In ParametersTable Do
TableRow.Key = EncodeString(TableRow.Key, StringEncodingMethod.URLencoding);
TableRow.Value = EncodeString(TableRow.Value, StringEncodingMethod.URLencoding);
TableRow.Key = EncodeString(TableRow.Key, StringEncodingMethod.URLencoding);
TableRow.Value = EncodeString(TableRow.Value, StringEncodingMethod.URLencoding);
EndDo;
EndDo;
ParametersTable.Sort("Key");
ParametersTable.Sort("Key");
For Each TableRow In ParametersTable Do
For Each TableRow In ParametersTable Do
SignatureString = SignatureString
+ TableRow.Key
+ "="
+ TableRow.Value
+ "&";
SignatureString = SignatureString
+ TableRow.Key
+ "="
+ TableRow.Value
+ "&";
EndDo;
EndDo;
SignatureString = Left(SignatureString, StrLength(SignatureString) - 1);
SignatureString = inReg(RequestType)
+ "&"
+ EncodeString(URL, StringEncodingMethod.URLencoding)
+ "&"
+ EncodeString(SignatureString, StringEncodingMethod.URLencoding);
SignatureString = Left(SignatureString, StrLength(SignatureString) - 1);
SignatureString = inReg(RequestType)
+ "&"
+ EncodeString(URL, StringEncodingMethod.URLencoding)
+ "&"
+ EncodeString(SignatureString, StringEncodingMethod.URLencoding);
Signature = EncodeString(Parameters["oauth_consumer_secret"], StringEncodingMethod.URLencoding)
+ "&"
+ EncodeString(Parameters["oauth_token_secret"], StringEncodingMethod.URLencoding);
Signature = EncodeString(Parameters["oauth_consumer_secret"], StringEncodingMethod.URLencoding)
+ "&"
+ EncodeString(Parameters["oauth_token_secret"], StringEncodingMethod.URLencoding);
Signature = OPI_Cryptography.HMAC(GetBinaryDataFromString(Signature)
, GetBinaryDataFromString(SignatureString)
, HashFunction.SHA1
, 64);
Signature = OPI_Cryptography.HMAC(GetBinaryDataFromString(Signature)
, GetBinaryDataFromString(SignatureString)
, HashFunction.SHA1
, 64);
Signature = EncodeString(Base64String(Signature), StringEncodingMethod.URLencoding);
Signature = EncodeString(Base64String(Signature), StringEncodingMethod.URLencoding);
Delimiter = """,";
AuthorizationHeader = AuthorizationHeader
+ "OAuth "
+ "oauth_consumer_key=""" + Parameters[OCK] + Delimiter
+ "oauth_token=""" + Parameters[OTK] + Delimiter
+ "oauth_signature_method=""" + HashingMethod + Delimiter
+ "oauth_timestamp=""" + CurrentUNIXDate + Delimiter
+ "oauth_nonce=""" + CurrentUNIXDate + Delimiter
+ "oauth_version=""" + APIVersion + Delimiter
+ "oauth_signature=""" + Signature;
Delimiter = """,";
AuthorizationHeader = AuthorizationHeader
+ "OAuth "
+ "oauth_consumer_key=""" + Parameters[OCK] + Delimiter
+ "oauth_token=""" + Parameters[OTK] + Delimiter
+ "oauth_signature_method=""" + HashingMethod + Delimiter
+ "oauth_timestamp=""" + CurrentUNIXDate + Delimiter
+ "oauth_nonce=""" + CurrentUNIXDate + Delimiter
+ "oauth_version=""" + APIVersion + Delimiter
+ "oauth_signature=""" + Signature;
HeaderMapping = New Match;
HeaderMapping.Insert("authorization", AuthorizationHeader);
HeaderMapping = New Match;
HeaderMapping.Insert("authorization", AuthorizationHeader);
Return HeaderMapping;
Return HeaderMapping;
EndFunction
Function CreateAuthorizationHeaderV2(Val Parameters)
ReturnMapping = New Match;
ReturnMapping.Insert("Authorization", "Bearer " + Parameters["access_token"]);
ReturnMapping = New Match;
ReturnMapping.Insert("Authorization", "Bearer " + Parameters["access_token"]);
Return ReturnMapping;
Return ReturnMapping;
EndFunction
Function GetProcessingStatus(Val Parameters, Val Fields, Val URL)
ProcessingInfo = "processing_info";
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "POST", URL);
ProcessingInfo = "processing_info";
Authorization = CreateAuthorizationHeaderV1(Parameters, Fields, "POST", URL);
Response = OPI_Tools.Post(URL, Fields, Authorization, False);
Information = Response[ProcessingInfo];
Response = OPI_Tools.Post(URL, Fields, Authorization, False);
Information = Response[ProcessingInfo];
If Not ValueIsFilled(Information) Then
Return Response;
EndIf;
If Not ValueIsFilled(Information) Then
Return Response;
EndIf;
ProcessingStatus = Information["state"];
ProcessingStatus = Information["state"];
If Not ValueIsFilled(ProcessingStatus) Then
Return Response;
Else
Return ProcessingStatus;
EndIf;
If Not ValueIsFilled(ProcessingStatus) Then
Return Response;
Else
Return ProcessingStatus;
EndIf;
EndFunction

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="748f90c6-8251-482b-a249-b0372df0c72e">
<name>OPI_Twitter</name>
<synonym>
<key>ru</key>
<value>Methodы work with Twitter (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_Twitter</name>
<synonym>
<key>ru</key>
<value>Methodы work with Twitter (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -34,266 +34,266 @@
Procedure GetBinaryData(Value) Export
If Value = Undefined Then
Return;
EndIf;
If Value = Undefined Then
Return;
EndIf;
Try
Try
If TypeValue(Value) = Type("BinaryData") Then
Return;
Else
If TypeValue(Value) = Type("BinaryData") Then
Return;
Else
File = New File(Value);
File = New File(Value);
If File.Exists() Then
Value = New BinaryData(Value);
If File.Exists() Then
Value = New BinaryData(Value);
ElsIf StrFind(Value, "//") Then
ElsIf StrFind(Value, "//") Then
Value = OPI_Tools.Get(Value);
Value = OPI_Tools.Get(Value);
Else
Else
Value = Base64Value(Value);
Value = Base64Value(Value);
EndIf;
EndIf;
EndIf;
EndIf;
Except
Raise "Error getting binary data from parameter: " + ErrorDescription();
EndTry;
Except
Raise "Error getting binary data from parameter: " + ErrorDescription();
EndTry;
EndProcedure
Procedure GetBinaryOrStream(Value) Export
If Value = Undefined Then
Return;
EndIf;
If Value = Undefined Then
Return;
EndIf;
If TypeValue(Value) <> Type("String") Then
GetBinaryData(Value);
Return;
EndIf;
If TypeValue(Value) <> Type("String") Then
GetBinaryData(Value);
Return;
EndIf;
File = New File(Value);
File = New File(Value);
If File.Exists() Then
Value = New FileStream(Value, FileOpenMode.Open);
Else
GetBinaryData(Value);
EndIf;
If File.Exists() Then
Value = New FileStream(Value, FileOpenMode.Open);
Else
GetBinaryData(Value);
EndIf;
EndProcedure
Procedure GetCollection(Value) Export
If Value = Undefined Then
Return;
EndIf;
If Value = Undefined Then
Return;
EndIf;
Try
Try
InitialValue = Value;
InitialValue = Value;
If ThisIsCollection(Value) Then
Return;
Else
If ThisIsCollection(Value) Then
Return;
Else
If TypeValue(Value) = Type("BinaryData") Then
Value = GetStringFromBinaryData(Value);
Else
Value = OPI_Tools.NumberToString(Value);
EndIf;
If TypeValue(Value) = Type("BinaryData") Then
Value = GetStringFromBinaryData(Value);
Else
Value = OPI_Tools.NumberToString(Value);
EndIf;
File = New File(Value);
ReadingJSON = New ReadingJSON;
File = New File(Value);
ReadingJSON = New ReadingJSON;
If File.Exists() Then
If File.Exists() Then
ReadingJSON.OpenFile(Value);
ReadingJSON.OpenFile(Value);
ElsIf StringStartsWith(nReg(Value), "http") Then
ElsIf StringStartsWith(nReg(Value), "http") Then
AndVF = GetTempFileName();
CopyFile(Value, AndVF);
ReadingJSON.OpenFile(AndVF);
ReadingJSON.Read();
AndVF = GetTempFileName();
CopyFile(Value, AndVF);
ReadingJSON.OpenFile(AndVF);
ReadingJSON.Read();
DeleteFiles(AndVF);
DeleteFiles(AndVF);
Else
Else
ReadingJSON.SetString(ShortLP(Value));
ReadingJSON.SetString(ShortLP(Value));
EndIf;
EndIf;
Value = ReadJSON(ReadingJSON, True, Undefined, JSONDateFormat.ISO);
ReadingJSON.Close();
Value = ReadJSON(ReadingJSON, True, Undefined, JSONDateFormat.ISO);
ReadingJSON.Close();
If (Not ThisIsCollection(Value)) Or Not ValueIsFilled(Value) Then
If (Not ThisIsCollection(Value)) Or Not ValueIsFilled(Value) Then
Value = InitialValue;
GetArray(Value);
Value = InitialValue;
GetArray(Value);
EndIf;
EndIf;
EndIf;
EndIf;
Except
Except
Value = InitialValue;
GetArray(Value);
Value = InitialValue;
GetArray(Value);
EndTry;
EndTry;
EndProcedure
Procedure GetArray(Value) Export
If TypeValue(Value) = Type("Array") Then
Return;
EndIf;
If TypeValue(Value) = Type("Array") Then
Return;
EndIf;
If TypeValue(Value) = Type("String")
And StringStartsWith(Value, "[")
And StrEndsWith(Value, "]") Then
If TypeValue(Value) = Type("String")
And StringStartsWith(Value, "[")
And StrEndsWith(Value, "]") Then
CommaInQuotes = "','";
CommaInQuotes = "','";
Value = StringReplace(Value, "['" , "");
Value = StringReplace(Value, "']" , "");
Value = StringReplace(Value, "', '" , CommaInQuotes);
Value = StringReplace(Value, "' , '", CommaInQuotes);
Value = StringReplace(Value, "' ,'" , CommaInQuotes);
Value = StringReplace(Value, "['" , "");
Value = StringReplace(Value, "']" , "");
Value = StringReplace(Value, "', '" , CommaInQuotes);
Value = StringReplace(Value, "' , '", CommaInQuotes);
Value = StringReplace(Value, "' ,'" , CommaInQuotes);
Value = StrSplit(Value, CommaInQuotes, False);
Value = StrSplit(Value, CommaInQuotes, False);
For N = 0 For Value.WithinBoundary() Do
Value[N] = ShortLP(Value[N]);
EndDo;
For N = 0 For Value.WithinBoundary() Do
Value[N] = ShortLP(Value[N]);
EndDo;
Else
Else
If TypeValue(Value) = Type("Number") Then
Value = OPI_Tools.NumberToString(Value);
EndIf;
If TypeValue(Value) = Type("Number") Then
Value = OPI_Tools.NumberToString(Value);
EndIf;
OPI_Tools.ValueToArray(Value);
OPI_Tools.ValueToArray(Value);
EndIf;
EndIf;
EndProcedure
Procedure GetBoolean(Value) Export
If Value = Undefined Then
Return;
EndIf;
If Value = Undefined Then
Return;
EndIf;
Try
Try
If TypeValue(Value) = Type("Boolean") Then
Return;
Else
Value = Boolean(Value);
EndIf;
If TypeValue(Value) = Type("Boolean") Then
Return;
Else
Value = Boolean(Value);
EndIf;
Except
Raise "Error getting boolean data from parameter";
EndTry;
Except
Raise "Error getting boolean data from parameter";
EndTry;
EndProcedure
Procedure GetLine(Value, Val FromSource = False) Export
If Value = Undefined Then
Return;
EndIf;
If Value = Undefined Then
Return;
EndIf;
Try
Try
If ThisIsSymbolic(Value) Then
If ThisIsSymbolic(Value) Then
If Not FromSource Then
Value = OPI_Tools.NumberToString(Value);
Return;
EndIf;
If Not FromSource Then
Value = OPI_Tools.NumberToString(Value);
Return;
EndIf;
Value = OPI_Tools.NumberToString(Value);
File = New File(Value);
Value = OPI_Tools.NumberToString(Value);
File = New File(Value);
If File.Exists() Then
If File.Exists() Then
ReadingText = New ReadingText(Value);
Value = ReadingText.Read();
ReadingText.Close();
ReadingText = New ReadingText(Value);
Value = ReadingText.Read();
ReadingText.Close();
ElsIf StringStartsWith(nReg(Value), "http") Then
ElsIf StringStartsWith(nReg(Value), "http") Then
AndVF = GetTempFileName();
CopyFile(Value, AndVF);
AndVF = GetTempFileName();
CopyFile(Value, AndVF);
ReadingText = New ReadingText(AndVF);
Value = ReadingText.Read();
ReadingText.Close();
ReadingText = New ReadingText(AndVF);
Value = ReadingText.Read();
ReadingText.Close();
DeleteFiles(AndVF);
DeleteFiles(AndVF);
Else
Else
Return;
Return;
EndIf;
EndIf;
ElsIf TypeValue(Value) = Type("BinaryData") Then
ElsIf TypeValue(Value) = Type("BinaryData") Then
Value = GetStringFromBinaryData(Value);
Value = GetStringFromBinaryData(Value);
ElsIf ThisIsCollection(Value) Then
ElsIf ThisIsCollection(Value) Then
Value = OPI_Tools.JSONString(Value);
Value = OPI_Tools.JSONString(Value);
Else
Return;
EndIf;
Else
Return;
EndIf;
Except
Value = String(Value);
Return;
EndTry;
Except
Value = String(Value);
Return;
EndTry;
EndProcedure
Procedure GetDate(Value) Export
If Value = Undefined Then
Return;
EndIf;
If Value = Undefined Then
Return;
EndIf;
Date = "Date";
Date = "Date";
Try
Try
If TypeValue(Value) = Type(Date) Then
Return;
Else
Value = XMLValue(Type(Date), Value);
EndIf;
If TypeValue(Value) = Type(Date) Then
Return;
Else
Value = XMLValue(Type(Date), Value);
EndIf;
Except
OOD = New TypeDescription(Date);
Value = OOD.ConvertValue(Value);
EndTry;
Except
OOD = New TypeDescription(Date);
Value = OOD.ConvertValue(Value);
EndTry;
EndProcedure
Procedure GetNumber(Value) Export
TypeDescription = New TypeDescription("Number");
Value = TypeDescription.ConvertValue(Value);
TypeDescription = New TypeDescription("Number");
Value = TypeDescription.ConvertValue(Value);
EndProcedure
@@ -303,17 +303,17 @@ EndProcedure
Function ThisIsCollection(Val Value)
Return TypeValue(Value) = Type("Array")
Or TypeValue(Value) = Type("Structure")
Or TypeValue(Value) = Type("Match");
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");
Return TypeValue(Value) = Type("String")
Or TypeValue(Value) = Type("Number")
Or TypeValue(Value) = Type("Date");
EndFunction

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="e15aee63-1565-4f37-ba54-4d4e79723fc5">
<name>OPI_TypeConversion</name>
<synonym>
<key>ru</key>
<value>Преобразоinание typeоin (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_TypeConversion</name>
<synonym>
<key>ru</key>
<value>Преобразоinание typeоin (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1ab0a76a-246d-4037-97c3-212d680aa589">
<name>OPI_VK</name>
<synonym>
<key>ru</key>
<value>Methodы интеграции with VK (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_VK</name>
<synonym>
<key>ru</key>
<value>Methodы интеграции with VK (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -50,11 +50,11 @@
// Key-Value Pair - serialized JSON response from Viber
Function SetWebhook(Val Token, Val URL) Export
Parameters = New Structure;
OPI_Tools.AddField("url" , URL , "String", Parameters);
OPI_Tools.AddField("auth_token" , Token, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("url" , URL , "String", Parameters);
OPI_Tools.AddField("auth_token" , Token, "String", Parameters);
Return OPI_Tools.Post("https://chatapi.viber.com/pa/set_webhook", Parameters);
Return OPI_Tools.Post("https://chatapi.viber.com/pa/set_webhook", Parameters);
EndFunction
@@ -69,8 +69,8 @@ EndFunction
// Key-Value Pair - serialized JSON response from Viber
Function GetChannelInformation(Val Token) Export
URL = "https://chatapi.viber.com/pa/get_account_info";
Return OPI_Tools.Get(URL, , TokenInHeaders(Token));
URL = "https://chatapi.viber.com/pa/get_account_info";
Return OPI_Tools.Get(URL, , TokenInHeaders(Token));
EndFunction
@@ -85,14 +85,14 @@ EndFunction
// Key-Value Pair - serialized JSON response from Viber
Function GetUserData(Val Token, Val UserID) Export
URL = "https://chatapi.viber.com/pa/get_user_details";
URL = "https://chatapi.viber.com/pa/get_user_details";
Parameters = New Structure;
OPI_Tools.AddField("id", UserID, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("id", UserID, "String", Parameters);
Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token));
Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token));
Return Response;
Return Response;
EndFunction
@@ -107,14 +107,14 @@ EndFunction
// Key-Value Pair - serialized JSON response from Viber
Function GetOnlineUsers(Val Token, Val UserIDs) Export
URL = "https://chatapi.viber.com/pa/get_online";
URL = "https://chatapi.viber.com/pa/get_online";
Parameters = New Structure;
OPI_Tools.AddField("ids", UserIDs, "Collection", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("ids", UserIDs, "Collection", Parameters);
Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token));
Response = OPI_Tools.Post(URL, Parameters, TokenInHeaders(Token));
Return Response;
Return Response;
EndFunction
@@ -135,12 +135,12 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Viber
Function SendTextMessage(Val Token
, Val Text
, Val UserID
, Val SendingToChannel
, Val Keyboard = "") Export
, Val Text
, Val UserID
, Val SendingToChannel
, Val Keyboard = "") Export
Return SendMessage(Token, "text", UserID, SendingToChannel, , Text, Keyboard);
Return SendMessage(Token, "text", UserID, SendingToChannel, , Text, Keyboard);
EndFunction
@@ -158,7 +158,7 @@ EndFunction
// Key-Value Pair - serialized JSON response from Viber
Function SendImage(Val Token, Val URL, Val UserID, Val SendingToChannel, Val Description = "") Export
Return SendMessage(Token, "picture", UserID, SendingToChannel, URL, Description);
Return SendMessage(Token, "picture", UserID, SendingToChannel, URL, Description);
EndFunction
@@ -176,28 +176,28 @@ EndFunction
// 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
, Val URL
, Val UserID
, Val SendingToChannel
, Val Extension
, Val Size = "") Export
If Not ValueIsFilled(Size) Then
If Not ValueIsFilled(Size) Then
Response = OPI_Tools.Get(URL);
Size = Response.Size();
Response = OPI_Tools.Get(URL);
Size = Response.Size();
EndIf;
EndIf;
String_ = "String";
Extension = StringReplace(Extension, ".", "");
String_ = "String";
Extension = StringReplace(Extension, ".", "");
Parameters = New Structure;
OPI_Tools.AddField("URL" , URL , String_, Parameters);
OPI_Tools.AddField("Size" , Size , String_, Parameters);
OPI_Tools.AddField("Extension", Extension, String_, Parameters);
Parameters = New Structure;
OPI_Tools.AddField("URL" , URL , String_, Parameters);
OPI_Tools.AddField("Size" , Size , String_, Parameters);
OPI_Tools.AddField("Extension", Extension, String_, Parameters);
Return SendMessage(Token, "file", UserID, SendingToChannel, Parameters);
Return SendMessage(Token, "file", UserID, SendingToChannel, Parameters);
EndFunction
@@ -214,16 +214,16 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Viber
Function SendContact(Val Token
, Val ContactName
, Val PhoneNumber
, Val UserID
, Val SendingToChannel) Export
, Val ContactName
, Val PhoneNumber
, Val UserID
, Val SendingToChannel) Export
Parameters = New Structure;
OPI_Tools.AddField("name" , ContactName , "String", Parameters);
OPI_Tools.AddField("phone_number", PhoneNumber, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("name" , ContactName , "String", Parameters);
OPI_Tools.AddField("phone_number", PhoneNumber, "String", Parameters);
Return SendMessage(Token, "contact", UserID, SendingToChannel, Parameters);
Return SendMessage(Token, "contact", UserID, SendingToChannel, Parameters);
EndFunction
@@ -241,11 +241,11 @@ EndFunction
// Key-Value Pair - serialized JSON response from Viber
Function SendLocation(Val Token, Val Latitude, Val Longitude, Val UserID, Val SendingToChannel) Export
Parameters = New Structure;
OPI_Tools.AddField("lat", Latitude , "String", Parameters);
OPI_Tools.AddField("lon", Longitude, "String", Parameters);
Parameters = New Structure;
OPI_Tools.AddField("lat", Latitude , "String", Parameters);
OPI_Tools.AddField("lon", Longitude, "String", Parameters);
Return SendMessage(Token, "location", UserID, SendingToChannel, Parameters);
Return SendMessage(Token, "location", UserID, SendingToChannel, Parameters);
EndFunction
@@ -262,7 +262,7 @@ EndFunction
// Key-Value Pair - serialized JSON response from Viber
Function SendLink(Val Token, Val URL, Val UserID, Val SendingToChannel) Export
Return SendMessage(Token, "url", UserID, SendingToChannel, URL);
Return SendMessage(Token, "url", UserID, SendingToChannel, URL);
EndFunction
@@ -279,29 +279,29 @@ EndFunction
// * Type - String - KeyboardType
Function CreateKeyboardFromArrayButton(Val ButtonArray, Val ButtonColor = "#2db9b9") Export
OPI_TypeConversion.GetLine(ButtonColor);
OPI_TypeConversion.GetCollection(ButtonArray);
OPI_TypeConversion.GetLine(ButtonColor);
OPI_TypeConversion.GetCollection(ButtonArray);
ArrayOfButtonStructures = New Array;
KeyboardStructure = New Structure;
ArrayOfButtonStructures = New Array;
KeyboardStructure = New Structure;
For Each ButtonText In ButtonArray Do
For Each ButtonText In ButtonArray Do
ButtonStructure = New Structure;
ButtonStructure.Insert("ActionType", "reply");
ButtonStructure.Insert("ActionBody", ButtonText);
ButtonStructure.Insert("Text" , ButtonText);
ButtonStructure.Insert("BgColor" , ButtonColor);
ButtonStructure.Insert("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);
ArrayOfButtonStructures.Add(ButtonStructure);
EndDo;
EndDo;
KeyboardStructure.Insert("Buttons", ArrayOfButtonStructures);
KeyboardStructure.Insert("Type" , "keyboard");
KeyboardStructure.Insert("Buttons", ArrayOfButtonStructures);
KeyboardStructure.Insert("Type" , "keyboard");
Return KeyboardStructure;
Return KeyboardStructure;
EndFunction
@@ -328,86 +328,86 @@ EndFunction
// Return value:
// Arbitrary, HTTP Response - Send message
Function SendMessage(Val Token
, Val Type
, Val UserID
, Val IsChannel
, Val Value = ""
, Val Text = ""
, Val Keyboard = "")
, Val Type
, Val UserID
, Val IsChannel
, Val Value = ""
, Val Text = ""
, Val Keyboard = "")
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Type);
OPI_TypeConversion.GetLine(UserID);
OPI_TypeConversion.GetLine(Text);
OPI_TypeConversion.GetBoolean(IsChannel);
OPI_TypeConversion.GetCollection(Keyboard);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Type);
OPI_TypeConversion.GetLine(UserID);
OPI_TypeConversion.GetLine(Text);
OPI_TypeConversion.GetBoolean(IsChannel);
OPI_TypeConversion.GetCollection(Keyboard);
ParametersStructure = ReturnStandardParameters();
ParametersStructure.Insert("type", Type);
ParametersStructure = ReturnStandardParameters();
ParametersStructure.Insert("type", Type);
If (Type = "text" Or Type = "picture") And ValueIsFilled(Text) Then
ParametersStructure.Insert("text", Text);
EndIf;
If (Type = "text" Or Type = "picture") And ValueIsFilled(Text) Then
ParametersStructure.Insert("text", Text);
EndIf;
If TypeValue(Keyboard) = Type("Structure") Then
ParametersStructure.Insert("keyboard", Keyboard);
EndIf;
If TypeValue(Keyboard) = Type("Structure") Then
ParametersStructure.Insert("keyboard", Keyboard);
EndIf;
If ValueIsFilled(Value) Then
If ValueIsFilled(Value) Then
If Type = "file" Then
ParametersStructure.Insert("media" , Value["URL"]);
ParametersStructure.Insert("size" , Value["Size"]);
ParametersStructure.Insert("file_name", "File." + Value["Extension"]);
ElsIf Type = "contact" Then
ParametersStructure.Insert("contact" , Value);
ElsIf Type = "location" Then
ParametersStructure.Insert("location" , Value);
Else
ParametersStructure.Insert("media" , Value);
EndIf;
If Type = "file" Then
ParametersStructure.Insert("media" , Value["URL"]);
ParametersStructure.Insert("size" , Value["Size"]);
ParametersStructure.Insert("file_name", "File." + Value["Extension"]);
ElsIf Type = "contact" Then
ParametersStructure.Insert("contact" , Value);
ElsIf Type = "location" Then
ParametersStructure.Insert("location" , Value);
Else
ParametersStructure.Insert("media" , Value);
EndIf;
EndIf;
EndIf;
If IsChannel Then
ParametersStructure.Insert("from", UserID);
URL = "https://chatapi.viber.com/pa/post";
Else
ParametersStructure.Insert("receiver", UserID);
URL = "https://chatapi.viber.com/pa/send_message";
EndIf;
If IsChannel Then
ParametersStructure.Insert("from", UserID);
URL = "https://chatapi.viber.com/pa/post";
Else
ParametersStructure.Insert("receiver", UserID);
URL = "https://chatapi.viber.com/pa/send_message";
EndIf;
Response = OPI_Tools.Post(URL, ParametersStructure, TokenInHeaders(Token));
Response = OPI_Tools.Post(URL, ParametersStructure, TokenInHeaders(Token));
Try
Return OPI_Tools.JsonToStructure(Response.GetBodyAsBinaryData());
Except
Return Response;
EndTry;
Try
Return OPI_Tools.JsonToStructure(Response.GetBodyAsBinaryData());
Except
Return Response;
EndTry;
EndFunction
Function ReturnStandardParameters()
SenderStructure = New Structure;
SenderStructure.Insert("name" , "Bot");
SenderStructure.Insert("avatar", "");
SenderStructure = New Structure;
SenderStructure.Insert("name" , "Bot");
SenderStructure.Insert("avatar", "");
ParametersStructure = New Structure;
ParametersStructure.Insert("sender", SenderStructure);
ParametersStructure.Insert("min_api_version", 1);
ParametersStructure = New Structure;
ParametersStructure.Insert("sender", SenderStructure);
ParametersStructure.Insert("min_api_version", 1);
Return ParametersStructure;
Return ParametersStructure;
EndFunction
Function TokenInHeaders(Val Token)
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Token);
HeadersStructure = New Match;
HeadersStructure.Insert("X-Viber-Auth-Token", Token);
Return HeadersStructure;
HeadersStructure = New Match;
HeadersStructure.Insert("X-Viber-Auth-Token", Token);
Return HeadersStructure;
EndFunction

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ece78a60-71c0-4443-a6e4-63dd8a7b10d0">
<name>OPI_Viber</name>
<synonym>
<key>ru</key>
<value>Methodы интеграции with Viber (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_Viber</name>
<synonym>
<key>ru</key>
<value>Methodы интеграции with Viber (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -50,12 +50,12 @@
// Key-Value Pair - serialized JSON response from Yandex
Function GetDiskInformation(Val Token) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Token);
Headers = AuthorizationHeader(Token);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk", , Headers);
Headers = AuthorizationHeader(Token);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk", , Headers);
Return Response;
Return Response;
EndFunction
@@ -70,28 +70,28 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function CreateFolder(Val Token, Val Path) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources";
Href = "href";
Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources";
Href = "href";
Parameters = New Structure;
Parameters.Insert("path", Path);
Parameters = New Structure;
Parameters.Insert("path", Path);
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Put(URL + Parameters, , Headers, False);
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Put(URL + Parameters, , Headers, False);
ResponseURL = Response[Href];
ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then
Return Response;
EndIf;
If Not ValueIsFilled(ResponseURL) Then
Return Response;
EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers);
Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -106,16 +106,16 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function GetObject(Val Token, Val Path) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token);
Parameters = New Structure;
Parameters.Insert("path", Path);
Headers = AuthorizationHeader(Token);
Parameters = New Structure;
Parameters.Insert("path", Path);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -131,19 +131,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function DeleteObject(Val Token, Val Path, Val ToCart = True) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(ToCart);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(ToCart);
Headers = AuthorizationHeader(Token);
Headers = AuthorizationHeader(Token);
Parameters = New Structure;
Parameters.Insert("path" , Path);
Parameters.Insert("permanently", Not ToCart);
Parameters = New Structure;
Parameters.Insert("path" , Path);
Parameters.Insert("permanently", Not ToCart);
Response = OPI_Tools.Delete("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers);
Response = OPI_Tools.Delete("https://cloud-api.yandex.net/v1/disk/resources", Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -160,32 +160,32 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function CreateObjectCopy(Val Token, Val Original, Val Path, Val Overwrite = False) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Original);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Original);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite);
Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/copy";
Href = "href";
Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/copy";
Href = "href";
Parameters = New Structure;
Parameters.Insert("from" , Original);
Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite);
Parameters = New Structure;
Parameters.Insert("from" , Original);
Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite);
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
ResponseURL = Response[Href];
ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then
Return Response;
EndIf;
If Not ValueIsFilled(ResponseURL) Then
Return Response;
EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers);
Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -200,17 +200,17 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function GetDownloadLink(Val Token, Val Path) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token);
Headers = AuthorizationHeader(Token);
Parameters = New Structure;
Parameters.Insert("path", Path);
Parameters = New Structure;
Parameters.Insert("path", Path);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Parameters, Headers);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/download", Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -226,17 +226,17 @@ EndFunction
// BinaryData,String - Binary data or file path when SavePath parameter is specified
Function DownloadFile(Val Token, Val Path, Val SavePath = "") Export
OPI_TypeConversion.GetLine(SavePath);
Response = GetDownloadLink(Token, Path);
URL = Response["href"];
OPI_TypeConversion.GetLine(SavePath);
Response = GetDownloadLink(Token, Path);
URL = Response["href"];
If Not ValueIsFilled(URL) Then
Return Response;
EndIf;
If Not ValueIsFilled(URL) Then
Return Response;
EndIf;
Response = OPI_Tools.Get(URL, , , SavePath);
Response = OPI_Tools.Get(URL, , , SavePath);
Return Response;
Return Response;
EndFunction
@@ -256,42 +256,42 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Yandex
Function GetFilesList(Val Token
, Val Quantity = 0
, Val OffsetFromStart = 0
, Val FilterByType = ""
, Val SortByDate = False) Export
, Val Quantity = 0
, Val OffsetFromStart = 0
, Val FilterByType = ""
, Val SortByDate = False) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Quantity);
OPI_TypeConversion.GetLine(OffsetFromStart);
OPI_TypeConversion.GetLine(FilterByType);
OPI_TypeConversion.GetBoolean(SortByDate);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Quantity);
OPI_TypeConversion.GetLine(OffsetFromStart);
OPI_TypeConversion.GetLine(FilterByType);
OPI_TypeConversion.GetBoolean(SortByDate);
Headers = AuthorizationHeader(Token);
Headers = AuthorizationHeader(Token);
Parameters = New Structure;
Parameters = New Structure;
If ValueIsFilled(Quantity) Then
Parameters.Insert("limit", OPI_Tools.NumberToString(Quantity));
EndIf;
If ValueIsFilled(Quantity) Then
Parameters.Insert("limit", OPI_Tools.NumberToString(Quantity));
EndIf;
If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart));
EndIf;
If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart));
EndIf;
If ValueIsFilled(FilterByType) Then
Parameters.Insert("media_type", FilterByType);
EndIf;
If ValueIsFilled(FilterByType) Then
Parameters.Insert("media_type", FilterByType);
EndIf;
If SortByDate Then
Destination = "last-uploaded";
Else
Destination = "files";
EndIf;
If SortByDate Then
Destination = "last-uploaded";
Else
Destination = "files";
EndIf;
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Destination, Parameters, Headers);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/" + Destination, Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -308,31 +308,31 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function MoveObject(Val Token, Val Original, Val Path, Val Overwrite = False) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Original);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Original);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite);
Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/move";
Href = "href";
Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/move";
Href = "href";
Parameters = New Structure;
Parameters.Insert("from" , Original);
Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite);
Parameters = New Structure;
Parameters.Insert("from" , Original);
Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite);
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
ResponseURL = Response[Href];
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then
Return Response;
EndIf;
If Not ValueIsFilled(ResponseURL) Then
Return Response;
EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers);
Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -349,29 +349,29 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function UploadFile(Val Token, Val Path, Val File, Val Overwrite = False) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite);
OPI_TypeConversion.GetBinaryData(File);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(Overwrite);
OPI_TypeConversion.GetBinaryData(File);
Headers = AuthorizationHeader(Token);
Href = "href";
File = New Structure("file", File);
Headers = AuthorizationHeader(Token);
Href = "href";
File = New Structure("file", File);
Parameters = New Structure;
Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite);
Parameters = New Structure;
Parameters.Insert("path" , Path);
Parameters.Insert("overwrite" , Overwrite);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Parameters, Headers);
URL = Response[Href];
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/upload", Parameters, Headers);
URL = Response[Href];
If Not ValueIsFilled(URL) Then
Return Response;
EndIf;
If Not ValueIsFilled(URL) Then
Return Response;
EndIf;
Response = OPI_Tools.PutMultipart(URL, New Structure(), File, "multipart", Headers);
Response = OPI_Tools.PutMultipart(URL, New Structure(), File, "multipart", Headers);
Return Response;
Return Response;
EndFunction
@@ -387,21 +387,21 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function UploadFileByURL(Val Token, Val Path, Val Address) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetLine(Address);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetLine(Address);
Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/upload";
Headers = AuthorizationHeader(Token);
URL = "https://cloud-api.yandex.net/v1/disk/resources/upload";
Parameters = New Structure;
Parameters.Insert("url" , EncodeString(Address, StringEncodingMethod.URLInURLEncoding));
Parameters.Insert("path", Path);
Parameters = New Structure;
Parameters.Insert("url" , EncodeString(Address, StringEncodingMethod.URLInURLEncoding));
Parameters.Insert("path", Path);
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(URL + Parameters, , Headers, False);
Return Response;
Return Response;
EndFunction
@@ -419,7 +419,7 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Yandex
Function PublishObject(Val Token, Val Path) Export
Return TogglePublicAccess(Token, Path, True);
Return TogglePublicAccess(Token, Path, True);
EndFunction
// Unpublish object
@@ -432,7 +432,7 @@ EndFunction
// Return value:
// Key-Value Pair - serialized JSON response from Yandex
Function CancelObjectPublication(Val Token, Val Path) Export
Return TogglePublicAccess(Token, Path, False);
Return TogglePublicAccess(Token, Path, False);
EndFunction
// Get published list объеtoтоin.
@@ -447,25 +447,25 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function GetPublishedObjectsList(Val Token, Val Quantity = 0, Val OffsetFromStart = 0) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Quantity);
OPI_TypeConversion.GetLine(OffsetFromStart);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Quantity);
OPI_TypeConversion.GetLine(OffsetFromStart);
Headers = AuthorizationHeader(Token);
Headers = AuthorizationHeader(Token);
Parameters = New Structure;
Parameters = New Structure;
If ValueIsFilled(Quantity) Then
Parameters.Insert("limit", Quantity);
EndIf;
If ValueIsFilled(Quantity) Then
Parameters.Insert("limit", Quantity);
EndIf;
If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OffsetFromStart);
EndIf;
If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OffsetFromStart);
EndIf;
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Parameters, Headers);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/resources/public", Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -482,28 +482,28 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function GetPublicObject(Val Token, Val URL, Val Quantity = 0, Val OffsetFromStart = 0) Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(Quantity);
OPI_TypeConversion.GetLine(OffsetFromStart);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(Quantity);
OPI_TypeConversion.GetLine(OffsetFromStart);
Headers = AuthorizationHeader(Token);
Headers = AuthorizationHeader(Token);
Parameters = New Structure;
Parameters = New Structure;
If ValueIsFilled(Quantity) Then
Parameters.Insert("limit", OPI_Tools.NumberToString(Quantity));
EndIf;
If ValueIsFilled(Quantity) Then
Parameters.Insert("limit", OPI_Tools.NumberToString(Quantity));
EndIf;
If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart));
EndIf;
If ValueIsFilled(OffsetFromStart) Then
Parameters.Insert("offset", OPI_Tools.NumberToString(OffsetFromStart));
EndIf;
Parameters.Insert("public_key", URL);
Parameters.Insert("public_key", URL);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Parameters, Headers);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources", Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -519,23 +519,23 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function GetDownloadLinkForPublicObject(Val Token, Val URL, Val Path = "") Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(Path);
Headers = AuthorizationHeader(Token);
Headers = AuthorizationHeader(Token);
Parameters = New Structure;
Parameters = New Structure;
If ValueIsFilled(Path) Then
Parameters.Insert("path", Path);
EndIf;
If ValueIsFilled(Path) Then
Parameters.Insert("path", Path);
EndIf;
Parameters.Insert("public_key", URL);
Parameters.Insert("public_key", URL);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Parameters, Headers);
Response = OPI_Tools.Get("https://cloud-api.yandex.net/v1/disk/public/resources/download", Parameters, Headers);
Return Response;
Return Response;
EndFunction
@@ -552,38 +552,38 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function SavePublicObjectToDisk(Val Token, Val URL, From = "", To = "") Export
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(From);
OPI_TypeConversion.GetLine(To);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(URL);
OPI_TypeConversion.GetLine(From);
OPI_TypeConversion.GetLine(To);
Headers = AuthorizationHeader(Token);
Address = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk";
Href = "href";
Headers = AuthorizationHeader(Token);
Address = "https://cloud-api.yandex.net/v1/disk/public/resources/save-to-disk";
Href = "href";
Parameters = New Structure;
Parameters.Insert("public_key", URL);
Parameters = New Structure;
Parameters.Insert("public_key", URL);
If ValueIsFilled(From) Then
Parameters.Insert("path", From);
EndIf;
If ValueIsFilled(From) Then
Parameters.Insert("path", From);
EndIf;
If ValueIsFilled(To) Then
Parameters.Insert("save_path", To);
EndIf;
If ValueIsFilled(To) Then
Parameters.Insert("save_path", To);
EndIf;
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(Address + Parameters, , Headers, False);
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Post(Address + Parameters, , Headers, False);
ResponseURL = Response[Href];
ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then
Return Response;
EndIf;
If Not ValueIsFilled(ResponseURL) Then
Return Response;
EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers);
Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response;
Return Response;
EndFunction
@@ -595,40 +595,40 @@ EndFunction
Function AuthorizationHeader(Val Token)
Headers = New Match;
Headers.Insert("Authorization", "OAuth " + Token);
Headers = New Match;
Headers.Insert("Authorization", "OAuth " + Token);
Return Headers;
Return Headers;
EndFunction
Function TogglePublicAccess(Val Token, Val Path, Val PublicAccess)
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(PublicAccess);
OPI_TypeConversion.GetLine(Token);
OPI_TypeConversion.GetLine(Path);
OPI_TypeConversion.GetBoolean(PublicAccess);
Headers = AuthorizationHeader(Token);
Destination = ?(PublicAccess, "publish", "unpublish");
Href = "href";
Headers = AuthorizationHeader(Token);
Destination = ?(PublicAccess, "publish", "unpublish");
Href = "href";
URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Destination;
URL = "https://cloud-api.yandex.net/v1/disk/resources/" + Destination;
Parameters = New Structure;
Parameters.Insert("path", Path);
Parameters = New Structure;
Parameters.Insert("path", Path);
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Put(URL + Parameters, , Headers, False);
Parameters = OPI_Tools.RequestParametersToString(Parameters);
Response = OPI_Tools.Put(URL + Parameters, , Headers, False);
ResponseURL = Response[Href];
ResponseURL = Response[Href];
If Not ValueIsFilled(ResponseURL) Then
Return Response;
EndIf;
If Not ValueIsFilled(ResponseURL) Then
Return Response;
EndIf;
Response = OPI_Tools.Get(ResponseURL, , Headers);
Response = OPI_Tools.Get(ResponseURL, , Headers);
Return Response;
Return Response;
EndFunction

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="af0b34e8-10fa-414f-a643-915210c6289a">
<name>OPI_YandexDisk</name>
<synonym>
<key>ru</key>
<value>Methodы work with Yandex Disk (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_YandexDisk</name>
<synonym>
<key>ru</key>
<value>Methodы work with Yandex Disk (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -44,12 +44,12 @@
// Key-Value Pair - serialized JSON response from Yandex
Function GetConfirmationCode(Val ClientId) Export
OPI_TypeConversion.GetLine(ClientId);
OPI_TypeConversion.GetLine(ClientId);
Parameters = New Structure("client_id", ClientId);
Response = OPI_Tools.Post("https://oauth.yandex.ru/device/code", Parameters, , False);
Parameters = New Structure("client_id", ClientId);
Response = OPI_Tools.Post("https://oauth.yandex.ru/device/code", Parameters, , False);
Return Response;
Return Response;
EndFunction
@@ -65,19 +65,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function ConvertCodeToToken(Val ClientId, Val ClientSecret, Val DeviceCode) Export
OPI_TypeConversion.GetLine(ClientId);
OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(DeviceCode);
OPI_TypeConversion.GetLine(ClientId);
OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(DeviceCode);
Parameters = New Structure;
Parameters.Insert("grant_type" , "device_code");
Parameters.Insert("code" , DeviceCode);
Parameters.Insert("client_id" , ClientId);
Parameters.Insert("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);
Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False);
Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False);
Return Response;
Return Response;
EndFunction
@@ -93,19 +93,19 @@ EndFunction
// Key-Value Pair - serialized JSON response from Yandex
Function RefreshToken(Val ClientId, Val ClientSecret, Val RefreshToken) Export
OPI_TypeConversion.GetLine(ClientId);
OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(RefreshToken);
OPI_TypeConversion.GetLine(ClientId);
OPI_TypeConversion.GetLine(ClientSecret);
OPI_TypeConversion.GetLine(RefreshToken);
Parameters = New Structure;
Parameters.Insert("grant_type" , "refresh_token");
Parameters.Insert("refresh_token" , RefreshToken);
Parameters.Insert("client_id" , ClientId);
Parameters.Insert("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);
Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False);
Response = OPI_Tools.Post("https://oauth.yandex.ru/token", Parameters, , False);
Return Response;
Return Response;
EndFunction

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="32379ca2-0f58-4143-9b34-cb552c54b962">
<name>OPI_YandexID</name>
<synonym>
<key>ru</key>
<value>Methodы work with Yandex ID (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
<name>OPI_YandexID</name>
<synonym>
<key>ru</key>
<value>Methodы work with Yandex ID (OPI)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@@ -1,70 +1,70 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" xmlns:mdclassExtension="http://g5.1c.ru/v8/dt/metadata/mdclass/extension" uuid="aa51f610-7ed3-4091-8908-8ecccf0aaf0f">
<name>OpenIntegrations</name>
<synonym>
<key>ru</key>
<value>Open integrations package</value>
</synonym>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:ConfigurationExtension">
<defaultRunMode>Checked</defaultRunMode>
<usePurposes>Checked</usePurposes>
<interfaceCompatibilityMode>Checked</interfaceCompatibilityMode>
</extension>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="12689443-2950-4e3b-b313-9a692b6acac7"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="f6f98fbd-010a-4aba-8f11-01203bbc59c7"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="33990ba2-16f0-473d-851f-a9132c777ed6"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="917bb154-d76e-42a4-b161-336b7c57a1ac"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="793db0b3-8d01-4f55-982c-73cb3d4547da"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="c67ca98f-c017-4f18-8175-02819e09b383"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="c9ed170a-ffaa-4859-9d92-fd1cbc7051b3"/>
<keepMappingToExtendedConfigurationObjectsByIDs>true</keepMappingToExtendedConfigurationObjectsByIDs>
<namePrefix>OPI_</namePrefix>
<configurationExtensionCompatibilityMode>8.3.9</configurationExtensionCompatibilityMode>
<configurationExtensionPurpose>Customization</configurationExtensionPurpose>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
<vendor>Bayselonarrend</vendor>
<version>1.9.0</version>
<detailedInformation>
<key>ru</key>
<value>Open integrations package - toбор библиотеto for интеграции with неtoоторыми популярными API for 1C:Enterprise. He consists of general modules, each responsible for its own API, as well as several tool modules common for all.</value>
</detailedInformation>
<vendorInformationAddress>
<key>ru</key>
<value>https://github.com/Bayselonarrend</value>
</vendorInformationAddress>
<configurationInformationAddress>
<key>ru</key>
<value>https://github.com/Bayselonarrend/OpenIntegrations</value>
</configurationInformationAddress>
<languages uuid="0e858b44-34f3-4d20-986d-13290bb5ba5a">
<name>Russian</name>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:LanguageExtension">
<languageCode>Checked</languageCode>
</extension>
<languageCode>ru</languageCode>
</languages>
<subsystems>Subsystem.OPI_Integrations</subsystems>
<commonModules>CommonModule.OPI_Tools</commonModules>
<commonModules>CommonModule.OPI_Cryptography</commonModules>
<commonModules>CommonModule.OPI_TypeConversion</commonModules>
<commonModules>CommonModule.OPI_Telegram</commonModules>
<commonModules>CommonModule.OPI_VK</commonModules>
<commonModules>CommonModule.OPI_Viber</commonModules>
<commonModules>CommonModule.OPI_Twitter</commonModules>
<commonModules>CommonModule.OPI_Notion</commonModules>
<commonModules>CommonModule.OPI_YandexID</commonModules>
<commonModules>CommonModule.OPI_YandexDisk</commonModules>
<commonModules>CommonModule.OPI_GoogleWorkspace</commonModules>
<commonModules>CommonModule.OPI_GoogleCalendar</commonModules>
<commonModules>CommonModule.OPI_GoogleDrive</commonModules>
<commonModules>CommonModule.OPI_GoogleSheets</commonModules>
<commonModules>CommonModule.OPI_Slack</commonModules>
<commonModules>CommonModule.OPI_Airtable</commonModules>
<commonModules>CommonModule.OPI_Dropbox</commonModules>
<commonModules>CommonModule.OPI_Tests</commonModules>
<commonModules>CommonModule.OPI_TestDataRetrieval</commonModules>
<name>OpenIntegrations</name>
<synonym>
<key>ru</key>
<value>Open integrations package</value>
</synonym>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:ConfigurationExtension">
<defaultRunMode>Checked</defaultRunMode>
<usePurposes>Checked</usePurposes>
<interfaceCompatibilityMode>Checked</interfaceCompatibilityMode>
</extension>
<containedObjects classId="9cd510cd-abfc-11d4-9434-004095e12fc7" objectId="12689443-2950-4e3b-b313-9a692b6acac7"/>
<containedObjects classId="9fcd25a0-4822-11d4-9414-008048da11f9" objectId="f6f98fbd-010a-4aba-8f11-01203bbc59c7"/>
<containedObjects classId="e3687481-0a87-462c-a166-9f34594f9bba" objectId="33990ba2-16f0-473d-851f-a9132c777ed6"/>
<containedObjects classId="9de14907-ec23-4a07-96f0-85521cb6b53b" objectId="917bb154-d76e-42a4-b161-336b7c57a1ac"/>
<containedObjects classId="51f2d5d8-ea4d-4064-8892-82951750031e" objectId="793db0b3-8d01-4f55-982c-73cb3d4547da"/>
<containedObjects classId="e68182ea-4237-4383-967f-90c1e3370bc7" objectId="c67ca98f-c017-4f18-8175-02819e09b383"/>
<containedObjects classId="fb282519-d103-4dd3-bc12-cb271d631dfc" objectId="c9ed170a-ffaa-4859-9d92-fd1cbc7051b3"/>
<keepMappingToExtendedConfigurationObjectsByIDs>true</keepMappingToExtendedConfigurationObjectsByIDs>
<namePrefix>OPI_</namePrefix>
<configurationExtensionCompatibilityMode>8.3.9</configurationExtensionCompatibilityMode>
<configurationExtensionPurpose>Customization</configurationExtensionPurpose>
<defaultRunMode>ManagedApplication</defaultRunMode>
<usePurposes>PersonalComputer</usePurposes>
<scriptVariant>Russian</scriptVariant>
<vendor>Bayselonarrend</vendor>
<version>1.9.0</version>
<detailedInformation>
<key>ru</key>
<value>Open integrations package - toбор библиотеto for интеграции with неtoоторыми популярными API for 1C:Enterprise. He consists of general modules, each responsible for its own API, as well as several tool modules common for all.</value>
</detailedInformation>
<vendorInformationAddress>
<key>ru</key>
<value>https://github.com/Bayselonarrend</value>
</vendorInformationAddress>
<configurationInformationAddress>
<key>ru</key>
<value>https://github.com/Bayselonarrend/OpenIntegrations</value>
</configurationInformationAddress>
<languages uuid="0e858b44-34f3-4d20-986d-13290bb5ba5a">
<name>Russian</name>
<objectBelonging>Adopted</objectBelonging>
<extension xsi:type="mdclassExtension:LanguageExtension">
<languageCode>Checked</languageCode>
</extension>
<languageCode>ru</languageCode>
</languages>
<subsystems>Subsystem.OPI_Integrations</subsystems>
<commonModules>CommonModule.OPI_Tools</commonModules>
<commonModules>CommonModule.OPI_Cryptography</commonModules>
<commonModules>CommonModule.OPI_TypeConversion</commonModules>
<commonModules>CommonModule.OPI_Telegram</commonModules>
<commonModules>CommonModule.OPI_VK</commonModules>
<commonModules>CommonModule.OPI_Viber</commonModules>
<commonModules>CommonModule.OPI_Twitter</commonModules>
<commonModules>CommonModule.OPI_Notion</commonModules>
<commonModules>CommonModule.OPI_YandexID</commonModules>
<commonModules>CommonModule.OPI_YandexDisk</commonModules>
<commonModules>CommonModule.OPI_GoogleWorkspace</commonModules>
<commonModules>CommonModule.OPI_GoogleCalendar</commonModules>
<commonModules>CommonModule.OPI_GoogleDrive</commonModules>
<commonModules>CommonModule.OPI_GoogleSheets</commonModules>
<commonModules>CommonModule.OPI_Slack</commonModules>
<commonModules>CommonModule.OPI_Airtable</commonModules>
<commonModules>CommonModule.OPI_Dropbox</commonModules>
<commonModules>CommonModule.OPI_Tests</commonModules>
<commonModules>CommonModule.OPI_TestDataRetrieval</commonModules>
</mdclass:Configuration>

View File

@@ -1,28 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Subsystem xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="86c261d7-2729-405f-9d39-5d9104a56bd1">
<name>OPI_Integrations</name>
<synonym>
<key>ru</key>
<value>Integrations</value>
</synonym>
<includeHelpInContents>true</includeHelpInContents>
<includeInCommandInterface>true</includeInCommandInterface>
<content>CommonModule.OPI_Tools</content>
<content>CommonModule.OPI_Cryptography</content>
<content>CommonModule.OPI_TypeConversion</content>
<content>CommonModule.OPI_VK</content>
<content>CommonModule.OPI_Telegram</content>
<content>CommonModule.OPI_Viber</content>
<content>CommonModule.OPI_Twitter</content>
<content>CommonModule.OPI_Notion</content>
<content>CommonModule.OPI_YandexID</content>
<content>CommonModule.OPI_YandexDisk</content>
<content>CommonModule.OPI_GoogleWorkspace</content>
<content>CommonModule.OPI_GoogleCalendar</content>
<content>CommonModule.OPI_GoogleDrive</content>
<content>CommonModule.OPI_GoogleSheets</content>
<content>CommonModule.OPI_Slack</content>
<content>CommonModule.OPI_Airtable</content>
<content>CommonModule.OPI_Tests</content>
<content>CommonModule.OPI_TestDataRetrieval</content>
<name>OPI_Integrations</name>
<synonym>
<key>ru</key>
<value>Integrations</value>
</synonym>
<includeHelpInContents>true</includeHelpInContents>
<includeInCommandInterface>true</includeInCommandInterface>
<content>CommonModule.OPI_Tools</content>
<content>CommonModule.OPI_Cryptography</content>
<content>CommonModule.OPI_TypeConversion</content>
<content>CommonModule.OPI_VK</content>
<content>CommonModule.OPI_Telegram</content>
<content>CommonModule.OPI_Viber</content>
<content>CommonModule.OPI_Twitter</content>
<content>CommonModule.OPI_Notion</content>
<content>CommonModule.OPI_YandexID</content>
<content>CommonModule.OPI_YandexDisk</content>
<content>CommonModule.OPI_GoogleWorkspace</content>
<content>CommonModule.OPI_GoogleCalendar</content>
<content>CommonModule.OPI_GoogleDrive</content>
<content>CommonModule.OPI_GoogleSheets</content>
<content>CommonModule.OPI_Slack</content>
<content>CommonModule.OPI_Airtable</content>
<content>CommonModule.OPI_Tests</content>
<content>CommonModule.OPI_TestDataRetrieval</content>
</mdclass:Subsystem>