Как работает InsUpdStageIntoBP

Автор SeUp, 03.04.14, 11:15:30

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

SeUp

Здравствуйте. Может ли кто-нибудь помочь в следующем вопросе Нужно создать (точнее добавить) пользователя в процесс, а затем добавить связи от этого пользователя к другим элементам бизнес процесса. Для этого нужны идентификаторы элементов между которыми создаётся связь.  Вопрос в следующем:  Как получить идентификатор элемента созданного процедурой InsUpdStageIntoBP?. У этой процедуры есть параметр inIdStage [in,out], что бы добавить  пользователя нужно на этот параметр передать null, но тогда куда возвращается результат с идентификатором.
Вообщем пишу вот так:
dcc_WF.AppServer.InsUpdStageIntoBP('Текст задания', 2, null , 0,1,role,user,nomSozdProc, 0 ,null,intRes, stErrorMessage);
При этом нужный пользователь добавляется в схему бизнес процесса, но мне обязательно нужен идентификатор.

stboris

может написать id:=dcc_WF.AppServer.InsUpdStageIntoBP('Текст задания', 2, null , 0,1,role,user,nomSozdProc, 0 ,null,intRes, stErrorMessage); ?
+ Благодарностей: 1

z-arthur

В справке написано:
ЦитироватьinIdStage
[in,out] Идентификатор стадии. Если null, стадия создается и возвращается ее идентификатор. Иначе изменяется стадия с указанным идентификатором. В режиме изменения стадии, если в качестве значения какого-либо аргумента (кроме inIdStage) передается null, соответствующий параметр стадии не меняется.
Поэтому, чтобы изменять существующую стадию БП, то нужно передавать inIdStage. Если создать новую стадию, то нужно писать как подсказали выше.
+ Благодарностей: 1

Chaa

Нужно передать идентификатор стадии по ссылке:
var
    LRouteItemID: OleVariant;
    LRouteItemIDRef: Variant;
begin
    LRouteItemID := Null;
    TVarData(LRouteItemIDRef).VType := varVariant or varByRef;
    TVarData(LRouteItemIDRef).VPointer := @LRouteItemID;

    dcc_WF.AppServer.InsUpdStageIntoBP('Текст задания', 2, null , 0,1,role,user,
        nomSozdProc, 0, LRouteItemIDRef, Null, Null, intRes, stErrorMessage);
end;
+ Благодарностей: 1

SeUp

Спасибо всем за оперативные ответы. Вот так  id:=dcc_WF.AppServer.InsUpdStageIntoBP('Текст задания', 2, null , 0,1,role,user,nomSozdProc, 0 ,null,intRes, stErrorMessage); ничего не получается, потому что эта процедура ничего не возвращает (как например GetInfoAboutOperation и многие другие возвращают набор данных), а вот начсёт передачи идентификатора по ссылке это что то новое для меня пойду разбираться. Ещё раз всем спасибо.

SeUp

Что то неполучается. Компилируется без ошибок, но вот во время выполнения плагина вылетает ошибка "EOleSysError". А не могли бы вы объяснить почему вместо одного параметра (inIdStage), Вы пишете целых три (LRouteItemIDRef, Null, Null). Что то до меня не доходит. Как это вообще примерно работает?

Chaa

Какие параметры нужны InsUpdStageIntoBP лучше всего посмотреть в библиотеке типов сервера приложений:
http://forum.ascon.ru/index.php/topic,19324.msg178483.html#msg178483

В разных версиях Лоцмана количество параметров InsUpdStageIntoBP разное.