U8 API标准单据事件插件调用

场景描述

单据保存、审核等操作时,数据校验,单据数据调整

包含技术点:
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;
      }
 }
  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙套大人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值