[HotUpdate]
[Description("计划订单,物料提交校验")]
public class Submit : AbstractOperationServicePlugIn
{
public override void OnPreparePropertys(PreparePropertysEventArgs e)
{
base.OnPreparePropertys(e);
// 添加字段,因为可能又能字段在服务插件里不显示,我们可以在这边手动添加
e.FieldKeys.Add("F_XQDJWL");
e.FieldKeys.Add("FDemandType");
e.FieldKeys.Add("FSaleOrderNo");
e.FieldKeys.Add("FSaleOrderEntrySeq");
}
public override void BeforeExecuteOperationTransaction(BeforeExecuteOperationTransaction e)
{
base.BeforeExecuteOperationTransaction(e);
int i = 0;
// 通过成功的校验
var newObjs = new List<DynamicObject>();
// 因为是服务插件,可能会在列表中使用,所以需要遍历,看看是一张单据还是多张单据
foreach (var bill in e.SelectedRows)
{
i++;
e.CancelMessage = "提示:";
var djt = bill.DataEntity;
var xqly = djt["DemandType"];
if (xqly.IsNullOrEmptyOrWhiteSpace() || Convert.ToInt32(xqly) != 1)
{
newObjs.Add(djt);
continue;
}
var xqdjbh = Convert.ToString(djt["SaleOrderNo"]);
var xqdjhh = Convert.ToInt32(djt["SaleOrderEntrySeq"]);
var xqdjwl = djt["F_XQDJWL_Id"];
string sql = string.Format(@"SELECT A2.FMATERIALID FROM T_SAL_ORDER A1 INNER JOIN T_SAL_ORDERENTRY A2 ON A1.FID = A2.FID
WHERE A1.FDOCUMENTSTATUS = 'C' AND A1.FCANCELSTATUS = 'A' AND A1.FCLOSESTATUS = 'A' AND A1.FBILLNO = @FBILLNO
AND A2.FSEQ = @FSEQ");
var a1 = DBUtils.ExecuteDynamicObject(Context, sql, null, null, System.Data.CommandType.Text, new SqlParam[] {
new SqlParam("@FBILLNO", KDDbType.String, xqdjbh),
new SqlParam("@FSEQ", KDDbType.Int32, xqdjhh)});
// 数据异常的校验,在前台会显示错误信息
if (a1.Count <= 0 || xqdjwl.IsNullOrEmptyOrWhiteSpace())
{
var bm = djt["BillNo"];
var error = new ValidationErrorInfo(
"", // 出错的字段Key,可以空
Convert.ToString(djt), // 数据包内码,必填,后续操作会据此内码避开此数据包
i, // 出错的数据包在全部数据包中的顺序
i, // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0
"E1", // 错误编码,可以任意设定一个字符,主要用于追查错误来源
string.Format("单据编号【{0}】数据异常,当前单据的操作取消!", bm), // 错误的详细提示信息
"单据合法性检查", // 错误的简明提示信息
ErrorLevel.FatalError // 错误级别:警告、错误
);
this.OperationResult.ValidationErrors.Add(error);
continue;
}
if (!Convert.ToString(a1[0]["FMATERIALID"]).Equals(Convert.ToString(xqdjwl)))
{
var bm = djt["BillNo"];
var error = new ValidationErrorInfo(
"", // 出错的字段Key,可以空
Convert.ToString(djt), // 数据包内码,必填,后续操作会据此内码避开此数据包
i, // 出错的数据包在全部数据包中的顺序
i, // 出错的数据行在全部数据行中的顺序,如果校验基于单据头,此为0
"E1", // 错误编码,可以任意设定一个字符,主要用于追查错误来源
string.Format("单据编号【{0}】数据异常,当前单据的操作取消!", bm), // 错误的详细提示信息
"单据合法性检查", // 错误的简明提示信息
ErrorLevel.FatalError // 错误级别:警告、错误
);
this.OperationResult.ValidationErrors.Add(error);
continue;
}
newObjs.Add(djt);
}
e.DataEntitys = newObjs.ToArray();
}
}
推荐阅读