Содержание
Объектная модель #
Объекты #
Объекты API almaGRID создаются автоматически при запуске приложения almaGRID.
Объект | Описание |
Database | База данных. |
App (Application) | Приложение almaGRID. |
Err (Error) | Обработчик ошибок. |
Log | Логирование операций. |
Objects | Хранилище объектов базы данных. В моделях объекты являются дугами графа. |
Tags | Дерево тегов базы данных. В моделях теги являются узлами графа. |
Классы #
Класс | Описание |
Obj | Объект базы данных. Объекты в моделях являются дугами графа или используются для хранения в базе данных информации, необходимой для расчетов и построения моделей. |
ObjCollection | Коллекция объектов базы данных. |
List | Универсальная коллекция элементов. |
Dictionary | Универсальная коллекция пар «ключ» — «значение». |
Логи almaGRID #
Лог ядра almaGRID #
Расположение лога работы ядра almaGRID: [Документы пользователя]\almaGRID\almaGRID.log.
Этот лог перезаписывается в начале каждой сессии работы с almaGRID
- при выполнении входа пользователя «almaGRID» — «Начать работу»,
- при вызове Database.AprjOpen API almaGRID.
Лог API almaGRID #
Расположение лога работы ядра almaGRID: [Документы пользователя]\almaGRID\ag_yyyy-MM-dd.log. Где yyyy-текущий год, MM-месяц и dd-день.
Этот лог дополняется по мере выполнения функций API.
Использование скриптовых хостов для вызовов API almaGRID #
Использование VBScript #
- VBScript не работает с двухбайтными кодировками символов, при передаче названий тегов и текстовых значений объектов из строк, заданных в скрипте, используйте
App.ScriptEncoding "Default"
- При использовании методов, принимающих в модель данные из файлов, необходимо, чтобы файлы данных были в кодировке UTF-8.
Использование PowerShell #
- Для выполнения скриптов необходимо предоставить консоли PowerShell прав администратора
- При использовании методов, принимающих в модель данные из файлов, необходимо, чтобы файлы данных были в кодировке UTF-8.
Пример скрипта #
VBScript
'создаем объект Excel.Application Dim objExcel Set objExcel = CreateObject("Excel.Application") 'ожидаем готовности приложения Excel Do While not (objExcel.Ready And objExcel.Interactive) : objExcel.DoEvents: Loop objExcel.Calculate do while objExcel.CalculationState <> 0: objExcel.DoEvents: Loop 'запрещаем отображение приложения Excel - необходимо для вызова API almaGRID из внешних приложений objExcel.Application.Visible = false 'создаем объект WScript.Shell Dim WshShell Set WshShell = CreateObject("WScript.Shell") 'определяем папку в которой запущен скрипт (расположение папки можно задать явно) 'в полном пути файла - должны быть только латинские буквы Dim ScriptDir ScriptDir = WshShell.CurrentDirectory 'указываем файл, в которм будет сфомирован отчет и создаем его объекты ExcecFilePath = ScriptDir & "\Example3-1.xlsm" Dim objWorkbook Set objWorkbook = objExcel.Workbooks.Open(ExcecFilePath) Dim objSheet set objSheet = objWorkbook.Sheets(1) 'объявляем объект API almaGRID Dim AGaddIn Dim AG 'создаем объект API almaGRID и ожидаем готовности приложения almaGRID Err.Clear On Error Resume Next Err.Number = 1 isReady = false Do until Err.Number = 0 and isReady objExcel.DoEvents Wscript.sleep 200 Set AGaddIn = objExcel.COMAddIns("almaGRID.almaGRID") Set AG = AGaddIn.Object Err.Clear isReady = AG.App.IsReady Loop On Error GoTo 0 'подключаемся к базе данных almaGRID как пользователь "Administrator", с паролем "111" с использованием языка модели "Russian" if AG.Err.ErrorCode = 0 then AG.Database.AprjOpen ScriptDir & "\test.aprj", "Administrator", "111", "Russian" end if if AG.Err.ErrorCode = 0 then AG.App.ScriptEncoding "Default" end if 'в родительском узле дерева тегов "s1sb3ec4a89dca34036a83e0961c89f56d3s" создаем новый тег с названием "НовыйТег" с ID="fa124" if AG.Err.ErrorCode = 0 then id1 = AG.Tags.AddTag("НовыйТег", "fa124", "s1sb3ec4a89dca34036a83e0961c89f56d3s") 'для созданного тега создаем два дочерних тега id = AG.Tags.AddTag("Tag27", "fa125", "s1sb3ec4a89dca34036a83e0961c89f56d3s" & id1 & "s" ) id = AG.Tags.AddTag("Tag28", "fa126", "s1sb3ec4a89dca34036a83e0961c89f56d3s" & id1 & "s" ) end if if AG.Err.ErrorCode = 0 then 'обращаемся к тегу по его id, и используем для название тега, сохраненную в переменной скрипта label = AG.Tags.GetLabel("b3ec4a89dca34036a83e0961c89f56d3") Wscript.Echo "[" & label & "]" AG.App.ScriptEncoding "UTF8" id = AG.Tags.GetID(label) Wscript.Echo id 'обращаемся к тегу по названию, заданному в скрипте AG.App.ScriptEncoding "Default" id = AG.Tags.GetID("Риски НИОКР") Wscript.Echo id end if 'загружаем в базу данных ветвь тегов из csv-файла if AG.Err.ErrorCode = 0 then AG.App.CsvDelimiter ";" AG.App.ScriptEncoding "UTF8" ' AG.Objects.AddCsv ScriptDir & "\Test-1.csv", "Table_TagLabels" AG.Objects.AddCsv ScriptDir & "\Test-2.csv", "Table_TagLabels_Type" end if 'создаем бэкап текущей базы данных, полное имя бэкапа сохраняем в "backupFileName" if AG.Err.ErrorCode = 0 then backupFileName = AG.Database.AprjBackup Wscript.Echo backupFileName end if 'удаляем ветвь "s1sb3ec4a89dca34036a83e0961c89f56d3sbfca689236894f0090b709da0bc3d45ds" if AG.Err.ErrorCode = 0 then AG.Tags.RemoveTag "s1sb3ec4a89dca34036a83e0961c89f56d3sbfca689236894f0090b709da0bc3d45ds" end if 'принимаем теги из файла "TagsTree-f2.csv" в модель в узел дерева тегов "s1sb3ec4a89dca34036a83e0961c89f56d3s" if AG.Err.ErrorCode = 0 then AG.App.CsvDelimiter ";" AG.Tags.AddCsv ScriptDir & "\TagsTree-f2.csv", "s1sb3ec4a89dca34036a83e0961c89f56d3s", "Id_Lang_Tags" end if 'выполняем расчет модели по шаблону "3128bdd8102c4ba59f3b3b97a81c4671" с подстановкй тегов 's000489s'->'s000490s' if AG.Err.ErrorCode = 0 then AG.Tags.PatternToWorksheet "3128bdd8102c4ba59f3b3b97a81c4671", "Calc", "<prm><subst fromTag='s000489s' toTag='s000490s'></subst></prm>" end if 'если была ошибка, то восстанавливаем базу данных из бэкапа "backupFileName" if AG.Err.ErrorCode <> 0 then AG.Database.AprjRestore backupFileName end if 'закрываем подключение к базе данных AG.Database.Close 'запрещаем приложению Excel запрашивать подтверждения objExcel.DisplayAlerts = False 'сообщаем пользователю о результате работы скрипта и закрываем рабочую книгу if AG.Err.ErrorCode = 0 then Wscript.Echo "Calculation successfully completed" 'закрываем рабочую книгу с сохранением внесенных изменений objWorkbook.Close(True) else Wscript.Echo "Calculstion error" 'закрываем рабочую книгу без сохранения внесенных изменений objWorkbook.Close(False) end if 'Закрываем и освобождаем все использованные экземпляры объектов objExcel.Quit 'Exit from Excel Application Set objWorkbook = Nothing 'Releasing Workbook object Set objExcel = Nothing 'Releasing Excel object Set WshShell = Nothing 'Releasing WshShell object WScript.Quit