Delphi , Work Flow , Автоматические Операции

Автор Gefakra, 06.04.21, 11:37:49

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

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

Gefakra

Есть автоматическая операция, в которой выводится список пользователей группы и выбирается исполнитель задания, исполнителю отправляется уведомление по почте.
Но назначить задание можно только на конкретного пользователя группы, а мне надо , что бы была возможность назначить задание на группу. Подскажите пожалуйста как это сделать?

Program Main;
begin     
  Result:=Route.vrParamValue('Результат, если никого не выбрали');
  cdsData := TClientDataSet.Create(nil);
  EccdsData := TClientDataSet.Create(nil);
  MailTheme:= Route.vrParamValue('Тема');                                                                         
  MailData:= Route.vrParamValue('Текст сообщения');   
  for i := 0 to Route.inNextStageCount - 1 do
    begin   
      Stage := Route.NextStage(i);   
      if ((Stage.stType = 'Stage') or (Stage.stType = 'SubFlow')) then
          begin                                         
              if (Stage.stState<>'psCoordinated') and (Stage.stState<>'psExamined')  then                                                                                                                                   
                  begin       
                    if (Stage.inIdRole > 0) {and (Stage.inIdUser = 0)and (Stage.stState = 'psNone')} then
                        begin   
                             showmessage('окно выбора');
                             cdsData.Data := GetUserList(Stage.inIdRole);   ///     список пользователей подсистемы  (индифекатор должности, являющийся исполнителем стадии)                                                                                                     
                             inIdUser := ExecPluginFunction('..\Workflow\PlugIns\STO.dll', 'ChooseExecutor',[cdsData.Data, Route.vrParamValue('Комментарий'),Stage.stRoleName]);                           
                             if inIdUser > 0 then result:=Stage.SetExecutor(inIdUser);
                             else result := false           
                        end;                     
                   end;                                                                                 
                   else if Stage.stState = 'psExamined' then             
                          begin                                                                                       
                             Stage.SetState('psNone')                                 
                             Route.Save;                                                                                                                               
                             Stage.SetState('psConsider')                                                                         
                             Route.Save;                         
                             Stage.SetState('psExamined')
                             Route.Save;
                             result:=true                                     
                             break   
                          end;                                                   
                   else  if (Stage.stState = 'psCoordinated') then
                         begin
                            if Stage.RemoveExecuted = False then
                               begin
                                  SetErrorMessage(GetErrorMessage + CRLF + 'Не удалось изменить статус пункта"' + Stage.stRoleName +'".');
                                  result := False;
                               end
                            else
                              begin
                                Route.Save;                 
                                result:=true             
                                break
                              end
                         end;                 
          end                               
    end    // конец цикла for                     
  if (result = true) then                                                             
     begin           
         //cdsUser:=TClientDataSet.Create(nil);
         //cdsUser.Data:=RunMethod('WFGetUserProperties', ['198']);
         EccdsData.Data := GetUserList(Stage.inIdRole);
         userEmail:=nil;
         EccdsData.first;     
         for i:=0 to EccdsData.recordcount-1 do   
              begin
                if (EccdsData.FieldByNAme('_ID').asstring = inIdUser) or (EccdsData.FieldByNAme('_NAME').asstring = Stage.stUserName) then
                   begin                         
                      userEmail:=EccdsData.FieldByNAme('_MAIL').asstring;                                         
                   end                                                                         
                 EccdsData.next;                   
               end                                               
          if (PDMObject.inID > 0) then MailData:='Объект: ' + PDMObject.stProduct + '<br>' + MailData;
          ExecPluginFunction('\\ascon\COD\dll\WFapi.dll', 'SendEmail', [useremail, MailTheme, MailData]);
      end;                                                         
  if not result then showmessage('Для завершения операции необходимо назначить исполнителя следующей стадии')
  SetResultOperation(result);