Слайды курса «Разработка сценариев (скриптов) в системе Бизнес-инженер» г. Москва, тел.: +7 (495) 788-72-47, E-mail: [email protected], Internet: www.betec.ru Содержание 1. Виды и типы сценариев 2. Разработка и редактирование кода сценария 3. Объектная модель Бизнес-инженер 4. Часто используемые методы и свойства сценариев 5. Вызов методов внешних СОМ-серверов 2 Бизнес-инженер 1. Виды и типы сценариев Задачи решаемые с помощью сценариев Формирование отчетов любого уровня сложности. Выполнение на основе бизнес-модели любого уровня сложности: - Вычислений и расчетов. - Видов и методов анализа. - Фильтрации данных. - Запросов. - Семантических проверок. Вывод данных бизнес-модели на графические диаграммы. Разработка стилей графических диаграмм. Выполнение различных видов импорта и экспорта данных бизнесмодели. Организация автоматического обмена данными между программой Бизнес-инженер и различными корпоративными информационными системами. Запуск любых команд Бизнес-инженер через сценарии. Разработка новых функций, команд и возможностей в программе Бизнесинженер. 3 Бизнес-инженер Наиболее часто сценарии используются В вычисляемых атрибутах В шаблонах отчетов На графических диаграммах 4 Бизнес-инженер Виды сценариев Виды сценариев Описание Общие сценарии Эти сценарии предназначены для использования, когда проект не открыт и хранятся в файле VBScripts.bin, который расположен в директории установки программы. Запускаются эти сценарии в меню главного окна программы Файл / Общие сценарии / Выполнить. Сценарии проекта Эти сценарии предназначены для использования, когда проект открыт и хранятся в нем. Они запускаются в различных окнах программы в зависимости от типа сценария. Сценарии отчетов Эти сценарии предназначены для формирования отчетов и хранятся в блоках данных шаблонов отчетов. Эти сценарии выполняются при формировании отчета. Сценарии графических диаграмм Данные сценарии предназначены для формирования графических диаграмм в модуле График-студио. Они хранятся вместе с шаблонами графических диаграмм в папке VisioModels, которая расположена в директории установки программы и запускаются в окне графических диаграмм. 5 Бизнес-инженер Выполнение и открытие окна общих сценариев 6 Бизнес-инженер Редактирование и выполнение общих сценариев 7 Бизнес-инженер Открытие окна сценариев проекта 8 Бизнес-инженер Окно со сценариями проекта 9 Бизнес-инженер Типы сценариев проекта Тип сценария Назначение Запуск и выполнение Характеристики Группа Предназначены для группировки и иерархического упорядочивания Сценариев в окне сценариев проекта. Не запускаются в программе. Могут не содержать код. Приложение Предназначены для работы с проектом. Запускаются в меню всех окон программы. Определен объект Application. Может иметь любое количество входных параметров, а их возвращаемые значения не анализируются. Проект Предназначены для невизуального обращения к данным проекта. Запускаются в меню всех окон программы. Определены объекты Application и Document. Может иметь любое количество входных параметров, а их возвращаемые значения не анализируются. Окно Предназначены для управления визуальным представлением данных. Запускаются в меню всех окон программы, кроме окна Навигатора. Определены объекты Application, Document и ChildWindow. Может иметь любое количество входных параметров, а их возвращаемые значения не анализируются. Иерархический список Предназначены для работы с данными окон иерархических списков элементов. Запускаются в меню окон иерархических списков элементов. Определены объекты Application, Document, ChildWindow и TreeWindow. Должны иметь, как минимум, два входных параметра: идентификатор элемента, в контекстном меню которого запускается сценарий, и номер выбранного атрибута. Возвращаемые значения этих сценариев не анализируются. Матрица Предназначены для работы с данными окон матриц. Запускаются в меню окон матриц. Определены объекты Application, Document и MatrixWindow. Должны быть, как минимум, четыре входных параметра: идентификатор матрицы, номер атрибута и пара идентификаторов элементов классификаторов, образующих ячейку матрицы. Возвращаемые значения этих сценариев не анализируются. 10 Бизнес-инженер Типы сценариев проекта (продолжение) Тип сценария Назначение Запуск и выполнение Характеристики Иерархическая и копитдиаграммы Предназначены для работы с данными окон Иерархических диаграмм и Кокпитдиаграмм. Запускаются в меню окон иерархических диаграмм и кокпитдиаграмм. Определены объекты Application, Document, ChildWindow и DiagramWindow. Должен быть, как минимум, один входной параметр - идентификатор элемента, для которого сформирована иерархическая диаграмма или идентификатор кокпит-диаграммы. Возвращаемые значения этих сценариев не анализируются. Вычисляемый атрибут Предназначены для вычисления значений атрибутов. Выполняются при открытии окон иерархических списков элементов и матриц, а также по команде пересчета значений атрибутов. Определен объект Document. Должен быть один входной параметр - идентификатор элемента, для которого вычисляется значение. Второй и третий параметры – опционные и должны задаваться для сценариев, предназначенных для вычисления значений атрибутов элементов матричных связей (ячеек матрицы). В этом случае, второй и третий параметры должны содержать идентификаторы элементов классификаторов, образующих ячейку матрицы. Возвращаемые значения сценария – действительное число или строка. Отчет Предназначены для формирования HTMLтекста блока данных отчета. Выполняются при формировании отчетов. Определены объекты Application, Report и Helper. Должен быть один входной параметр - идентификатор элемента классификатора, который был выбран для формирования блока данных отчета. Объект Helper содержит все необходимые методы для формирования HTML-текста блока данных отчета. Фильтр Предназначены для фильтрации визуального отображения элементов окон иерархических списков. Выполняются при применении фильтров в окнах иерархических списков элементов. Определен объект Document. Должны быть два входных параметра: идентификатор элемента, для которого применяется фильтр и значение фильтра по умолчанию (0 или 1) в случае возникновения исключений при проверке условий. Возвращаемые значения этих сценариев: 0 (не отображать/включать) или 1 (отображать/включать). 11 Бизнес-инженер Типы сценариев проекта (продолжение) Тип сценария Назначение Запуск и выполнение Характеристики Анализ Предназначены для анализа данных элементов окон иерархических списков. Запускаются в меню окон иерархических списков элементов. Определены объекты Document и Helper. Должен быть один параметр идентификатор элемента, данные которого анализируются. Возвращаемые значения этих сценариев - строка, которая отображается в информационном сообщении, а также сохраняется в Logфайле. Данные кокпитдиаграммы Предназначены для обращения к различным базам данных и файлам, и для обработки данных и формирования кокпит-диаграммы. Выполняются при формировании кокпитдиаграмм. Определены объекты Document и Cocpit. Должен быть один параметр идентификатор элемента классификатора, данные которого обрабатываются и для которого формируется кокпит-диаграмма. Возвращаемые значения этих сценариев далее не используются. Автоматический Предназначены для автоматического выполнения. Выполняются в момент запуска программы и открытия ее окон. Определен объект Document. Не должно быть возвращаемых значений, а в случае их наличия возвращаемые значения не анализируются. Триггер Предназначены для выполнения в момент наступления заданных для сценария событий. Выполняются в момент наступления заданных для сценария событий, связанных с изменениями данных (добавление, удаление и редактирование элементов) проекта. Определен объект Document. Должен быть один параметр - идентификатор элемента проекта, данные которого были изменены. 12 Бизнес-инженер Запуск сценариев проекта в окне классификатора через контекстное меню 13 Бизнес-инженер Запуск сценариев проекта в окне матрицы через контекстное меню 14 Бизнес-инженер Запуск сценариев проекта в окне матричных списков через контекстное меню 15 Бизнес-инженер Запуск сценариев проекта в окне кокпит-диаграммы 16 Бизнес-инженер Запуск сценариев проекта типа «Анализ» в окне классификатора через контекстное меню 17 Бизнес-инженер Создание предопределенных параметров запуска общих сценариев и сценариев проекта 18 Бизнес-инженер Создание и редактирование сценария отчета в блоке данных отчета 19 Бизнес-инженер Задание в блоке данных отчета ссылки на сценарий проекта типа «Отчет» 20 Бизнес-инженер Задание для классификаторов сценариев-триггеров 21 Бизнес-инженер Задание для классификаторов сценариев-триггеров 22 Бизнес-инженер Типы сценариев графических диаграмм Типы сценариев Событийные сценарии (обработчики событий) графических диаграмм Краткое описание Выполняются автоматически после наступления одного из следующих заданных событий: События, связанные с диаграммами Создание новой диаграммы [после] Открытие диаграммы [после] Применение диаграммы [до] События, связанные с элементами диаграмм Пользовательские сценарии графических диаграмм Добавление элемента [после] Выделение элемента [после] Удаление элемента [до] Удаление элемента [после] Запуск выполнения сценария осуществляется пользователем через настраиваемые разделы меню. 23 Бизнес-инженер Редактирование событийных сценариев графических диаграмм 24 Бизнес-инженер Файлы с кодами событийных сценариев Файлы с кодами событийных сценарием находятся вместе с шаблонами графических диаграмм в папке VisioModels, расположенной в директории установки программы Событийный сценарий Файл с кодом событийного сценария Создание новой диаграммы [после] OnCreateDiagram.vbs Открытие диаграммы [после] AfterLoad.vbs Применение диаграммы [до] BeforeOK.vbs Добавление элемента [после] AfterShapeAdd.vbs Выбор элемента [после] AfterSelectionChange.vbs Удаление элемента [до] BeforeSelectionDelete.vbs Удаление элемента [после] AfterSelectionDelete.vbs 25 Бизнес-инженер Редактирование пользовательских сценариев графических диаграмм 26 Бизнес-инженер Запуск выполнения пользовательских сценариев 27 Бизнес-инженер 3. Разработка и редактирование кода сценария Для написания сценариев в одном проекте могут альтернативно использоваться как VBS (Visual Basic Script), так и Java скрипты 28 Бизнес-инженер 3. Разработка и редактирование кода сценария Для написания сценариев в одном проекте могут альтернативно использоваться как VBS (Visual Basic Script), так и Java скрипты 29 Бизнес-инженер Использование встроенного текстового редактора для редактирования кода сценария 30 Бизнес-инженер Использование встроенного справочника объектов и методов 31 Бизнес-инженер Проверка корректности синтаксиса кода сценария 32 Бизнес-инженер Использование для редактирования кода сценария внешнего редактора RJ TextEd 33 Бизнес-инженер Использование для редактирования кода сценария внешнего редактора RJ TextEd 34 Бизнес-инженер Использование для разработки кода сценария языка Visual Basic Script (VBS) Описание языка Visual Basic Script (VBS) можно посмотреть по адресу: http://www.w3schools.com/asp/vbscript_default.asp 35 Бизнес-инженер Использование для разработки кода сценария языка Java Script Описание языка Java Script можно посмотреть по адресу: http://www.w3schools.com/js/default.asp 36 Бизнес-инженер 3. Объектная модель Бизнес-инженер Знание структуры объектной модели необходимо для понимания цепочек обращений к свойствам и методам объектов программы Бизнес-инженер. Например, для того чтобы зафиксировать ответственного за бизнес-процесс нужно обратиться к соответствующей матрице. Для этого потребуются объекты Matrix и Document. В свою очередь для обращения к свойствам объекта Document потребуется объект Application. В общем случае, для того чтобы работать с какой-либо переменной, потребуется вызов цепочки объектов. В программном продукте Бизнес-инженер, как и в любой программе, являющейся COM сервером, объекты, необходимые для работы с OLE Automation командами, упорядочены иерархически. То есть после запуска программы доступными являются основные объекты и с их помощью вызываются остальные объекты. Объекты программы Бизнес-инженер делятся на НЕВИЗУАЛЬНЫЕ объекты, которые не затрагивают визуальных контролей программы и ВИЗУАЛЬНЫЕ объекты. Описание всех объектов и методов объектной модели Бизнес-инженер приведено в отдельном документе Документация по объектам и методам сценариев.doc который можно скачать по ссылке: http://www.betec.ru/bep/downloads/documentacia_po_scenaryiam.doc 37 Бизнес-инженер Невизуальные объекты объектной модели Бизнес-инженер Application SQL Server Projects Helper Cocpit Document SQL Data Set Item SQL Data Field Classi ficator MS Visio Matrix Array Colle ction Array Item MenuItem Object Manager Report Item Cocpit Item Report Single Series Item Primi tive Item Data Type Item Script Item Report Data Set Report Single Vari able 38 Бизнес-инженер Невизуальные объекты объектной модели Бизнес-инженер Базовым объектом программного продукта Бизнес-инженер является объект Application. Этот объект становится доступным сразу после запуска программы и доступ к нему завершается вместе с ее закрытием. Наоборот, при использовании COM API команды CoCreateInstance, когда в качестве параметра используется GUID объекта Application, осуществляется запуск программы Бизнес-инженер. Следует отметить, что объект Application, помимо невизуальных методов содержит методы, предназначенные для управления главным окном программного продукта Бизнес-инженер. Помимо объекта Application существует еще два объекта, которые становятся доступными сразу после запуска программы и доступ, к которым завершается вместе с ее закрытием. Это объект Helper, содержащий методы HTML-форматирования текста и объект Cocpit, который является вспомогательным объектом и предназначен для создания кокпит-диаграмм. Используя свойства и методы объекта Application, можно получить доступ к двум другим объектам SQLServerProjects и Document. С помощью объекта SQLServerProjects осуществляется доступ к проектам, размещенным на SQL-сервере, а с помощью объекта Document осуществляется доступ к данным проекта. С помощью объекта SQLServerProjects также можно получить доступ к объектам Document для проектов, размещенных на SQL-сервере. Объект Document осуществляет хранение данных в виде иерархического списка и вызывает два других объекта SQLDataSet и Item. Объект SQLDataSet вместе с дочерним объектом SQLDataField предназначены для обмена данными с внешним SQL-сервером. 39 Бизнес-инженер Невизуальные объекты объектной модели Бизнес-инженер Объект Item является единицей хранения и обработки данных в иерархическом списке объекта Document. Он содержит свойства и методы, необходимые для иерархического доступа к следующим данным элемента проекта: Название элемента; Идентификатор элемента; Идентификатор родительского элемента; Список идентификаторов дочерних элементов; Атрибуты элемента. Объект Item вызывает следующие объекты, используемые для работы с данными: Объект Classificator - содержит свойства и методы для работы с классификаторами. Объект Matrix - содержит свойства и методы для работы с матрицами. Объект MenuItemManager - содержит свойства и методы для работы с разделами меню. Объект ReportItem - содержит свойства и методы для работы с отчетами. Объект CocpitItem - содержит свойства и методы для работы с кокпит-диаграммами. Объект PrimitiveItem - содержит свойства и методы для работы с формами иерархических диаграмм. Объект DataTypeItem - содержит свойства и методы для работы с типами данных. Объект ScriptItem - содержит свойства и методы для работы со сценариями (VBSскриптами). 40 Бизнес-инженер Невизуальные объекты объектной модели Бизнес-инженер Многие из этих объектов, в свою очередь, вызывают вспомогательные объекты, которые группируют специфические данные и облегчают работу с ними. Объект Classificator вызывает объект MSVisio, который позволяет работать с графическими диаграммами и объект ArrayCollection, с помошью которого можно работать с таблицами. В свою очередь, объект ArrayCollection вызывает объект ArrayItem, который позволяет работать с данными таблицы. Объект ReportItem вызывает объект Report, который используется для работы с отчетами. В свою очередь, объект Report вызывает объект ReportDataSet, который содержит свойства и методы для переноса данных из проекта в блок данных отчета и который в свою очередь вызывает объект ReportSingleVariable, предназначенный для HTML-форматирования заданной переменной в блоке данных отчета. Объект CocpitItem вызывает объект SingleSeriesItem, который содержит свойства и методы, позволяющие работать с графиками кокпит-диаграммы. Вышеописанная иерархия объектов предназначена для работы с проектом и не затрагивает его визуальных контролей. 41 Бизнес-инженер Визуальные объекты объектной модели Бизнес-инженер Application Child Window Document Tree Window Matrix Matrix Window 42 Diagram Window Бизнес-инженер Визуальные объекты объектной модели Бизнес-инженер Вышеописанный объект Application имеет ряд методов (open,...,), которые позволяют развернуть немодальные окна. Существует 4 типа немодальных окон: Окна классификаторов; Окна матриц; Окна иерархических диаграмм; Окна кокпит диаграмм. Общими свойствами окон (высотой, шириной, расположением и названием заголовка) управляет объект ChildWindow, а конкретными типами окон управляют следующие объекты, вызываемые им: Объект TreeWindow - имеет свойства и методы управления графическими контролями окон классификаторов. Объект MatrixWindow - имеет свойства и методы управления графическими контролями окон матриц. Объект DiagramWindow - имеет свойства и методы управления графическими контролями окон иерархических диаграмм и кокпит-диаграмм. Функциональность окон кокпит-диаграмм и иерархических диаграмм однотипна. Визуальные контроли работают в тесной связи с невизуальными. Помимо общего объекта Application, каждое из окон имеет связь с объектом Document, который формирует данные, отображаемые в окне. Описание всех объектов и методов объектной модели программы Бизнес-инженер приведено в отдельной документации Описание объектов и методов сценариев (скриптов) Бизнес-инженер. 43 Бизнес-инженер 4. Часто используемые методы и свойства сценариев Определение элементов (классификаторов, матриц и др.) ItemByID - определение элемента по ID ItemByName - определение элемента по названию ItemByGUID - определение элемента по GUID Определение типов значений атрибутов элементов (классификаторов, матриц и др.) AttributeValueDouble - действительное значение атрибута элемента AttributeValueString - строковое значение атрибута элемента -1.2345678E9 – значение выводимое для атрибутов с отсутствующими действительными данными 44 Бизнес-инженер Работа с классификаторами Определение названия, нумерации и значений атрибутов элемента классификатора set element = document.itemByID(element_ID) определение объекта элемента классификатора с заданным ID element_ID = element.ThisID Определение ID элемента классификатора element_name = element.ItemName определение названия (имени) элемента классификатора element_numeration = document.Numeration(element_ID,0) определение нумерации (номера) элемента классификатора с заданными ID. Второй параметр задает ID родительского элемента относительно которого определяется нумерация attribute_value_element = element.AttributeValueDouble(element_attribute_name) определение значения заданного атрибута элемента классификатора 45 Бизнес-инженер Пример работы с классификаторами Расчет суммы значений двух атрибутов элемента классификатора Function Evaluate(element_ID) 'Данные классификатора "Оргструктура" costRateAttributeName="Стоимостная ставка в час" costResourceWorkplaceAttributeName="Стоимость ресурсов в час" 'Выполнение вычислений set element = document.ItemByID(element_ID) r1=element.AttributeValueDouble(costRateAttributeName) r2=element.AttributeValueDouble(costResourceWorkplaceAttributeName) if (r1>=0) and (r2>=0) then result=r1+r2 end if if (r1=-1.2345678E9) then result=r2 end if if (r2=-1.2345678E9) then result=r1 end if if (r1=-1.2345678E9) and (r2=-1.2345678E9) then result=-1.2345678E9 end if 'или (r1<0) and (r2<0) Evaluate=result End Function 46 Бизнес-инженер Работа с классификаторами Определение родительского и дочерних элементов классификаторов set element = document.itemByID(element_ID) определение объекта элемента классификатора с заданным ID parent_ID = element.ParentID определение ID родительского элемента классификатора childCount = element.ChildCount определение количества дочерних элементов первого уровня у элемента классификатора attribute_value_child_element = element.Childs(Index).AttributeValueDouble(child_attribute_name) определение значения заданного атрибута для дочернего элемента классификатора с индексом "Index" (возможные значения индекса: 0,...,childCount-1) set child = element.FirstChild(-1,"") определение первого дочернего элемента, первый параметр задает количество уровней (значение – 1 задает все уровни), второй параметр – зарезервирован. set child = element.NextChild определяет следующий дочерний элемент 47 Бизнес-инженер Пример работы с классификаторами Расчет суммы значений атрибутов дочерних элементов классификатора 1-го уровня Function Evaluate(element_ID) 'Данные классификатора "Процессы" elementAttributeName="Временные трудозатраты процесса, часов" 'Выполнение вычислений set element = document.ItemByID(element_ID) childCount = element.ChildCount result=0 count=0 for i=0 to childCount-1 r1=element.Childs(i).AttributeValueDouble(elementAttributeName) if (r1>=0) then result=result+r1 count=count+1 end if next if (count=0) then result=-1.2345678E9 end if Evaluate=result End Function 48 Бизнес-инженер Пример работы с классификаторами Расчет суммы значений атрибутов дочерних элементов классификатора до 5-го уровня (включительно) Function Evaluate(element_ID) 'Данные классификатора "Процессы" elementAttributeName="Временные трудозатраты процесса, часов" 'Выполнение вычислений set element = document.ItemByID(element_ID) set child = element.FirstChild(5,"") result=0 count=0 test=true do while test r1=child.AttributeValueDouble(elementAttributeName) if (r1>=0) then result=result+r1 count=count+1 end if set child = element.NextChild on error resume next child_ID = child.ThisID if (Err.Number<>0) then test=false end if on error goto 0 loop if (count=0) then result=-1.2345678E9 end if Evaluate=result End Function 49 Бизнес-инженер Пример работы с классификаторами Определение нумерации и названия родительского элемента Function Evaluate(element_ID) set element = document.ItemByID(element_ID) parent_ID = element.ParentID parentNumeration = document.Numeration(parent_ID,0) set parent = document.itemByID(parent_ID) parentName = parent.ItemName result = "Родительский элемент: " result = result + parentNumeration + parentName Evaluate = result End Function 50 Бизнес-инженер Работа с матрицами Определение атрибутов матрицы и связанных через матрицу элементов классификаторов set matrix = document.ItemByGUID(matrix_GUID) определение объекта матрицы с заданным GUID cellCount = matrix.Matrix.CellCount(element1_ID) определение количества связей в матрице для исходного элемента первого классификатора с заданным ID element2_ID = matrix.Matrix.SecondClassificatorID(element1_ID,Index) определение ID элемента второго классификатора с индексом "Index", связанного в матрице с исходным элементом первого классификатора с заданным ID (возможные значения индекса: 0,..., cellCount-1) attribute_value_matrix = matrix.Matrix.AttributeValueDouble(element1_ID,element2_ID,matrix_attribute_name) определение значения заданного атрибута связи (ячейки) матрицы для двух элементов первого и второго классификаторов с заданными ID, при этом ID элемента первого классификатора является параметром сценария – т.е. определяется автоматически, так как сценарий "привязан" к этому элементу set matrixCell = document.ItemByID(cellID) определение объекта одной связи (ячейки) матрицы с заданным ID – этот метод применяется в сценариях, которые "привязаны" к связи (ячейке) матрицы attribute_value_matrix = matrixCell.Matrix.AttributeValueDouble(firstID,secondID,matrix_attribute_name) определение значения заданного атрибута связи (ячейки) матрицы для двух элементов первого и второго классификаторов с заданными ID, при этом ID этих двух элементов являются параметрами сценария – т.е. определяются автоматически, так как сценарий "привязан" к связи (ячейке) матрицы 51 Бизнес-инженер Пример работы с матрицами Расчет суммы произведений значений атрибутов матрицы и связанных элементов классификаторов для выбранного элемента классификатора Function Evaluate(element1_ID) 'Данные матрицы "Процессы <> Оргструктура" matrix_GUID="{5CC981B9-1A3C-F1E4-272B-96CB58B489A5}" matrixAttributeName="Количество требуемых оргединиц" 'Данные классификатора "Оргструктура" costWorkPlaceAttributeName="Стоимость рабочего места в час" 'Выполнение вычислений set matrix = document.ItemByGUID(matrix_GUID) cellCount=matrix.Matrix.CellCount(element1_ID) result=0 count=0 for i=0 to cellCount-1 element2_ID=matrix.Matrix.SecondClassificatorID(element1_ID,i) r1=matrix.Matrix.AttributeValueDouble(element1_ID,element2_ID,matrixAttributeName) r2=document.itemByID(element2_ID).AttributeValueDouble(costWorkPlaceAttributeName) if (r1>=0) and (r2>=0) then result=result+r1*r2 count=count+1 end if next if (count=0) then result=-1.2345678E9 end if Evaluate=result End Function 52 Бизнес-инженер Пример работы с матрицами Расчет значения атрибута ячейки матрицы на основе составляющих ее классификаторов и других атрибутов матрицы Function Evaluate(cellID,firstID,secondID) 'Данные классификатора "Процессы" processGUID="{8CE93A56-F6B2-C54B-F172-4E5FBD709A5A}" timeProcessAttributeName="Время выполнения процесса, минут" amountPerformanceProcessAttributeName="Количество выполнений процесса" 'Данные классификатора "Оргструктура" costWorkPlaceAttributeName="Стоимость рабочего места в час" 'Данные матрицы "Процессы <> Оргструктура" attributeName1="Количество требуемых оргединиц" attributeName2="Степень участия в процессе" 'Выполнение вычислений r1=document.ItemByID(cellID).Matrix.AttributeValueDouble(firstID,secondID,attributeName1) r2=document.ItemByID(cellID).Matrix.AttributeValueDouble(firstID,secondID,attributeName2) test1=document.ItemByGUID(processGUID).IsParentSelf(firstID) test2=document.ItemByGUID(processGUID).IsParentSelf(secondID) if test1 then processID=firstID orgID=secondID end if if test2 then processID=secondID orgID=firstID end if r3=document.ItemByID(processID).AttributeValueDouble(timeProcessAttributeName) r4=document.ItemByID(processID).AttributeValueDouble(amountPerformanceProcessAttributeName) r5=document.ItemByID(orgID).AttributeValueDouble(costWorkPlaceAttributeName) if (r1>=0) and (r2>=0) and (r3>=0) and (r4>=0) and (r5>=0) then result=r1*r2*r3*r4*r5/60 else result=-1.2345678E9 end if Evaluate=result End Function 53 Бизнес-инженер Работа с типами данных set element = document.itemByID(element_ID) определение объекта элемента классификатора с заданным ID customType_ID = element.CustomType определение для элемента классификатора ID элемента типа данных custom_ID = element.CustomID определение для элемента классификатора ID выбранного значения типа данных elementTypeValueString = document.ItemByID(customType_ID).DataTypeMgr.GetCustomString(custom_ID) определение для элемента классификатора строковой части выбранного значения типа данных elementTypeValueReal = document.ItemByID(customType_ID).DataTypeMgr.GetCustomDouble(custom_ID) определение для элемента классификатора действительной части выбранного значения типа данных elementTypeValueComplexString = document.ItemByID(customType_ID).DataTypeMgr.GetCustomDisplayString(custom_ID) определение для элемента классификатора составной строки, состоящей из строковой и действительной частей выбранного значения типа данных elementTypeValuePictograms = document.ItemByID(customType_ID).DataTypeMgr.GetCustomGraphicStream(custom_ID) определение для элемента классификатора пиктограммы выбранного значения типа данных 54 Бизнес-инженер Пример работы с типами данных Определение названия типа элемента комплексного классификатора по его идентификатору Function Evaluate(element_ID) set element = document.ItemById(element_ID) customType_ID = custom_ID = element.CustomType element.CustomID if (customType_ID>0) and (custom_ID>0) then set customType = document.ItemByID(customType_ID) customName = customType.DataTypeMgr.GetCustomString(custom_ID) end if if (customName<>"") then result = "Тип данных: " + customName end if Evaluate = result End Function 55 Бизнес-инженер Пример формирования отчетов по классификатору Вывод в отчет нумерации и названий дочерних элементов классификатора до 2-го уровня (включительно) Function Report(element_ID) set element = document.ItemByID(element_ID) set child = element.FirstChild(2,"") result="<table border='1'>" test=true do while test child_ID=child.ThisID childNumeration=document.numeration(child_ID,0) childName=child.ItemName result=result+"<tr><td>"+childNumeration+"</td>" result=result+"<td>"+childName+"</td></tr>" set child=element.NextChild on error resume next n=child.ThisID if (Err.Number<>0) then test=false end if on error goto 0 loop Report=result+"</table>" End Function 56 Бизнес-инженер Пример формирования отчетов по классификатору Вывод в отчет нумерации и названий дочерних элементов классификатора до 2-го уровня (включительно) 57 Бизнес-инженер Пример формирования отчетов по классификатору Вывод в отчет нумерации и названий всех дочерних элементов классификатора в виде иерархического списка с помощью использования рекурсивной функции Function Report(element_ID) maxLevel=-1 ' Задание количества иерархических уровней выводимых, ' подэлементов. Значение -1 выводит все уровни. levelNumber=1 result=ChildDataForReport(element_ID,levelNumber,maxLevel) Report=result End Function Function ChildDataForReport(element_ID,levelNumber,maxLevel) set element=document.ItemByID(element_ID) childCount=element.ChildCount if (childCount>0) and ((levelNumber<=maxLevel) or (maxLevel<0)) then result=result+"<ul style='margin-left: 30px;'>" for i=0 to childCount-1 set child=element.Childs(i) child_ID=child.ThisID childNumeration=document.Numeration(child_ID,0)+" " childName=child.ItemName result=result+"<p>"+childNumeration+childName+"</p>" result=result+ChildDataForReport(child_ID,levelNumber+1,maxLevel) next result=result+"</ul>" end if ChildDataForReport=result End function 58 Бизнес-инженер Пример формирования отчетов по классификатору Вывод в отчет нумерации и названий всех дочерних элементов классификатора в виде иерархического списка с помощью использования рекурсивной функции 59 Бизнес-инженер Пример формирования отчетов по матрице Вывод в отчет нумерации и названий элементов классификаторов, связанных через матрицу с выбранным элементом классификатора Function Report(element1_ID) 'Данные матрицы "Процессы <> Оргструктура" matrixGUID="{5CC981B9-1A3C-F1E4-272B-96CB58B489A5}" matrixAttributeName="Роль в процессе" matrixAttributeValue="Ответственный за процесс" 'Формирование данных для вывода в отчет result="<table border='1'>" set matrix = document.ItemByGUID(matrixGUID).Matrix cellCount=matrix.CellCount(element1_ID) for i=0 to cellCount-1 element2_ID=matrix.SecondClassificatorID(element1_ID,i) sRole=matrix.AttributeValueString(element1_ID,element2_ID,matrixAttributeName) if (sRole=matrixAttributeValue) then set element2=document.ItemByID(element2_ID) element2Numeration=document.numeration(element2_ID,0) element2Name=element2.ItemName result=result+"<tr><td>"+element2Numeration+"</td>" result=result+"<td>"+element2Name+" ("+sRole+")"+"</td></tr>" end if next Report=result+"</table>" End Function 60 Бизнес-инженер Пример формирования отчетов по матрице Вывод в отчет нумерации и названий элементов классификаторов, связанных через матрицу с выбранным элементом классификатора 61 Бизнес-инженер Работа с графическими диаграммами. Общая индексация фигур графической диаграммы Объект MSVisio содержит свойства и методы для работы с графической диаграммой (График-студио диаграммой). Ссылку на этот объект получают через свойство VisioObject объекта Classificator. Этот объект может использовать два типа индексации элементов (объектов и связей) графических диаграмм и два соответствующих способа обращения к их данным. Для решения различных задач удобна своя система индексов. Общие индексы Первый способ индексирования основан на рассмотрении всей совокупности элементов, размещенных на графической диаграмме (см. следующий слайд). На диаграмме процесса, приведенной на следующем слайде, размещены 44 элемента (20 объектов и 24 связи). Порядок их индексации, аналогичный тому, порядку который использует программный продукт Mocrosoft Visio, за тем исключением, что в Mocrosoft Visio первый элемент имеет индекс 1, а в объекте MSVisio Бизнес-инженер - 0. К данным 44 элементов, размещенных на диаграмме можно получить доступ по общему индексу, который меняется от 0 до 43. Далее такая система индексов называется общей индексацией. Помимо методов объекта MSVisio программного продукта Бизнес-инженер для работы с графическими диаграммами, возможно использование также прямых методов программы Mocrosoft Visio. Внимание! В случае использования исходных методов Microsoft Visio общая индексация фигур на графической диаграмме начинается с 1, а в случае использования методов Бизнес-инженер, разработанных на основе исходных методов, индексация начинается с 0. 62 Бизнес-инженер Работа с графическими диаграммами. Общая индексация фигур графической диаграммы 63 Бизнес-инженер Входящая и выходящая индексация фигур диаграммы Входящие и выходящие индексы связей Второй способ индексирования основан на рассмотрении одного элемента и всех его входящих и исходящих связей. Ниже на рисунке слева для объекта графической диаграммы процесса показан пример индексации по входящим связям, а на рисунке справа индексация элементов по выходящим связям. Далее такая система индексов будет называться соответственно входящей индексацией и выходящей индексацией. 64 Бизнес-инженер Другие виды индексация фигур диаграммы Помимо использования общих, входящих и выходящих индексов к данным элементов графической диаграммы можно обращаться по идентификаторам. Существует две системы идентификаторов, каждая из которых удобна для определенных задач. Идентификатор (Visio) Первая из них используется в программном продукте Microsoft Visio, который задает каждому элементу диаграммы индивидуальный идентификатор. В программном продукте Бизнес-инженер для удобства используются идентификаторы Microsoft Visio с отрицательным знаком и все они меньше нуля. Но эта система идентификации не всегда достаточна, так в программном продукте Бизнесинженер один и тот же элемент проекта может присутствовать на различных графических диаграммах, то есть одному элементу проекта на различных диаграммах могут соответствовать различные графические фигуры (элементы), которые должны иметь одинаковые идентификаторы, соответствующие идентификатору элемента проекта. Идентификатор (thisID) По этой причине часто используется вторая система идентификаторов (thisID) элементов программного продукта Бизнес-инженер. Так как некоторые элементы графических диаграмм могут не иметь идентификатора (thisID),то для работы с ними применяется первая система идентификаторов. Поэтому в методах и свойствах программного продукта Бизнес-инженер, работающих с графическими диаграммами используются обе системы идентификаторов, при этом идентификаторы программного продукта Microsoft Visio называются идентификаторами (Visio), а идентификатор программного продукта Бизнес-инженер - идентификаторами (thisID). 65 Бизнес-инженер Виды методов работы с графическими диаграммами Исходные методы MS Visio - Общий индекс начинается с 1 - Приведены в документации по MS Visio https://msdn.microsoft.com/en-us/library/aa730930(v=office.12).aspx Методы Бизнес-инженер - Общий индекс начинается с 0 - Написаны с использованием исходных методов MS Visio - Приведены в документации по объектами и методам сценариев системы Бизнес-инженер 66 Бизнес-инженер Получение ссылок на объекты графических диаграмм Для методов MS Visio set shapes = visioControl.Document.Pages(1).Shapes определение объекта фигуры графической диаграммы НА графической диаграмме для методов MS Visio set shapes = document.ItemByID(element_ID).Node.VisioObject.Document.Pages(1).Shapes определение объекта фигуры графической диаграмме ВНЕ графической диаграммы для методов MS Visio Для методов Бизнес-инженер set shapes = Diagram определение объекта фигуры графической диаграмме НА графической диаграмме для методов Бизнес-инженер set shapes = document.ItemByID(element_ID).Node.VisioObject определение объекта фигуры графической диаграмме ВНЕ графической диаграммы для методов Бизнес-инженер 67 Бизнес-инженер Работа с графическими диаграммами методами MS Visio Определение значений фигур и присвоение значений фигурам графической диаграммы set shapes = visioControl.Document.Pages(1).Shapes определение объекта фигуры графической диаграмме НА графической диаграмме для методов MS Visio set shapes = document.ItemByID(element_ID).Node.VisioObject.Document.Pages(1).Shapes определение объекта фигуры графической диаграмме ВНЕ графической диаграммы для методов MS Visio shapeCount = shapes.Count определение количества фигур на графической диаграмме set shape = shapes(Index) определение фигуры на графической диаграмме с общим индексом "Index" (возможные значения общего индекса: 1,...,shapeCount) shape_text = shape.Text определение строки в текстовом поле фигуры shape.Text = shape_text присвоение строки текстовому полю фигуры shape_master_name = shape.Master.Name определение имени мастера фигуры shape_name = shape.Name определение имени фигуры shape_name_universal = shape.NameU определение универсального имени фигуры shape_NameID = shape.NameID определение имени ID фигуры 68 Бизнес-инженер Работа с графическими диаграммами методами MS Visio Определение значений фигур, присвоение значений фигурам, добавление и удаление фигур на графической диаграмме cell_Exist = shape.CellExists("BeginX",0) определение наличия у фигуры ячейки "BeginX", которая есть только у связей/стрелок (возможные значения -1 если ячейка существует и 0 если ячейка отсутствует) value_real = shape.Cells("PinX").Result("mm") определение действительного значения ячейки "PinX" фигуры в единицах "mm" (задание единиц для значения не является обязательным) shape.Cells("PinX").Result("mm") = value_real присвоение действительного значения ячейке "PinX" фигуры в единицах "mm" (задание единиц для значения не является обязательным) formula = shape.Cells("PinX"). Formula определение формулы ячейки "PinX" фигуры shape.Cells("PinX").Formula/FormulaU/FormulaForceU = "formula" присвоение формулы ячейке "PinX" фигуры set shape = shape. Drop(shape_master_name,PinX,PinY) добавление новой фигуры на графической диаграмме с заданием имени мастера и координат shape.Delete удаление фигуры на графической диаграмме (при этом общие индексы других фигур с большими значениями уменьшаются на единицу) shape = addedShape определение фигуры, добавленной на графическую диаграмму – используется в событийном сценарии "Добавление элемента [после]" shape = activeWindow.Selection.PrimaryItem определение фигуры, выделенной на графической диаграмме – используется в событийном сценарии «Выделение элемента [после]" 69 Бизнес-инженер Пример работы с графическими диаграммами Перестановка двух фигур на графической диаграмме Function VisioScript(visioControl) set shapes shapeCount = visioControl.Document.Pages(1).Shapes = shapes.Count if (shapeCount<>2) then Exit Function end if set shape1 = shapes(1) set shape2 = shapes(2) x1=shape1.Cells("PinX").Result("") x2=shape2.Cells("PinX").Result("") shape1.Cells("PinX").Result("")=x2 shape2.Cells("PinX").Result("")=x1 y1=shape1.Cells("PinY").Result("") y2=shape2.Cells("PinY").Result("") shape1.Cells("PinY").Result("")=y2 shape2.Cells("PinY").Result("")=y1 End Function 70 Бизнес-инженер Пример работы с графическими диаграммами Событийный сценарий «Добавление элемента [после]» - изменяет цвет заливки фигуры процесса при его добавлении на графическую диаграмму, а также изменяет толщину линии для всех добавляемых на графическую диаграмму связей Function AfterShapeAdd(VisioControl, AddedShape) 'Задание имени мастера фигуры процесса processMasterName="Process2BETEC" 'Код выполняемый после добавления фигуры процесса на диаграмму shape=vbNull s=addedShape.Master.Name test1 = (InStr(1,s,processMasterName+".",1)=1) test2 = (StrComp(s,processMasterName)=0) if (test1 or test2) then set shape=addedShape shape.cells("FillForegnd").formulaForceU="RGB(84,139,212)" end if 'Код выполняемый после добавления связи на диаграмму shape=vbNull set shape=addedShape if (shape.cellExists("BeginX",0)) then shape.cells("LineWeight").result("pt")=1.5 end if End Function 71 Бизнес-инженер Пример работы с графическими диаграммами Событийный сценарий «Выделение элемента [после]» - изменяет цвет и толщину границы фигуры при ее выделении на графической диаграмме Function AfterSelectionChange(VisioControl, ActiveWindow) set shape=activeWindow.Selection.PrimaryItem shape.Cells("LineColor").FormulaU="RGB(84,139,212)" shape.Cells("LineWeight").Result("pt")=3 End Function 72 Бизнес-инженер Пример работы с графическими диаграммами Семантическая проверка «Определение несвязанных стрелок на диаграмме» - изменяет цвет и толщину стрелок, несвязанных своими началом или окончанием с другими фигурами Function VisioScript(visioControl) set shapes=visioControl.Document.Pages(1).Shapes for i=1 to shapes.Count set shape=shapes(i) if (shape.CellExists("BeginX",0)) then formulaBeginX = shape.Cells("BeginX").Formula formulaEndX = shape.Cells("EndX").Formula testBegin1 = (InStr(1,formulaBeginX,"PAR(PNT",1)=0) testBegin2 = (InStr(1,formulaBeginX,"_WALKGLUE",1)=0) testBegin = (testBegin1 and testBegin2) testEnd1 = (InStr(1,formulaEndX,"PAR(PNT",1)=0) testEnd2 = (InStr(1,formulaEndX,"_WALKGLUE",1)=0) testEnd = (testEnd1 and testEnd2) if (testBegin or testEnd) then shape.Cells("LineWeight").ResultForce("pt") = 1.5 shape.Cells("LineColor").FormulaForceU = "RGB(255,0,0)" else shape.Cells("LineWeight").ResultForce("pt") = 0.24 shape.Cells("LineColor").FormulaForceU = "RGB(0,0,0)" end if end if next End Function 73 Бизнес-инженер Работа с графическими диаграммами методами Бизнес-инженер Определение значений фигур и присвоение значений фигурам графической диаграммы set shapes = Diagram определение объекта фигуры графической диаграмме НА графической диаграмме для методов Бизнес-инженер set shapes = document.ItemByID(element_ID).Node.VisioObject определение объекта фигуры графической диаграмме ВНЕ графической диаграммы для методов Бизнес-инженер shapeCount = shapes.ShapeCount определение количества фигур на графической диаграмме connectionCount = shapes. ConnectionsCount определение количества связей на графической диаграмме shape_text = shapes. shapes.ShapeText(Index) определение строки в текстовом поле фигуры на графической диаграмме с общим индексом "Index" (возможные значения общего индекса: 0,...,shapeCount-1) shapes. shapes.ShapeText(Index) = shape_text присвоение строки текстовому полю фигуры на графической диаграмме с общим индексом "Index" (возможные значения общего индекса: 0,...,shapeCount-1) shape_master_name = shapes.MasterName(Index) определение имени мастера фигуры на графической диаграмме с общим индексом "Index" (возможные значения общего индекса: 0,...,shapeCount-1) shape_custom_master_name = shapes.MasterElementName(Index) определение пользовательского имени мастера фигуры на графической диаграмме с общим индексом "Index" (возможные значения общего индекса: 0,...,shapeCount-1) 74 Бизнес-инженер Работа с графическими диаграммами методами Бизнес-инженер Определение входящих и выходящих связей, а также связанных фигур inConnectCount = shapes.InConnectsCount(Index) определение количества входящих связей для фигуры на графической диаграмме с общим индексом "Index" (возможные значения общего индекса: 0,...,shapeCount-1) outConnectCount = shapes.OutConnectsCount(Index) определение количества выходящих связей для фигуры на графической диаграмме с общим индексом "Index" (возможные значения общего индекса: 0,...,shapeCount-1) inConnectIndex = shapes.ConnectedInArrowIndex(Index,IndexInConnect) определение общего индекса входящей связи для фигуры на графической диаграмме с общим индексом фигуры "Index" (возможные значения общего индекса: 0,...,shapeCount-1) и входящим индексом связи "IndexInConnect" (возможные значения номера: 0,..., inConnectCount-1) outConnectIndex = shapes.ConnectedOutArrowIndex(Index,IndexOutConnect) определение общего индекса выходящей связи для фигуры на графической диаграмме с общим индексом фигуры "Index" (возможные значения общего индекса: 0,...,shapeCount-1) и выходящим индексом связи "IndexOutConnect" (возможные значения номера: 0,..., outConnectCount-1) sourceShapeIndex = shapes.ConnectedInShapeIndex(Index,IndexInConnect) определение общего индекса фигуры-поставщика входящей связи для фигуры на графической диаграмме с общим индексом фигуры "Index" (возможные значения общего индекса: 0,...,shapeCount-1) и входящим индексом связи "IndexInConnect" (возможные значения номера: 0,..., inConnectCount-1) targetShapeIndex = shapes.ConnectedOutShapeIndex(Index,IndexOutConnect) определение общего индекса фигуры-потребителя выходящей связи для фигуры на графической диаграмме с общим индексом фигуры "Index" (возможные значения общего индекса: 0,...,shapeCount-1) и выходящим индексом связи "IndexOutConnect" (возможные значения номера: 0,..., outConnectCount-1) 75 Бизнес-инженер Работа с графическими диаграммами методами Бизнес-инженер Определение значений фигур, присвоение значений фигурам, добавление и удаление фигур на графической диаграмме shape_element_ID = shape.NodeID(Index) определение идентификатора элемента классификатора, с которым связана фигура графической диаграммы с общим индексом "Index" (возможные значения общего индекса: 0,...,shapeCount-1) shape_hint = shape. MasterHintStyle(Index) определение всплывающей подсказки фигуры графической диаграммы с общим индексом "Index" (возможные значения типа данных: 0,1,... – см. документацию по сценариям) shape_hint = shape. shapeID(Index) определение идентификатора (MS Visio) фигуры графической диаграммы с общим индексом "Index" (возможные значения типа данных: 0,1,... – см. документацию по сценариям) shape_type = shape. ShapeType(Index) определяет тип данных фигуры графической диаграммы с общим индексом "Index" (возможные значения типа данных: 0,1,... – см. документацию по сценариям) set shape = shape. AddShape(shape_text,master_name,PinX,PinY) добавление новой фигуры на графической диаграмме с заданием строки для текстового поля фигуры, имени мастера и координат shape.Delete(Index) удаление фигуры на графической диаграмме с общим индексом фигуры "Index" (возможные значения общего индекса: 0,...,shapeCount-1, при этом общие индексы других фигур с большими значениями уменьшаются на единицу) 76 Бизнес-инженер Работа с графическими диаграммами методами Бизнес-инженер Свойства и методы Краткое описание property ShapeID(index) Определяет идентификатор (Visio) фигуры с заданным общим индексом. property BeginArrowPosition (ArrowVisioID) Определяет границу фигуры, к которой присоединено начало стрелки. property EndArrowPosition (ArrowVisioID) Типы свойств, возвращаемые значения, параметры и примеры Тип свойства Только чтение. Возвращаемые значения vbInteger - идентификатор (Visio) элемента графической диаграммы. Параметры index (vbInteger) – общий индекс элемента графической диаграммы. Возможные значения: 0,...,shapeCount-1. Тип свойства Только чтение. Возвращаемые значения vbInteger – значение определяющее границу фигуры, к которой присоединено начало/окончание стрелки. Определяет Возможные значения: границу фигуры, 0 - Левая граница; к которой 1 - Правая граница; присоединено окончание 2 - Нижняя граница; стрелки. 3 - Верхняя граница. В случае отсутствия присоединения, возвращается значение: -1. Параметры ArrowVisioID(vbInteger) - идентификатор (Visio) стрелки. Возможные значения: < 0 (меньше нуля). 77 Бизнес-инженер Пример работы с графическими диаграммами Семантическая проверка «Определение несвязанных стрелок на диаграмме» - изменяет цвет и толщину стрелок, несвязанных своими началом или окончанием с другими фигурами Function VisioScript(visioControl) set shapes=visioControl.Document.Pages(1).Shapes for i=1 to shapes.Count set shape = shapes(i) if (shape.CellExists("BeginX",0)) then shapeVisioID = diagram.ShapeID(i-1) positionBegin = diagram.BeginArrowPosition(shapeVisioID) positionEnd = diagram.EndArrowPosition(shapeVisioID) if ((positionBegin<0) or (positionEnd<0)) then shape.Cells("LineWeight").ResultForce("pt") = shape.Cells("LineColor").FormulaForceU = else shape.Cells("LineWeight").ResultForce("pt") = shape.Cells("LineColor").FormulaForceU = end if 1.5 "RGB(255,0,0)" 0.24 "RGB(0,0,0)" end if next End Function 78 Бизнес-инженер Пример формирования отчетов по графической диаграмме Вывод в отчет элементов графической диаграммы процесса с указанием предшествующих и последующих элементов Function Report(element_ID) 'Задание параметров connectName="WorkFlowBETEC" 'Задание имени мастера фигуры связи tableTag="width='50%' border='1' bordercolor='#000000' cellpadding='5' cellspacing='0'" tableTag=TableTag+" style='border-collapse:collapse; font-family:Arial; font-size:10pt; color:#000000;'" 'Формирование данных для отчета set shapes=document.itemByID(element_ID).Node.VisioObject shapeCount=shapes.ShapeCount 'Определение количества фигур result="<table "+tableTag+"><tr bgcolor='E6E6E6' style='text-align: center; font-weight: bold;'>" result=result+"<td>№</td><td>Событие/Процесс</td><td>Предшествующий элемент</td><td>Последующий элемент</td></tr>" for i=0 to shapeCount-1 'i – общий индекс фигуры s=shapes.MasterName(i) 'Определение имени мастера фигуры if (InStr(1,s,connectName,1)<>1) then inConnectCount=shapes.InConnectsCount(i) 'Определение количества входящих связей фигуры outConnectCount=shapes.OutConnectsCount(i) 'Определение количества выходящих связей фигуры result=result+"<tr valign='top'><td align='center'>" result=result+Cstr(i+1)+".</td><td>"+shapes.ShapeText(i)+"</td><td>" for j=0 to inConnectCount-1 sourceShapeIndex=shapes.ConnectedInShapeIndex(i,j) 'Определение общего индекса фигуры-поставщика для входящей связи result=result+shapes.ShapeText(sourceShapeIndex)+"<br>" next result=result+"</td><td>" for j=0 to outConnectCount-1 targetShapeIndex=shapes.ConnectedOutShapeIndex(i,j) 'Определение общего индекса фигурыпотребителя для выходящей связи result=result+shapes.ShapeText(targetShapeIndex)+"<br>" next result=result+"</td></tr>" end if next Report=result+"</table>" End Function 79 Бизнес-инженер Пример формирования отчетов по графической диаграмме Вывод в отчет элементов графической диаграммы процесса с указанием предшествующих и последующих элементов 80 Бизнес-инженер Пример формирования отчетов по графической диаграмме Вывод в отчет элементов графической диаграммы процесса с указанием предшествующих и последующих элементов 81 Бизнес-инженер Пример формирования отчетов по графической диаграмме Вывод в отчет элементов графической диаграммы процесса с указанием входов, выходов, поставщиков и потребителей Function Report(element_ID) 'Задание параметров connectName="ObjectFlowBETEC" 'Задание имени мастера фигуры связи tableTag="width='80%' border='1' bordercolor='#000000' cellpadding='5' cellspacing='0'" tableTag=TableTag+" style='border-collapse:collapse; font-family:Arial; font-size:10pt; color:#000000;'" 'Формирование данных для отчета set shapes=document.ItemByID(element_ID).Node.VisioObject shapeCount=shapes.ShapeCount 'Определение количества фигур result="<table "+tableTag+"><tr bgcolor='E6E6E6' style='text-align: center; font-weight: bold;'>" result=result+"<td>№</td><td>Процесс</td><td>Поставщик</td><td>Вход</td><td>Выход</td><td>Потребитель</td></tr>" for i=0 to shapeCount-1 'i – общий индекс фигуры s=shapes.MasterName(i) 'Определение имени мастера фигуры if (InStr(1,s,connectName,1)<>1) then inConnectCount=shapes.InConnectsCount(i) 'Определение количества входящих связей фигуры outConnectCount=shapes.OutConnectsCount(i) 'Определение количества выходящих связей фигуры result=result+"<tr valign='top'><td align='center'>" result=result+Cstr(i+1)+".</td><td>"+shapes.ShapeText(i)+"</td><td>" for j=0 to inConnectCount-1 sourceShapeIndex=shapes.ConnectedInShapeIndex(i,j) 'Определение общего индекса фигуры-поставщика для входящей связи result=result+shapes.ShapeText(sourceShapeIndex)+"<br>" next result=result+"</td><td>" for j=0 to inConnectCount-1 inConnectIndex=shapes.ConnectedInArrowIndex(i,j) 'Определение общего индекса входящей связи result=result+shapes.ShapeText(inConnectIndex)+"<br>" next result=result+"</td><td>" for j=0 to outConnectCount-1 outConnectIndex=shapes.ConnectedOutArrowIndex(i,j) 'Определение общего индекса выходящей связи result=result+shapes.ShapeText(outConnectIndex)+"<br>" next result=result+"</td><td>" for j=0 to outConnectCount-1 targetShapeIndex=shapes.ConnectedOutShapeIndex(i,j) 'Определение общего индекса фигуры-потребителя для выходящей связи result=result+shapes.ShapeText(targetShapeIndex)+"<br>" next result=result+"</td></tr>" end if next Report=result+"</table>" End Function 82 Бизнес-инженер Пример формирования отчетов по графической диаграмме Вывод в отчет элементов графической диаграммы процесса с указанием входов, выходов, поставщиков и потребителей 83 Бизнес-инженер Пример формирования отчетов по графической диаграмме Вывод в отчет элементов графической диаграммы процесса с указанием входов, выходов, поставщиков и потребителей 84 Бизнес-инженер 5. Вызов методов внешних СОМ-серверов Пример создания файла на диске, вывод в него данных и открытие файла Function outputDataFile(outputData) set myFSO = CreateObject("Scripting.FileSystemObject") set writeResult = myFSO.CreateTextFile("C:/Выполнение KPI.htm",true) writeResult.writeLine(outputData) writeResult.Close set myFSO = nothing set objShell = CreateObject("Shell.Application") objShell.ShellExecute "C:/Выполнение KPI.htm", "", "", "", 1 set objShell = nothing End Function 85 Бизнес-инженер Пример вызова функций Microsoft Excel (продолжение) 86 Бизнес-инженер Пример вызова функций Microsoft Excel (продолжение) 87 Бизнес-инженер Пример вызова функций Microsoft Excel (продолжение) 88 Бизнес-инженер Пример диаграммы сформированной системой Бизнесинженер с помощью вызова функций Microsoft Excel Диаграмма самооценки уровня зрелости по стандарту АРБ СКОРУБП 1. Продуктовая составляющая 5 9. Клиентская составляющая (раскрытие информации о 4 процессе и его составляющих) 3 2. Технологическая составляющая 2 8. Имущественнотехническая составляющая 3. Организационная составляющая 1 0 7. Кадровая составляющая 4. Управленческая составляющая 6. Программнотехническая составляющая 5. Информационная составляющая Уровень зрелости по составляющей 89 Общий уровень зрелости Бизнес-инженер Обмен данными с внешними источниками Пример обращения к базе данных Microsoft Access 90 Бизнес-инженер Работа с файлами на диске Пример работы с файлами на диске ' Listing 1. Code to Change Only One File Attribute Const ReadOnly = 1 Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.GetFile("C:\foo.txt") If file.Attributes And ReadOnly Then file.Attributes = file.Attributes And (Not ReadOnly) Else file.Attributes = file.Attributes Or ReadOnly End If ' Listing 2. The RenameFile Function Function RenameFile(oldName,newName) Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.GetFile(oldName) file.Name = newName End Function 91 Бизнес-инженер Пример работы с файлами на диске (продолжение) ' Listing 3. Script Using FSO Objects to Obtain a Directory Listing Const Archive = 0 Const ReadOnly = 1 Const Hidden = 2 Const System = 4 folderName = "C:\« ' Gets the collection of files. Set fso = CreateObject("Scripting.FileSystemObject") Set files = fso.GetFolder(folderName).Files ' Loops through the list of files. str = "" For Each f In files str = str & f.Name & vbTab & f.Size _ & vbTab & FormatAttrib(f.Attributes) str = str & vbCrLf Next MsgBox str Function FormatAttrib(attr) Dim str str = "" If attr And Archive Then str = str & "Archive, " If attr And ReadOnly Then str = str & "Readonly, " If attr And Hidden Then str = str & "Hidden, " If attr And System Then str = str & "System, " str = str & "Normal" FormatAttrib = str End Function 92 Бизнес-инженер