起步软件技术论坛-X3

 找回密码
 立即注册
搜索
楼主: huixiangtao

【结贴】寻找一种解决方案

[复制链接]
 楼主| 发表于 2009-10-28 16:47:34 | 显示全部楼层
怎么也没人回答了,暂且不问29楼的问题了。从25楼中,如何看出来我没有流程环境呢,我另外运行了一个流程中的功能,按了 ctrl+shift+alt+O, 也没看出来我的功能中有流程环境呀。
回复 支持 反对

使用道具 举报

发表于 2009-10-28 16:53:58 | 显示全部楼层
上面不是回答你了么?
没有流程环境,你的Flowbroker感应不到当前环境中的流程,那么自然而然的就不会触发他相关的事件了

附上 有流程环境的环境链

snap1.png

75.04 KB, 下载次数: 157

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-28 17:18:40 | 显示全部楼层
哦,另外找了个流程中的功能,按照你上图的路径找了一下,果然找到Tflowcontrol了,而在我正在完成的功能中却没有找到Tflowcontrol.
我又仔细地研究了一下15楼链接中的做法,这次理解的更彻底了,也觉得我的做法没有什么错误。我现在的情况是,就依照之前的代码,任务可以正常的回退给某人,只是流转窗体给弹出来了。我不希望弹出流转窗体,怎么办呢?
回复 支持 反对

使用道具 举报

发表于 2009-10-28 17:27:32 | 显示全部楼层
流程的流转规则中 【流转确认】 取消打勾。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-28 17:35:44 | 显示全部楼层
哎,都这么多帖子了。
我这是在一个与流程完全无关的功能中,模拟了流程环境,然后把功能运行起来,然后流转的。 这只是一个功能,根本不存在流程。
回复 支持 反对

使用道具 举报

发表于 2009-10-28 17:42:15 | 显示全部楼层
晕了,抱歉
这个还真没写过。
你看看这个帖子
http://bbs.justep.com/forum.php?mod=viewthread&tid=29926
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-29 11:08:25 | 显示全部楼层
我看了你推荐的链接。把我的代码改进了一下。
lFlowParam := TLoadFlowParam.Create;   //流程参数
       lTaskParam := TLoadTaskParam.Create;   //任务参数
       lTasks := TTasks.Create;
       lTaskslist:=TList.Create;
       try
         DoGetFlowGUIDs(flow_field_value,lFlowParam.GUIDs);
         lTaskParam.States := [TTaskState.tsStarted, TTaskState.tsProcessing, TTaskState.tsWaiting];
         //以给定的条件查询任务(这里给定的条件由lFlowParam和lTaskParam共同给出,lFlowParam的限定条件是流程Guid值,lTaskParam的限定条件:是按照任务状态,只查询出需要处理的任务)
         Flow.FlowEngine.GetTasks(lFlowParam, lTaskParam, lTasks);
        if lTasks.Count<>0 then
        begin
        lTaskMessage:=lTasks.Items[0].TaskMessages[0];
        lTaskslist.Add(lTasks.Items[0]);
        lFlowContext := GetFlowContext(GetPositionContext);
         if lFlowContext = nil then
          Exit;
           lOrgUrl := TOrgUrl.Create(lTaskMessage.ReceiverDeptID,lTaskMessage.ReceiverPositionID, lTaskMessage.ReceiverID);
            try
            FFlowControl.ExecuteTask(lTasks.Items[0], lOrgUrl);
            lFuncURL := GetTaskFuncURL(lTasks.Items[0]);
            lFunc := GetTaskFunc(lFlowContext, lFuncURL);
            FFlowControl.Func := lFunc;
            lFunc.Run('');
           finally
    lOrgUrl.Free;
  end;
  FlowBroker := TFlowBroker.Create(lFunc);
  flowbroker.OnCreateFlowBackFlowTasks:=FlowBroker1.OnCreateFlowBackFlowTasks;
FFlowControl.RegisterFlowBroker(FlowBroker);
  FFlowControl.FlowBack(lTaskslist);
  FFlowControl.UnRegisterFlowBroker(FlowBroker);
        end;
       finally
         lFlowParam.Free;
         lTaskParam.Free;
         lTasks.Free;
         lTaskslist.Free;
       end;
其中flowbroker1 是我在窗体上放的一个流程代理。
这样执行flowbroker.OnCreateFlowBackFlowTasks:=FlowBroker1.OnCreateFlowBackFlowTasks; 这句话的时候,果然执行到了flowbroker1的OnCreateFlowBackFlowTasks这个事件,我可以在这个事件中填写代码了。我的这个事件中取lFlowTask,要么是空,要么就出现错误。不知道怎么回事。可能跟我的流程环境是模拟的有关吧。这个事件中的FlowBroker就是上面FlowBroker := TFlowBroker.Create(lFunc);这句创建的。
出现错误时,错误图所下所示:

qq3.png

18.15 KB, 下载次数: 146

回复 支持 反对

使用道具 举报

发表于 2009-10-29 11:25:41 | 显示全部楼层
这说明根据环节取找任务,找不到。
至于为什么还是要请楼主结合上下文检查一下。
36楼的链接中 也是模拟的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-29 11:30:51 | 显示全部楼层
感觉,看到你的这个回答,我还是无从下手。
结合上下文,检查什么呢
回复 支持 反对

使用道具 举报

发表于 2009-10-29 11:31:54 | 显示全部楼层
我也不知道该怎么给你回答了。。。。
你先看看这个事件中 command.flowtasks.count是否不为0
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-15 05:04 , Processed in 0.044364 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表