Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Tflex Docs 12. Получение прикрепленных к бизнес - процессу объектов для обработки макросом, Каким образом получить ссылки на объекты прикрепленные к бизнес процессу для их обработки на этапе бизнес процедуры типа МАКРОС
 
При создании бизнес процедуры для объекта есть необходимость на определенном этапе переопределить его параметры или связи по алгоритмам расчитываемым на основании данных этого объекта. Этап типа "изменение параметров" не подходит, так как там подставляется заранее переделенное значение. Есть этап типа МАКРОС, но вот как в нем получит список подключенных объектов вопрос.
 
Первые 2 предложения не понял. Скорее всего из-за того, что не работал с бизнес-процессами.
В последнем, если имеется ввиду получение макросом списка объектов по связи, то используйте методы, перечисленные в справке по API в разделе "Работа со связями".
Главное - спокойствие!
 
Добрый день! Уверен данный пример вас полностью устроит

см. коментарии
и перед прочтением кода
см. администрирование системы\ системные справочники\пороцедуры
см. администрирование системы\ системные справочники\процессы
см. администрирование системы\ системные справочники\текущие действия процессов
внимательно на базовые типы справочников их группы параметров(перекликаются с api) и связи с действиями

т.к справка по api для процедур отсутствует

этот макрос используется в процедуре "проведение ИИ" по сути не важно на каком этапе его вставить в схему, так как он смотрит запущенные процесс и прикрепленные к нему документы

Удачи!


using System;

using System.Collections;

using System.Collections.Generic;

using System.IO;

using System.Linq;

using System.Windows.Forms;

using TFlex.DOCs.Model.Macros;

using TFlex.DOCs.Model.Macros.ObjectModel;



using TFlex.DOCs.Model.References.ActiveAction; //обязательно объявлять

using TFlex.DOCs.Model.References.ActiveActions; //обязательно объявлять

using TFlex.DOCs.Model.Processes.Events.Contexts; //обязательно объявлять, базовый класс для управления процессами

using TFlex.DOCs.Model.Processes.Events.Contexts.Data; //обязательно объявлять

using TFlex.DOCs.Model.References;

using TFlex.DOCs.Model.References.Procedures; //обязательно объявлять

using TFlex.DOCs.Model.References.Nomenclature.ModificationNotices;

using System.Text;

using System.IO;



public class Macro : MacroProvider

{

public Macro(MacroContext context)

: base(context)

{

}



private EventContext КонтекстСобытияБП //инициализируем данные процесса

{

get; set;

}



private StateObject Этап //инициализируем //инициализируем данные процесса

{

get; set;

}



private StateContextData ДанныеЭтапа //инициализируем данные процесса

{

get; set;

}



private ActiveActionData ДанныеТекущегоДействия //инициализируем данные процесса

{

get; set;

}



private ActiveActionReferenceObject ТекущееДействие //инициализируем данные процесса

{

get; set;

}



private ReferenceObject[] ОсновныеОбъекты // вспомогательные переменные для хранения интересующих вас объектов

{

get; set;

}



private ReferenceObject[] ВспомогательныеОбъекты

{

get; set;

}



public override void Run()

{

КонтекстСобытияБП = Context as EventContext;//контекст событий по БизнесПроцессу

if (КонтекстСобытияБП != null)

// получение списка объектов из процесса

{

ДанныеЭтапа= КонтекстСобытияБП.Data as StateContextData;

Этап = ДанныеЭтапа.State;

ТекущееДействие = ДанныеЭтапа.ActiveAction;

ДанныеТекущегоДействия = ТекущееДействие.GetData<ActiveActionData>();



ОсновныеОбъекты = ДанныеТекущегоДействия.GetReferenceObjects().ToArray(); // список объектов(указанных при запуске) вашего процесса.

// Конец





List<ReferenceObject> nomenclatureObjects = new List<ReferenceObject>();

List<ReferenceObject> undoCheckOutObjects = new List<ReferenceObject>();

bool needcheckIn = false;



foreach (ModificationNoticeWithActionsReferenceObject ro in ОсновныеОбъекты.OfType<ModificationNoticeWithActionsReferenceObject >())

foreach (ActionReferenceObject action in ro.ActionObjects)

{

try

{

if (action.Apply(out needcheckIn))

{



if (needcheckIn)

{

ReferenceObject changingObject = action.GetChangingObject();

if (!nomenclatureObjects.Contains(changingObject))

nomenclatureObjects.Add(changingObject);

}

}

else

if (needcheckIn)

{

ReferenceObject changingObject = action.GetChangingObject();

if (!undoCheckOutObjects.Contains(changingObject))

undoCheckOutObjects.Add(changingObject);

}



}

catch (Exception e)

{

TFlex.DOCs.Model.Processes.Objects.ExceptionManager.RegisterException(e);

if (needcheckIn && action != null)

{

ReferenceObject changingObject = action.GetChangingObject();

if (!undoCheckOutObjects.Contains(changingObject))

undoCheckOutObjects.Add(changingObject);

}

}

}

TFlex.DOCs.Model.Desktop.Desktop.CheckIn(nomenclatureObjects, "Выполнение автоматических действий", false);

TFlex.DOCs.Model.Desktop.Desktop.UndoCheckOut(undoCheckOutObjects.Where(o=>o!=null && o.CanUndoCheckOut));

}

}

}
Страницы: 1