尽消存
尽消存

define JDP

define是JDP开发平台的重要组成部分,采用xml封装的define文件包含了现有的进销存财务的所有sql执行语句。
::: remark xml基础要求

  1. xml声明是xml文档的第一句,其格式如下:
<?xml version="1.0" encoding="utf-8"?>

  1. 注意大小写

在xml文档中,大小写是有区别的。“A”和“a”是不同的标记。注意在写元素时,前后标记的大小写要保持一致。最好养成一种习惯,或者全部大写,或者全部小写,或者大写第一个字母,这样可以减少因为大小写不匹配而产生的文档错误。


  1. xml文档有且只有一个根元素

良好格式的xml文档必须有一个根元素,就是紧接着声明后面建立的第一个元素,其他元素都是这个根元素的子元素,根元素完全包括文档中其他所有的元素,比如:<defineSqls></defineSqls>。根元素的起始标记要放在所有其他元素的起始标记之前;根元素的结束标记要放在所有其他元素的结束标记之后。


  1. 属性值使用引号

在HTML代码里面,属性值可以加引号,也可以不加。但是xml规定,所有属性值必须加引号(可以是单引号,也可以是双引号,建议使用双引号),否则将被视为错误。


  1. 所有的标记必须有相应的结束标记

在HTML中,标记可以不成对出现,而在xml中,所有标记必须成对出现,有一个开始标记,就必须有一个结束标记,否则将被视为错误。


  1. 所有的空标记也必须被关闭

空标记是指标记对之间没有内容的标记,比如“”等标记。在xml中,规定所有的标记必须有结束标记。
:::

完整示例如事务管理器

/define/defineTask.xml

<?xml version="1.0" encoding="gb2312"?>
<defineSqls>
	<define name="OpenValue_BaseInfo_tblTaskManage">
		<sql type="condition">
			<condition>
			</condition>
			<exec condition="true">
				<sql>update tblTaskManage set statusId=0 where id=@ValueofDB:tblTaskManage_id</sql>
			</exec>
		</sql>
	</define>
</defineSqls>

单据增删改的define

在单据主表写入以下代码

<sql operation="add" id="tblOtherInZ_add"><sql operation="delete" post="before" id="tblOtherInZ_Delete"><sql operation="update" post="before" id="tblOtherInZ_Delete"><sql operation="update" id="tblOtherInZ_add">
  • operation="add"表示新增的操作;
  • id="tblOtherInZ_add"表示新增的define代码块;
  • operation="delete"表示删除的操作;
  • post="before"表示在删除前执行;
  • operation="update" 表示修改的操作;

Warning

一定要注意先后顺序和大小写!!!

结合下面的define代码块,能实现简单的增删改操作

<?xml version="1.0" encoding="gb2312"?>
<defineSqls>
	<define name="tblOtherInZ_add">
		<sql type="condition">
			<!--更新销售订单明细表装配交期回复状态Jqhf,交期回复状态。0表示未回复,1表示已回复未装配。-->
			<exec condition="true">
				<sql>update tblSalesOrderDet set tblSalesOrderDet.Jqhf=1 from tblOtherInZDet where tblOtherInZDet.SourceID=tblSalesOrderDet.id and tblOtherInZDet.f_ref=@ValueofDB:tblOtherInZ_id</sql>
			</exec>
		</sql>
	</define>
	<define name="tblOtherInZ_Delete">
		<sql type="condition">
			<exec condition="true">
				<sql>update tblSalesOrderDet set tblSalesOrderDet.Jqhf=0 from tblOtherInZDet where tblOtherInZDet.SourceID=tblSalesOrderDet.id and tblOtherInZDet.f_ref=@ValueofDB:tblOtherInZ_id</sql>
			</exec>
		</sql>
		<sql type="condition">
			<!--启用审核删除的操作-->
			<exec condition="@MEM:tblOtherInZ_IsStatart==0 &amp;&amp; @MEM:OpenInvoice==false">
				<sql type="define">tblOtherInZ_Del_One</sql>
			</exec>
		</sql>
	</define>
	<define name="tblOtherInZ_Del_One">
		<!--更新物料清单的OrderDate-->
		<sql type="condition">
			<exec condition="true">
				<sql>update tblSalesOrderDet set tblSalesOrderDet.Jqhf=0 from tblOtherInZDet where tblOtherInZDet.SourceID=tblSalesOrderDet.id and tblOtherInZDet.f_ref=@ValueofDB:tblOtherInZ_id</sql>
			</exec>
		</sql>
	</define>
</defineSqls>

Tips

通过以上两步操作,实现了

  1. 当【新增表】tblOtherInZ保存的时候,自动【改写表】tblSalesOrderDet使其【字段】Jqhf=1,结合弹框,业务逻辑实现下次做单双击之后不再显示tblSalesOrderDet.Jqhf=1的行;

  2. 当【修改表】tblOtherInZ操作时,按照我们的在表结构里面数据库操作代码的先后顺序,先执行第一个update<sql operation="update" post="before" id="tblOtherInZ_Delete">因为post="before",系统先将表tblSalesOrderDet使其【字段】Jqhf=0回到下次弹框能显示,然后再执行一次新增操作的define<sql operation="update" id="tblOtherInZ_add">,保证修改后的数据能【更新表】tblSalesOrderDet使其【字段】Jqhf=1

  3. 当【删除表】tblOtherInZ操作时,保存后因为post="before",所以系统是先更新tblSalesOrderDet使其【字段】Jqhf=0回到下次弹框能显示,然后再执行【删除表】tblOtherInZ的操作。