Програмування в FossLook
Припустимо, ви створили свою бібліотеку документів і новий тип документа в ній, все працює і тут у вас виникає питання:
«А чи можна додати будь-яку логіку?». І в цьому питанні нам допоможе програмування.
Нижче ми розглянемо типові приклади, які допоможуть вам отримати уявлення про можливості платформи FossLook і розробки для автоматизації власних
бізнес-процесів на підприємстві.
Для того щоб зрозуміти матеріал, викладений в цій статті, скачайте два файли:
Файл «Моя бібліотека.zip» не потрібно розпаковувати, просто виберіть пункт "Імпорт" в розділі "Бібліотеки документів" програми адміністрування
і вкажіть до нього шлях
Після виконання процесу імпорту ви повинні перезапустити програму адміністрування. З'явиться нова бібліотека. В гілці «Папки» створіть папку з будь-яким ім'ям,
в ній ми будемо створювати наші документи для налагодження. Результат, який повинен у вас вийти, на малюнку нижче
Для того щоб переконатися що все працює,
створіть тестовий документ в ній.
Анатомія документів (структура даних)
Всі сутності в системі можуть зберігати різні властивості в собі. Наприклад, папка зберігає в собі ім'я і набір посилань на збережені в ній документи,
у співробітника є ім'я, логін, а ваш документ буде зберігати в собі ті дані, які ви вибрали, створюючи поля в ньому.
Як дізнатися, які властивості зберігає в собі даний об'єкт?
Припустимо, у нас є створений документ, відкриємо його з-під адміністрування, і подивимося на вкладку «Об'єкт»
(вона недоступна звичайним користувачам, але корисна для адміністрування і розробки)
Як ми бачимо, тут видно наші властивості. Зверніть увагу на опцію «Show tags» -
з її допомогою можна включати відображення тегів полів, які нам потрібні пізніше.
Типізація об'єктів
Всі об'єкти мають свою типізацію, і визначаються вони властивістю «Категорія». В окремому випадку це може бути «Тип документа».
Де побачити: на вкладці об'єкт ви можете побачити властивість «Категорія», де знаходиться посилання на категорію, яка описує об'єкт.
Ви завжди можете знайти категорію своїх документів в тій бібліотеці, де вони були створені - в гілці «Типи документів»
Як бачимо, в категорії знаходяться поля, які описують дані для нашого документа.
Одна категорія може успадковуватися від іншої (через «Батьківські категорії»).
Структура категорії
Категорія має псевдонім та унікальне ім'я.
Відображуване ім'я - видно користувачам, тому воно зазвичай називається смисловим ім'ям, наприклад, «Вхідний лист», «Співробітник», «Папка».
Унікальне ім'я - для технічних цілей, воно може бути як російською так і на англ.мові, наприклад «Моя бібліотека.Документ.x56757654».
Саме унікальне ім'я ми і бачили в гілці «Типи документів» і на вкладці «Об'єкт» нашого документа.
Категорія включає в себе:
- поля (атрибути) - описують окремі поля, які можуть бути в об'єкті;
- батьківські категорії - описують «успадкування» даної категорії від інших,
аналогічно як виконано успадкування в програмуванні - об'єкт отримує поля від базових категорій;
- скрипти - для розширення функціональності, фактично це класи на C#;
- шаблони - стосовно типу документа це друковані форми, які може використовувати користувач
Поля в категорії
Поле (або атрибут) в категорії описує властивість, яка може зберігати в собі об'єкт даної категорії.
Якщо ми подивимося на вкладку «Об'єкт» поля «Зміст» в нашому документі, то побачимо
Як бачимо, поле саме по собі також складається з безлічі налаштувань, але з точки зору
програмного доступу нам цікаві дві властивості: «Ідентифікатор властивості» і «Тип властивості».
Разом вони формують так званий «тег поля» - старша частина це ідентифікатор,
а молодша описує тип поля. В нашому випадку тег 0x8074001E.
Клас C# для програмування картки
Якщо ви подивитеся в гілку «Скрипти» нашого типу документа, то побачите об'єкт «Default form script» і два файлу вихідних кодів в ньому.
Вихідні файли - мовою C#, і в них перебуває реалізація за замовчуванням.
Якщо ми хочемо додати функціонал на картку документа, то нам потрібно буде розширити і
доопрацювати файл Form.cs - саме в ньому основний вихідний код. Файл FormInfo.cs є
фабрикою класу і містить в собі «зв'язок» з тим типом документа (категорією) для якої він має бути використаний.
Можливості клієнтської частини з точки зору програмування досить високі - ви зможете додати нові команди на панель інструментів,
автоматично заповнювати поля на картці, регулювати коректність введення даних і т.п.
Проект Visual Studio 2010 для розробки
Ви можете використовувати тестовий проект для власних розробок.
Передбачається що на машині, де ви будете його використовувати, встановлений клієнт FossLook (збірки підключені безпосередньо на нього).
Ви також можете використовувати клієнт FossDoc (зі складу «Документообіг», просто скоректуйте шляху до зборок).
Тестовий СОЛЮШЕН FossDocTest.sln містить один проект-збірку, до якої включено два файла - Form.cs і FormInfo.cs.
Сама збірка нам потрібна для зручності розробки, але результат компіляції (як dll) нам не потрібен -
замість цього ви повинні використовувати два файла-исходника Form.cs і FormInfo.cs, які ми будемо поміщати на сервер в об'єкт DefaultFormScript.
При роботі клієнтської частини вихідні коди автоматично завантажуються з сервера і компілюються на льоту на стороні клієнта.
Працювати з об'єктом зручніше через вкладку «Вкладені файли», як показано на малюнку нижче
Налагодження
Для налагодження вам буде потрібно включити властивість «Налагоджувальний режим» (на вкладці Об'єкт у DefaultFormScript),
і ви зможете виконати «Attach» отладчиком студії прямо до клієнта
Програмуємо автоматичне заповнення полів
Типовий завданням є проблема автоматичного заповнення полів.
Наприклад, часто буває потрібно відразу встановити поле «Термін виконання» в задану дату,
або задати поле «Хто готував» в поточного користувача, який створює даний документ.
У вихідному коді проекту вже знаходиться файл Form.cs, який автоматично заповнює
поля і додає кнопку на панель інструментів. Код забезпечений коментарями, і буде корисний для вивчення,
щоб ви змогли по аналогії вирішувати подібні завдання. Через пункт меню «View Code» ви можете переглянути
вихідний код класу картки, і підправити його під свої завдання.
Як ви побачите, всі дії при роботі з полями зводяться до викликів властивості Fields, звертаючись по тегу
Змінна _TagText в прикладі несе тег поля, і ви повинні завжди вказувати правильно теги своїх полів, так
як при створенні нових полів теги у них будуть інші. Побачити тег можна на вкладці «Об'єкт» у поля.
Складнішим випадком є установка значень довідкового поля. Тут важливо розуміти,
що в значенні довідкового поля знаходиться не текстове ім'я, а ідентифікатор об'єкта довідкової записи.
Результат роботи
У підсумку вам потрібно замінити в об'єкті «Default form script» файл Form.cs на новий файл з проекту-прикладу, щоб ваші зміни вступили в силу.
Перезапустивши клієнт (або адміністрування), побачите нову кнопку «Моя тест кнопка» на панелі інструментів:
При натисканні на неї буде видане повідомлення, і заповнені поля.
Ви можете робити заповнення полів і не після натискання на кнопку, а автоматично -
в цьому випадку функції заповнення полів потрібно викликати з методу ActivateRoutine().