二开案例.WebApi.网控

【应用场景】
开启网控,在单据执行某个操作时,锁住单据,禁止其他用户同时操作。
【注意事项】
操作完成后,需要主动释放网控,否则单据将一直处于锁定状态。
【案例演示】
采购订单,修改操作,通过WebApi创建修改网控,禁止其他用户同时修改该单据。

【实现步骤】
<1>编写自定义WebApi,代码如下。
using Kingdee.BOS;
using Kingdee.BOS.App.Core.NetworkCtrl;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.NetworkCtrl;
using Kingdee.BOS.ServiceFacade.KDServiceFx;
using Kingdee.BOS.Util;
using Kingdee.BOS.WebApi.ServicesStub;
using System;
namespace Jac.XkDemo.BOS.WebApi
{
/// <summary>
/// 【WebApi】网控
/// </summary>
public class NetControlWebApiService : AbstractWebApiBusinessService
{
public NetControlWebApiService(KDServiceContext context)
: base(context)
{
//
}
/// <summary>
/// 启动网控
/// </summary>
/// <param name="netCtrlId">网控对象内码</param>
/// <param name="interID">单据内码</param>
/// <param name="operationName">操作名称,例如:修改</param>
/// <param name="operationDesc">操作描述,例如:采购订单-CGDD100608-修改</param>
/// <returns>返回新增的网控记录的内码(T_BAS_NETWORKCTRLRECORDS.FID)</returns>
public string StartNetworkCtrl(string netCtrlId, string interID, string operationName, string operationDesc)
{
var ctx = KDContext.Session.AppContext;
if (ctx == null)
{
// 会话超时
throw new Exception("ctx = null");
}
var networkCtrlRecordId = SequentialGuid.NewGuid().ToString();
var mInfo = new NetWorkCtrlMonitorInfo();
mInfo.Id = networkCtrlRecordId;
mInfo.NetCtrlType = NetworkCtrlType.BusinessObjOperateMutex;
mInfo.OrgID = ctx.CurrentOrganizationInfo == null ? 1 : ctx.CurrentOrganizationInfo.ID;
mInfo.StartMenID = Convert.ToInt32(ctx.UserId);
mInfo.ComputerName = ctx.ComputerName;
mInfo.IP = ctx.IpAddress;
mInfo.NetCtrlId = netCtrlId;
mInfo.OperationDesc = operationDesc;
mInfo.InterID = "-1";
mInfo.Token = ctx.ContextId;
mInfo.InterID = interID;
mInfo.FuncDeatilId = operationName;
mInfo.StartTime = DateTime.Now;
new NetWorkCtrlMInfoRepository(ctx).Create(mInfo);
return networkCtrlRecordId;
}
/// <summary>
/// 释放网控
/// </summary>
/// <param name="networkCtrlRecordId">网控记录内码(T_BAS_NETWORKCTRLRECORDS.FID)</param>
/// <returns></returns>
public bool CommitNetworkCtrl(string networkCtrlRecordId)
{
var ctx = KDContext.Session.AppContext;
if (ctx == null)
{
// 会话超时
throw new Exception("ctx = null");
}
var sql = "DELETE FROM T_BAS_NETWORKCTRLRECORDS WHERE FID=@FID";
var parameter = new SqlParam("@FID", KDDbType.String, networkCtrlRecordId);
DBUtils.Execute(ctx, sql, parameter);
return true;
}
}
}
/*
-- 查询采购订单的修改操作的网控对象内码
SELECT a.FID AS 网控对象内码 ,
b.FNAME AS 网控对象名称 ,
t.FNAME AS 网控类型名称 ,
c.FNAME AS 业务对象名称 ,
e.FNAME AS 操作名称 ,
a.*
FROM T_BAS_NETWORKCTRLOBJECT a
LEFT JOIN T_BAS_NETWORKCTRLOBJECT_L b ON a.FID = b.FID
AND b.FLOCALEID = 2052
LEFT JOIN T_BAS_NETWORKCTRLTYPE_L t ON a.FTYPE = t.FID
AND t.FLOCALEID = 2052
LEFT JOIN T_META_OBJECTTYPE_L c ON a.FMETAOBJECTID = c.FID
AND c.FLOCALEID = 2052
LEFT JOIN T_MDL_FORMOPERATIONTYPE d ON a.FNUMBER = d.FOPERATION
LEFT JOIN T_MDL_FORMOPERATIONTYPE_L e ON d.FID = e.FID
AND e.FLOCALEID = 2052
WHERE a.FMETAOBJECTID = 'PUR_PurchaseOrder'
AND a.FNUMBER = 'Edit'
*/<2>拷贝自定义的WebApi组件到应用站点的WebSite\Bin目录下,重启IIS,开发完毕。
【测试步骤】
<1>新增单元测试基类,代码如下。
namespace Jac.XkDemo.BOS.WebApi.Tests
{
/// <summary>
/// WebApi测试基类
/// </summary>
public abstract class AbstractWebApiTests
{
#region 测试参数
/// <summary二开案例.WebApi.网控
【应用场景】开启网控,在单据执行某个操作时,锁住单据,禁止其他用户同时操作。【注意事项】操作完成后,需要主动释放网控,否则单据将一...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



