场景描述
单据保存、审核等操作时,数据校验,单据数据调整
包含技术点:
1.获取上下文
2.获取登录对象
3.用上下文数据库连接对象执行sql(走U8事务)
4.获取表头字段
5.获取表体字段
6.判断数据操作状态(新增、修改、删除)
7.修改或添加xml属性
8.新增表体行
具体见以下代码注释
代码示例
相关引用
ADODB(%U8SOFT%\Interop)
Interop.MSXML2(%U8SOFT%\Interop)
UFIDA.U8.MomServiceCommon(%U8SOFT%\UFMOM\U8APIFramework)
Interop.U8Login(%U8SOFT%\Interop)
using MSXML2;
using U8Login;
using UFIDA.U8.MomServiceCommon;
核心方法
public bool SaleOrder_Save(ref IXMLDOMDocument2 domhead, ref IXMLDOMDocument2 dombody, ref string errmsg){
try{
MomCallContextCache envCtxCache = new MomCallContextCache();//获取上下文
clsLogin clsLogin = (clsLogin)momCallContextCache.CurrentMomCallContext.U8Login;//获取登录对象
ADODB.Connection conn = (ADODB.Connection)envCtxCache.CurrentMomCallContext.BizDbConnection;//获取数据库链接对象,这个对象可走原有事物
//走原有数据库链接查库
var re = new object();
var rd = conn.Execute("select cinvcode,iquantity from SO_SODetails where autoid='" + xxx+ "'", out re);//改库也用 conn.Execute
if (rd != null && rd.EOF == false){
string oldcinvcode = rd.Fields["cinvcode"].Value.ToString();
}
string conStr = clsLogin.UFDataConnstringForNet;//获取数据库链接字符串
IXMLDOMNode headItem_ddate = domhead.selectSingleNode("//z:row").attributes.getNamedItem("ddate");//获取表头字段xml节点属性
if (headItem_ddate != null && headItem_ddate .nodeValue.ToString() != ""){//使用前判断是否为空,如果单据上获取的字段没填值,xml没有这个节点,headItem_ddate会是null
string ddate= headItem_ddate.nodeValue.ToString();//获取具体数据
}
IXMLDOMNodeList iXMLDOMNodeList = dombody.selectNodes("//z:row");//获取表体xml所有行
foreach (IXMLDOMNode iXMLDOMNode in iXMLDOMNodeList){//循环表体
string editprop = iXMLDOMNode.attributes.getNamedItem("editprop").nodeValue.ToString();//获取行的修改属性(A:新增,M:修改,D:删除),这个为空就是这行没改
string cinvcode = iXMLDOMNode.attributes.getNamedItem("cinvcode").nodeValue.ToString();//获取表体这一行的存货编码
//给当前表体行创建xml节点属性,一般用于保存时赋值,但之前没填这个字段的情况(没填xml没有这个属性)
IXMLDOMAttribute iXMLDOMAttribute = dombody.createAttribute("cbdefine5");
iXMLDOMAttribute.nodeValue = str + text;
iXMLDOMNode.attributes.setNamedItem(iXMLDOMAttribute);
//修改表体行数据
iXMLDOMNode.attributes.getNamedItem("iquantity").nodeValue = "xxx";
}
//保存时新增一行
IXMLDOMNode iXMLDOMNode2 = iXMLDOMNodeList[0].cloneNode(false);
iXMLDOMNode2.attributes.getNamedItem("irowno").nodeValue = "xxx";
iXMLDOMNode2.attributes.getNamedItem("cbdefine5").nodeValue = "xxx";
iXMLDOMNode2.attributes.getNamedItem("cbdefine15").nodeValue = "xxx";
iXMLDOMNode2.attributes.getNamedItem("cbdefine16").nodeValue = "xxx";
iXMLDOMNodeList[0].appendChild(iXMLDOMNode2);
return true;
}
catch (Exception ex)
{
errmsg = ex.StackTrace;
return false;
}
}