|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
|
<head>
|
|
|
<meta charset="UTF-8" />
|
|
|
<title>ccfow</title>
|
|
|
<link href="../../Scripts/easyUI145/themes/color.css" rel="stylesheet" />
|
|
|
<link href="../../Scripts/easyUI145/themes/default/easyui.css" rel="stylesheet" type="text/css" />
|
|
|
<link href="../../../DataUser/Style/ccbpm.css" rel="stylesheet" type="text/css" />
|
|
|
<script type="text/javascript" src="../../Scripts/bootstrap/js/jquery.min.js"></script>
|
|
|
<script type="text/javascript" src="../../Scripts/bootstrap/js/bootstrap.min.js"></script>
|
|
|
<script src="../../Scripts/QueryString.js" type="text/javascript"></script>
|
|
|
<script src="../../Scripts/config.js" type="text/javascript"></script>
|
|
|
<base target="_self" />
|
|
|
<script src="../Admin.js"></script>
|
|
|
|
|
|
<script language="javascript" type="text/javascript">
|
|
|
var basePath = basePath()
|
|
|
//页面启动函数.
|
|
|
$(function () {
|
|
|
|
|
|
|
|
|
$("#Msg").html("<img src=../../Img/loading.gif /> 正在加载,请稍后......");
|
|
|
var flowNo = GetQueryString("FK_Flow");
|
|
|
$("#TB_Caption").html("<a href='API.htm?FK_Flow=" + flowNo + "' > URL调用接口</a> | <a href='APICode.aspx?FK_Flow=" + flowNo + "'>代码开发API</a> | <a href='APICodeFEE.htm?FK_Flow=" + flowNo + "' >FEE开发API</a> ");
|
|
|
$("#TB_FQ").html(basePath + "/App/Simple/Start.aspx");
|
|
|
$("#TB_DB").html(basePath + "/App/Simple/ToDoList.aspx");
|
|
|
$("#TB_ZT").html(basePath + "/App/Simple/Runing.aspx");
|
|
|
$("#TB_CX").html(basePath + "/App/Simple/Search.htm");
|
|
|
$("#Msg").html("");
|
|
|
});
|
|
|
function basePath() {
|
|
|
var curWwwPath = GetHrefUrl();
|
|
|
var pathName = window.document.location.pathname;
|
|
|
var pos = curWwwPath.indexOf(pathName);
|
|
|
var localhostPaht = curWwwPath.substring(0, pos);
|
|
|
var projectName = pathName.substring(0, pathName.substr(1).indexOf('/') + 1);
|
|
|
return localhostPaht + projectName;
|
|
|
}
|
|
|
|
|
|
</script>
|
|
|
</head>
|
|
|
<body>
|
|
|
<div class="container-full">
|
|
|
<div class="attrnode-bar-header">
|
|
|
<strong>API </strong>
|
|
|
</div>
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>
|
|
|
登录与门户API
|
|
|
</legend>
|
|
|
<ol>
|
|
|
<li>首先要进行代码集成与组织机构的集成 </li>
|
|
|
<li>其次在自己的系统登录界面,登录成功后要执行ccbpm的框架登录。</li>
|
|
|
<li>所谓的登录就是调用ccbpm的登录接口,如左边的代码所示。</li>
|
|
|
</ol>
|
|
|
<br />
|
|
|
<font color=green>
|
|
|
// 如下代码需要写入您的系统校验密码与用户名之后。
|
|
|
</font>
|
|
|
<br />
|
|
|
|
|
|
|
|
|
<font color=blue> string</font> userNo = <font color=red>"zhangsan"; </font>
|
|
|
<br />
|
|
|
BP.WF.<font color=blue>Dev2Interface</font>.Port_Login(userNo);
|
|
|
|
|
|
</fieldset>
|
|
|
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>菜单</legend>
|
|
|
<ol>
|
|
|
<li>发起:一个操作员可以发起的工作 </li>
|
|
|
<li>待办:等待处理的工作。</li>
|
|
|
<li>在途:我参与的,但是这条流程还没有结束的流程。</li>
|
|
|
<li>抄送:不需要我处理,但是需要我知晓的工作。</li>
|
|
|
</ol>
|
|
|
|
|
|
<legend>发起:</legend>
|
|
|
<br />
|
|
|
//获得指定人员的可以发起的流程列表,调用这个接口返回一个datatable, 可以参考一个demo实现发起列表的输出。
|
|
|
<br />
|
|
|
|
|
|
<br />
|
|
|
<b>
|
|
|
System.Data.<font color=green>DataTable</font> dtStart = BP.WF.<font color=green>Dev2Interface</font>.DB_GenerCanStartFlowsOfDataTable(<font color=red>"zhangsan"</font>);
|
|
|
<br />
|
|
|
</b>
|
|
|
<!-- <br>实现列表输出代码,请参考: <br>
|
|
|
<font color=gree><b id="TB_FQ"></b></font>
|
|
|
<br />
|
|
|
运行Demo: <a href="./../../App/Simple/Start.htm" target="_blank">发起流程</a>-->
|
|
|
|
|
|
<legend>待办:</legend>
|
|
|
<br />
|
|
|
//获得指定人员的待办,调用这个接口返回一个datatable, 可以参考一个demo实现发起列表的输出。
|
|
|
<br />
|
|
|
<font color=green><b> <font color=green>DataTable</font> dtTodolist = BP.WF.<font color=green>Dev2Interface</font>.DB_GenerEmpWorksOfDataTable();</b></font>
|
|
|
<!--<br>实现列表输出代码,请参考: <br>
|
|
|
<font color=gree><b id = "TB_DB"></b></font>
|
|
|
<br />
|
|
|
运行Demo: <a href="./../../App/Simple/ToDoList.aspx" target="_blank">工作待办</a>-->
|
|
|
|
|
|
<legend>在途:</legend>
|
|
|
<br />
|
|
|
//获得指定人员的在途,调用这个接口返回一个datatable ,代码参考:。
|
|
|
<br />
|
|
|
<font color=green>DataTable</font> dtRuning = BP.WF.<font color=green>Dev2Interface</font>.DB_GenerRuning();</b>
|
|
|
<!-- <br>实现列表输出代码,请参考: <br>
|
|
|
<font color=gree><b id="TB_ZT"></b></font>
|
|
|
<br />
|
|
|
运行Demo: <a href="./../../App/Simple/Runing.aspx" target="_blank">在途工作</a>-->
|
|
|
|
|
|
<legend>查询:</legend>
|
|
|
<br />
|
|
|
//ccbpm给你提供了一个link ,您可以调用这个link ,也可以自己去根据代码实现。
|
|
|
<br />
|
|
|
<br />实现列表输出代码,请参考: <br />
|
|
|
<font color=gree><b id="TB_CX"></b></font>
|
|
|
<br />
|
|
|
运行Demo: <a href="./../../App/Simple/Search.htm" target="_blank">查询</a>
|
|
|
|
|
|
</fieldset>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>创建WorkID</legend>
|
|
|
<ol>
|
|
|
<li>创建工作ID是启动流程的开始。 </li>
|
|
|
<li>ccbpm的工作ID是一个Int64位的整数,始终是按照顺序号+1产生的。</li>
|
|
|
<li>该workid全局唯一,并且没有重复性,该信息记录到Sys_Serial,WorkID的生成从100开始。</li>
|
|
|
<li>该workid全局唯一,并且没有重复性,该信息记录到Sys_Serial,WorkID的生成从100开始。</li>
|
|
|
|
|
|
</ol>
|
|
|
//传入流程编号,调用创建一个工作ID。
|
|
|
<br />
|
|
|
<font color=blue>Int64</font> workid = BP.WF. <font color=blue>Dev2Interface</font>.Node_CreateBlankWork(<font color=red>"001"</font>);
|
|
|
</fieldset>
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>发送 - 简单发送</legend>
|
|
|
<ol>
|
|
|
<li>工作发送就是让节点向下运动。 </li>
|
|
|
<li>调用接口执行发送后,返回一个执行结果的对象,该对象是流程引擎执行过程中的变量。</li>
|
|
|
<li>解析该变量,可以检查出流程是否完成,运行到那一个节点上去了,下一个节点谁可以处理工作?</li>
|
|
|
<li>它的流向,是根据流程设计的规则执行的。</li>
|
|
|
<li>它的接收人,是根据接受人的规则确定的。</li>
|
|
|
</ol>
|
|
|
<font color=green>//传入流程编号, WorkID执行发送. </font><br />
|
|
|
BP.WF.<font color=blue>SendReturnObjs</font> objs= BP.WF.<font color=blue>Dev2Interface</font>.Node_SendWork(<font color=red>"001"</font>,workid);<br />
|
|
|
<br />
|
|
|
|
|
|
<font color=green> // 检查流程是否结束? </font><br />
|
|
|
<font color=blue>bool</font> isFlowOver = objs.IsStopFlow;<br />
|
|
|
<br />
|
|
|
|
|
|
<font color=green> // 获得发送到那个节点上去了? </font><br />
|
|
|
<font color=blue>int</font> toNodeID = objs.VarToNodeID;<br />
|
|
|
<font color=blue>string</font> toNodeName = objs.VarToNodeName;<br />
|
|
|
<br />
|
|
|
|
|
|
<font color=green>// 获得发送给谁了? 注意:这里如果是多个接受人员就会使用逗号分开。 </font><br />
|
|
|
<font color=blue>string</font> toEmpID = objs.VarAcceptersID;<br />
|
|
|
<font color=blue>string</font> toEmpName = objs.VarAcceptersName;<br />
|
|
|
<br />
|
|
|
|
|
|
<font color=green>// 输出提示信息, 这个信息可以提示给操作员. </font><br />
|
|
|
<font color=blue>string</font> infoMsg = objs.ToMsgOfHtml(); <br />
|
|
|
<br />
|
|
|
</fieldset>
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>发送 - 要指定发送给谁?发送到那个节点?(万能发送接口)</legend>
|
|
|
<ol>
|
|
|
<li>如果程序员知道下一步要发送给谁,发送到那一个节点的情况下,就可以调用这个接口。</li>
|
|
|
<li>该接口就会摆脱流程引擎设计的方向条件规则与接受人规则。</li>
|
|
|
</ol>
|
|
|
<font color=green> //如果确定了(或者自己计算好了)下一步要达到的节点,下一步的接受人,就可以按照如下格式调用。</font><br />
|
|
|
BP.WF.SendReturnObjs objs = null;
|
|
|
objs = BP.WF.<font color=blue>Dev2Interface</font>.Node_SendWork(<font color=red>"001"</font>, workid, 103, <font color=red>"zhangsan"</font> );
|
|
|
<br />
|
|
|
<font color=green>//发送给一个人,如果发送给多个人用逗号分开比如: zhangsan,lisi,wangwu </font>
|
|
|
<br />
|
|
|
<br />
|
|
|
|
|
|
<font color=green>//下面调用方式,是知道要发送到那一个节点,但是不知道要发送给谁,让当前的节点定义的接受人规则来确定。</font><br />
|
|
|
objs = BP.WF.<font color=blue>Dev2Interface</font>.Node_SendWork(<font color=red>"001"</font>, workid, 103, null);
|
|
|
<br />
|
|
|
<br />
|
|
|
|
|
|
|
|
|
<font color=green> //下面调用方式,是知道要发送到那些人,但是不知道要发送到那个节点,让当前的节点定义的方向条件来确定。</font><br />
|
|
|
objs = BP.WF.<font color=blue>Dev2Interface</font>.Node_SendWork(<font color=red>"001"</font>, workid, 103,<font color=red>"zhangsan"</font>);
|
|
|
<br />
|
|
|
<br />
|
|
|
|
|
|
<font color=green> // 输出提示信息, 这个信息可以提示给操作员.</font><br />
|
|
|
<font color=blue>string</font> infoMsg = objs.ToMsgOfHtml(); </font>
|
|
|
<br />
|
|
|
</fieldset>
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>撤销</legend>
|
|
|
<ol>
|
|
|
<li>撤销是发送的逆向操作。</li>
|
|
|
<li>撤销可以调用ccbpm提供的撤销窗口完成,这是最简单的方式。</li>
|
|
|
<li>地址为:/WF/WorkOpt/UnSend.htm 参数为: FK_Flow,FK_Node,WorkID,FID,当前流程的4大参数。</li>
|
|
|
<li>如果需要在其他设备上工作,或者要自己写一个移交界面,请参考。</li>
|
|
|
<li>能否被撤销,是有当前活动节点的撤销规则所决定的。</li>
|
|
|
<li>撤销的功能显示在,在途的流程列表里,只有在途的工作才能被撤销。</li>
|
|
|
<li>在途工作:顾名思义,就是我参与的工作,并且工作尚未完成。</li>
|
|
|
<li>回滚流程,是在流程结束后需要重新在指定的节点,让指定的人员从新向下走。</li>
|
|
|
</ol>
|
|
|
<font color="green">
|
|
|
/*<br />
|
|
|
*执行撤销,返回撤销是否成功信息,如果抛出异常就说明撤销失败。<br />
|
|
|
*撤销失败的原因多种,最有可能的是因为当前活动节点不允许撤销规则决定的。<br />
|
|
|
*/<br />
|
|
|
<br />
|
|
|
<font color=blue>string</font> msg= BP.WF.<font color=blue>Dev2Interface</font>.Flow_DoUnSend( workID);
|
|
|
|
|
|
</font>
|
|
|
<br />
|
|
|
</fieldset>
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>回滚</legend>
|
|
|
<ol>
|
|
|
<li>回滚与撤销不同的是回滚是在流程完成以后的操作,并且回滚是由管理员操作的。</li>
|
|
|
<li>回滚流程,是在流程结束后需要重新在指定的节点,让指定的人员从新向下走。</li>
|
|
|
</ol>
|
|
|
<font color="green">//执行回滚,返回的是回滚执行信息,如果回滚失败,则会抛出异常。</font>
|
|
|
<br />
|
|
|
<font color=blue>string</font> msg= BP.WF.<font color=blue>Dev2Interface</font>.Flow_DoRebackWorkFlow(<font color=red>"001"</font>, workID, 103, <font color=red>"因为审批错误,需要回滚,从节点103重新开始审批。"</font>);
|
|
|
</fieldset>
|
|
|
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>退回</legend>
|
|
|
<ol>
|
|
|
<li>退回可以调用ccbpm提供的退回窗口完成,这是最简单的方式。</li>
|
|
|
<li>地址为:/WF/WorkOpt/ReturnWork.htm 参数为: FK_Flow,FK_Node,WorkID,FID,当前流程的4大参数。</li>
|
|
|
<li>如果需要在其他设备上工作,或者要自己写一个退回界面,请参考。</li>
|
|
|
</ol>
|
|
|
<font color="green">
|
|
|
/*
|
|
|
<br />
|
|
|
* 1, 获得当前节点可以退回的节点,该接口返回一个datatable。
|
|
|
<br />
|
|
|
* 2, 一个节点能够退回到那写节点是由当前节点的退回规则确定的。
|
|
|
<br />
|
|
|
* 3, 调用退回需要三个参数:节点编号,工作ID, 流程ID, 对于线性流程FID始终等于0.
|
|
|
<br />
|
|
|
*/
|
|
|
</font>
|
|
|
<br />
|
|
|
System.Data.<font color=blue>DataTable</font> dtCanReturnNodes = BP.WF.<font color=blue>Dev2Interface</font>.DB_GenerWillReturnNodes(103, workid, 0);
|
|
|
<br />
|
|
|
<font color=green> // 返回的是可以退回的节点。</font>
|
|
|
|
|
|
<br />
|
|
|
<br />
|
|
|
<font color=green> //执行退回,当前的节点是103,要退回的节点是105,</font>
|
|
|
<br />
|
|
|
<font color=blue>string</font> msg = BP.WF.<font color=blue>Dev2Interface</font>.Node_ReturnWork("001", workid, 0, 103, 105, <font color=red>"您的申请信息不完整,请修改后重新发送。"</font>, <font color=blue>false</font>);
|
|
|
<br />
|
|
|
</fieldset>
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>移交</legend>
|
|
|
<ol>
|
|
|
<li>移交也可以调用ccbpm提供的移交窗口完成,这是最简单的方式。</li>
|
|
|
<li>地址为:/WF/WorkOpt/Shift.htm 参数为: FK_Flow,FK_Node,WorkID,FID,当前流程的4大参数。</li>
|
|
|
<li>移交就是把自己所要做的工作交给其他人处理。</li>
|
|
|
<li>如果需要在其他设备上工作,或者要自己写一个移交界面,请参考。</li>
|
|
|
</ol>
|
|
|
<font color="green">
|
|
|
<br />
|
|
|
/* <br />
|
|
|
* 调用移交接口,传入必要的参数执行移交.<br />
|
|
|
* FID 在线性流程上始终等于0.<br />
|
|
|
*/<br />
|
|
|
</font>
|
|
|
<br />
|
|
|
BP.WF.<font color=blue>Dev2Interface</font>.Node_Shift(<font color=red>"001"</font>, 103, workid, 0, <font color=red>"zhangsan", "因我需要出差,所以特把工作移交给您。"</font>);
|
|
|
<br />
|
|
|
|
|
|
<font color="green">
|
|
|
<br />
|
|
|
/*<br />
|
|
|
* 撤销移交 <br />
|
|
|
* 如果在移交之后,发现不需要移交,就需要撤销回来,调用撤销移交接口。 <br />
|
|
|
*/ <br />
|
|
|
</font>
|
|
|
BP.WF.<font color=blue>Dev2Interface</font>.Node_ShiftUn(<font color=red>"001"</font>, workid);
|
|
|
|
|
|
</fieldset>
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>加签</legend>
|
|
|
<ol>
|
|
|
<li>加签也可以调用ccbpm提供的加签窗口完成,这是最简单的方式。</li>
|
|
|
<li>地址为:/WF/WorkOpt/Shift.htm 参数为: FK_Flow,FK_Node,WorkID,FID,当前流程的4大参数。</li>
|
|
|
<li>加签就是把自己所要做的工作参考其他人意见,或者让其他人处理。</li>
|
|
|
<li>加签有两种模式:1,加签后由加签人发送到下一个节点。2,加签后由让加签人发送给当前人,由当前人发送给下一个节点。</li>
|
|
|
<li>如果需要在其他设备上工作,或者要自己写一个加签界面,请参考。</li>
|
|
|
</ol>
|
|
|
<font color=green>
|
|
|
<br />
|
|
|
/*<br />
|
|
|
* 调用加签接口,传入必要的参数执行.<br />
|
|
|
* FID 在线性流程上始终等于0.<br />
|
|
|
*/<br />
|
|
|
</font>
|
|
|
<br />
|
|
|
|
|
|
<font color=green>//技术人员zhangsan接受工作后,点击发送还会发送给当前人员,由当前人员发送给下一节点。</font><br />
|
|
|
<font color=blue>string</font> info1= BP.WF.<font color=blue>Dev2Interface</font>.Node_Askfor(workid, BP.WF.AskforHelpSta.AfterDealSendByWorker, <font color=red>"zhangsan"</font>, <font color=red>"这里需要您出具技术鉴定意见."</font>);
|
|
|
<br />
|
|
|
<br />
|
|
|
|
|
|
<font color=green>//技术人员填写后,直接就发送了下一节点.</font><br />
|
|
|
<font color=blue>string</font> info2 = BP.WF.<font color=blue>Dev2Interface</font>.Node_Askfor(workid, BP.WF.AskforHelpSta.AfterDealSend, <font color=red>"zhangsan"</font>, <font color=red>"这里需要您出具技术鉴定意见."</font>);
|
|
|
<br />
|
|
|
<br />
|
|
|
<font color=green>//技术人员回复加签,在由当前人发送到下一个节点。</font><br />
|
|
|
<font color=blue>string</font> infoReply = BP.WF.<font color=blue>Dev2Interface</font>.Node_AskforReply(<font color=red>"001"</font>, 103, workid,0, <font color=red>"我已经出具了技术鉴定意见,请参考."</font>);
|
|
|
</fieldset>
|
|
|
|
|
|
|
|
|
<fieldset>
|
|
|
<legend>结束流程</legend>
|
|
|
<ol>
|
|
|
<li>流程结束有三种方式</li>
|
|
|
<li>第一种走到最后一个节点正常结束。</li>
|
|
|
<li>第二种在特定的节点上,用户需要终止流程向下运动(与删除流程不同)。</li>
|
|
|
<li>第三种在特定的节点上,用户需要删除流程。</li>
|
|
|
</ol>
|
|
|
<font color="green">
|
|
|
<br />
|
|
|
/*
|
|
|
* 手工的结束流程,这种方式会记录日志.<br />
|
|
|
*/<br />
|
|
|
</font>
|
|
|
|
|
|
<font color="blue">string</font> overInfo = BP.WF.<font color="blue">Dev2Interface</font> .Flow_DoFlowOver( workID, <font color="red">"该供应商找不到了,要结束掉该流程。"</font>);
|
|
|
|
|
|
|
|
|
<br />
|
|
|
/*
|
|
|
* 删除流程, <br />
|
|
|
* 删除流程有多种方式,用户可以根据自己的需求,调用不同的方式.<br />
|
|
|
* 最后一个参数是是否删除子流程. <br />
|
|
|
*/<br />
|
|
|
<br />
|
|
|
|
|
|
<font color="green">//按照标记删除流程</font><br />
|
|
|
<font color="blue">string</font> delInfo0 = BP.WF.<font color="blue">Dev2Interface</font> .Flow_DoDeleteFlowByFlag( workID, <font color="red">"我不需要请假了"</font>, <font color="blue">true</font>);<br /><br />
|
|
|
|
|
|
<font color="green">//彻底的删除流程,无日志记录.</font><br />
|
|
|
<font color="blue">string</font> delInfo1 = BP.WF.<font color="blue">Dev2Interface</font> .Flow_DoDeleteFlowByReal( workID, <font color="red">"我不需要请假了"</font>, <font color="blue">true</font>);<br />
|
|
|
|
|
|
|
|
|
<br />
|
|
|
<font color="green">//彻底的删除流程,有日志记录.</font><br />
|
|
|
<font color="blue">string</font> delInfo2 = BP.WF.<font color="blue">Dev2Interface</font> .Flow_DoDeleteFlowByWriteLog(<font color="red">"001"</font>, workID, <font color="red">"我不需要请假了"</font>, <font color="blue">true</font>); <br />
|
|
|
|
|
|
<legend>封装的WebServices的接口</legend>
|
|
|
<ol>
|
|
|
<li>ccbpm的接口API都是一组静态的方法,这些方法可以被封装为多种形式比如:微服务、webservice、接口、controller等等。 </li>
|
|
|
<li>现在以经典常用的webservice封装为api为例来说明一下。 </li>
|
|
|
<li><img src="APICode1.png" class="HelpImg" /> </li>
|
|
|
</ol>
|
|
|
<legend>接口封装</legend>
|
|
|
<img src="APICode3.png" class="HelpImg" />
|
|
|
|
|
|
<legend>调用方法</legend>
|
|
|
<img src="APICode2.png" class="HelpImg" />
|
|
|
|
|
|
</fieldset>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</body>
|
|
|
</html>
|