You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

389 lines
20 KiB
Plaintext

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!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 />&nbsp;正在加载,请稍后......");
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_SerialWorkID的生成从100开始。</li>
<li>该workid全局唯一并且没有重复性该信息记录到Sys_SerialWorkID的生成从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>