操作插件反写上游子单据体

当上游单据是子单据体下推 时,反写规则无法配置生效。
知识中的“反写上游子单据体”方法需要创建一个 虚拟反写规则,同时所有反写、校验都是需要插件实现。还需要在上游子单据体对应的单据体加隐藏字段。
我尝试了一种操作插件来实现反写与校验,欢迎大伙来参考或拍砖。
一、保存操作插件:实现反写、超额检查
特殊点:反写时 查一次数据库,取上游子单据体对应 的所有下游单据(除本单)的数量和 + 本单数量, 更新上游子单据体分录。 排除本单取汇总的目的是不用判断与记录是否保存后再修改保存。
public override void BeginOperationTransaction(BeginOperationTransactionArgs e)
{
foreach (DynamicObject o in e.DataEntitys)
{
}
}
/// <summary>
/// 操作结束后功能处理
/// </summary>
/// <param name="e"></param>
public override void EndOperationTransaction(EndOperationTransactionArgs e)
{
foreach (DynamicObject o in e.DataEntitys)
{
UpdateSrcQty(o);
}
}
private void UpdateSrcQty(DynamicObject dataEntity)
{
if (dataEntity["F_PBVD_SubEntryId"] == null || dataEntity["F_PBVD_SubEntryId"].ToString().IsNullOrEmptyOrWhiteSpace()) { return; }
long srcSubEntryID = Convert.ToInt64(dataEntity["F_PBVD_SubEntryId"]);
if (Math.Abs(srcSubEntryID) <= 10) { return; }
decimal billQty = Convert.ToDecimal(dataEntity["F_PBVD_SumQty"]);
string billID = dataEntity["Id"].ToString();
string strSql = $@"/*dialect*/update a set F_PBVD_GLYLQty = {billQty} + isnull(b.FQTY,0)
from T_SAL_DELIVERYEntrySubDYYL a left join (
select t1.FDetailID,isnull(sum(t2.F_PBVD_SumQty),0) as FQTY
from T_SAL_DELIVERYEntrySubDYYL t1 left join T_PLN_RESERVEBILL t2 on t1.FDetailID = t2.F_PBVD_SUBENTRYID and t2.FID <> '{billID}'
where t1.FDetailID = '{srcSubEntryID}' group by t1.FDetailID ) b on a.FDetailID = b.FDetailID
where a.FDetailID = '{srcSubEntryID}' ";
DBUtils.Execute(this.Context, strSql);
}
/// <summary>
/// 当前操作的校验器
/// </summary>
private class OperValidator : AbstractValidator
{
public override void Validate(Kingdee.BOS.Core.ExtendedDataEntity[] dataEntities, ValidateContext validateContext, Kingdee.BOS.Context ctx)
{
foreach (var dataEntity in dataEntities)
{
bool isError = false;
if (dataEntity["F_PBVD_SubEntryId"] == null || dataEntity["F_PBVD_SubEntryId"].ToString().IsNullOrEmptyOrWhiteSpace()) { return; }
long srcSubEntryID = Convert.ToInt64(dataEntity["F_PBVD_SubEntryId"]);
if (Math.Abs(srcSubEntryID) <= 10) { continue; }
string billID = dataEntity["Id"].ToString();
string strSql = $@"/*dialect*/select t1.FDetailID,t1.F_PAEZ_YLSLDY,isnull(sum(t2.F_PBVD_SumQty),0) as FQTY
from T_SAL_DELIVERYEntrySubDYYL t1 left join T_PLN_RESERVEBILL t2 on t1.FDetailID = t2.F_PBVD_SUBENTRYID and t2.FID <> '{billID}'
where t1.FDetailID = '{srcSubEntryID}' group by t1.FDetailID,t1.F_PAEZ_YLSLDY ";
DynamicObjectCollection docDatas = DBUtils.ExecuteDynamicObject(this.Context, strSql);
string errMessage = string.Empty;
if (docDatas == null || docDatas.Count() <= 0)
{
isError = true;
errMessage = "销售订单评审单数据查询异常!";
}
else
{
decimal srcQty = Convert.ToDecimal(docDatas[0]["F_PAEZ_YLSLDY"]);
decimal allQty = Convert.ToDecimal(docDatas[0]["FQTY"]);
decimal billQty = Convert.ToDecimal(dataEnti操作插件反写上游子单据体
当上游单据是子单据体下推 时,反写规则无法配置生效。知识中的“反写上游子单据体”方法需要创建一个 虚拟反写规则,同时所有反写、校验...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



