浅析云星空网控原创
金蝶云社区-CM9527
CM9527
10人赞赏了该文章 1,418次浏览 未经作者许可,禁止转载编辑于2021年09月03日 09:52:53

    网控在云星空是一个很重要的概念,网控可以对单据独占。试想如果你操作一个单据,自然不希望别人在你操作的时候,修改你的数据,这个时候,你就需要添加一个网控。添加了网控之后,就形成了互斥,如果别人操作这个单据,就会有冲突提示。其实网控不仅仅是编辑操作与其他操作的互斥,还有提交与审核的互斥等等,你可以根据自己的需要,设置互斥,也可以自定义操作互斥。

    在BOS设计器里面,找到你需要设置的单据的页面

   image.png

点击网络控制设置

 image.png

点击业务操作互斥,可以看到一系列的网控操作,下面就是与之互斥的操作。这里可以根据自己的需要添加网控。

还有一种情况是,我在代码里面怎么开启网控呢?因为有些操作是写到程序里面去的,而不是在BOS里面设置的,其实系统已经提供了开启网控和释放网控的方法。

//开启网控
protected NetworkCtrlResult BeginNetCtrl(Context ctx, FormOperationEnum operNumber, string strBillID, string strBillName)
{
        //单据ID
	string strFormId = "TEST";
	//获取单据的元素据信息
	var _businessInfo = MetaDataServiceHelper.GetFormMetaData(this.Context, strFormId).BusinessInfo;
	//获取操作类
	FormOperation operation = _businessInfo.GetForm().GetOperation(operNumber.ToString());
	if (operation == null || operation.NetworkCtrlObject == null)
	{
		return null;
	}
	string formName = "单据名称"
	NetworkCtrlObject networkCtrlObject = NetworkCtrlServiceHelper.GetNetCtrl(ctx, strFormId , NetworkCtrlType.BusinessObjOperateMutex, operation.NetworkCtrlObject.OperationId);
	if (networkCtrlObject == null)
	{
		return null;
	}

	//开启网控
	NetWorkRunTimeParam paras = new NetWorkRunTimeParam();
	paras.InterID = strBillID;
	paras.OperationDesc = string.Format("{0}-{1}-{2}", formName, strBillName, operation.OperationName);
	int lcId;
	if (ctx.LogLocale == null)
	{
		lcId = ctx.UserLocale.LCID;
	}
	else
	{
		lcId = ctx.LogLocale.LCID;
	}
	paras.OperationName = operation.OperationName;
	paras.BillName = new LocaleValue(strBillName, lcId);
	paras.RelateNetCtrlObj = null;
	NetworkCtrlResult result = NetworkCtrlServiceHelper.BeginNetCtrl(ctx, networkCtrlObject, paras);
	return result;
}
/// <summary>
/// 释放网控
/// </summary>
/// <param name="ctx"></param>
/// <param name="result"></param>
/// <returns></returns>
protected bool CommitNetCtrl(Context ctx, NetworkCtrlResult result)
{
	if (result == null)
	{
		return true;
	}
	//这个lstResult是开启网控后返回的result,只需要传入这个参数就行
	List<NetworkCtrlResult> lstResult = new List<NetworkCtrlResult> { result };
	return NetworkCtrlServiceHelper.BatchCommitNetCtrl(ctx, lstResult);
}



赞 10