M18 ERP EJB 接口 (后台接口)

Version: 1.1 | Release Date: 7/12/2018

MassMailHandler

目的

用于在[邮件报告设定]发送电子邮件时处理电子邮件。


handleEmail函数

	public default void handleEmail(MacEmail email, SqlTable massmail, CawReport report, CawReportDataSet dataSet) {
	}

说明

用于在[邮件报告设定]发送电子邮件时处理电子邮件。

参数

名称 类型 说明
email MacEmail 邮件
massmail SqlTable [邮件报告设定]主表
report CawReport 报表
dataSet CawReportDataSet 报表数据


sendEmail函数

	public default Set<MacEmail> sendEmail(SqlTable massmail, CawReport report, CawReportDataSet dataSet, Map<Long, String> fileKey, Map<String, String> fileMap) {
		return null;
	}

说明

它用于通过[邮件报告设定]发送电子邮件时,发送给更多的电子邮件地址。

例如:在 core App 中,可以从客户/供应商/职员/部门/商业中心中获取邮件地址。

例如:在 ac App 中,可以从应收对象/应付对象中获取邮件地址。

参数

名称 类型 说明
massmail SqlTable [邮件报告设定]主表
report CawReport 报表
dataSet CawReportDataSet 报表数据
fileKey Map<Long, String> 预览文件的键值对,键是单据的ID,值是文件名。
fileMap Map<String, String> 预览文件路径的键值对,键是文件名,值是文件路径。

返回值

类型 说明
Set<MacEmail> 额外需发送的邮件


UpdateFrozenDate

目的

在冻结日期要更新前后,开发人员可以进行干预操作。


beforeUpdateFrozen函数

	public default String beforeUpdateFrozen(Long beId, Long frozenTypeId, Date frozenDate) {
		return "";
	}

说明

冻结日期要更新前触发此函数。

参数

名称 类型 说明
beId Long 企业法人ID
frozenTypeId Long 交易冻结期类型ID
frozenDate Date 交易冻结期

返回值

类型 说明
String 运行结果说明的messCode

例子

	@Override
	public String beforeUpdateFrozen(Long beId, Long frozenTypeId, Date frozenDate) {
		SqlTable data = MacCheckerUtil.excuteQuery("frozentype", " id = " + frozenTypeId);
		if (data != null && data.size() > 0) {
			SqlTable beFile = MacUtil.getBeGlobalSetting(beId);
			if (beFile != null && beFile.size() > 0) {
				if (frozenDate.before((Date) beFile.getValue(1, "stkClosed"))) {
					return "ce01_core.frozenPeriodSTKError";
				}
			}
		}
		return "";
	}


afterUpdateFrozen函数

	public default void afterUpdateFrozen(Long beId, Long frozenTypeId, Date frozenDate) {

	}

说明

冻结日期要更新后触发此函数。

参数

Name Type Description
beId Long 企业法人ID
frozenTypeId Long 交易冻结期类型ID
frozenDate Date 交易冻结期


ErpServerInitialized

目的

在同步数据库之后和JBoss完全启动之前,将触发此接口。

它通常用于初始化缓存或初始化数据。


contextInitialized函数

	public default void contextInitialized() {

	}

说明

在同步数据库之后和JBoss完全启动之前,将触发此函数。



afterInitialized函数

	public default void afterInitialized() {

	}

说明

contextInitialized()之后触发。



GenerateRecord

目的

用于创建模块单据,生成另一个模块单据时,与M18交互。 (示例:送货单生成销售发票记录)


beforeSaveRecord函数

	public default boolean beforeSaveRecord(SqlEntity fromEntity, SqlEntity entity, String jsonParam) {
		return true;
	}

说明

当目标单据(例如销售发票)准备好保存时触发此函数。 如果开发人员需要中止保存过程,则返回false。

参数

名称 类型 说明
fromEntity SqlEntity 来源单据实体数据。例如: [送货单]实体数据。
entity SqlEntity 目标单据实体数据。例如: [销售发票]实体数据。
jsonParam String 额外的参数.

返回值

类型 说明
boolean 如果是 false,则中止保存操作。


SpecBsRuleItem

目的

用于与M18交互,在系统中增加额外的业务规则。


getSpecBsRuleItem函数

	public default List<BsRuleItem> getSpecBsRuleItem(Long beId, String moduleName) {
		return null;
	}

说明

当M18读取业务规则项时触发。 开发人员可以在Java中定义其他额外的业务规则并返回系统。

参数

名称 类型 说明
beId Long 企业法人ID
moduleName String 触发业务规则的模块

返回值

类型 说明
List<BsRuleItem> 额外业务规则列表

例子

public class TrdgSpecBsRuleItem implements SpecBsRuleItem {

	@Override
	public List<BsRuleItem> getSpecBsRuleItem(Long beId, String moduleName) {
		if (!MacUtil.matchAppModule(moduleName, TradeStaticVar.appName)
				&& !TradeUtil.isTradingUdfEditor(moduleName)) {
			return null;
		}
		List<BsRuleItem> specItems = new ArrayList<BsRuleItem>();
		BsRule rules = (BsRule) CawCache.getObject(ErpStaticVar.bsRule, "xxxx");
		if (rules != null) {
			if (TradeUtil.isAllowNs(beId) && TradeUtil.checkInventoryModule(beId, moduleName)) {
				BsRuleItem allowNsItem = rules.getChkList().get("allowNs");
				specItems.add(allowNsItem);
			}
		}
		return specItems;
	}
}


ASaveChkHandler

目的

用于在保存单据时与M18交互。 通常用于检查单据下款表的外键约束。

例如,若[送货单]下款的来源[销售订单]中的货币ID不等于[送货单]中的货币ID,则销售订单无法保存。


getASaveChkSql函数

	public default String getASaveChkSql(ASaveChkItem item, String moduleName, SqlTable mainData, String chkValue, String joinkeycol) {
		return null;
	}

说明

定义用于检查以上示例是否有效的SQL:

若[送货单]下款的来源[销售订单]中的货币ID不等于[送货单]中的货币ID,则销售订单无法保存。

如果通过运行SQL返回的数据集非空,则无法保存单据并弹出错误。

参数

名称 类型 说明
item ASaveChkItem 检查的项目
moduleName String 模块名称
mainData SqlTable 保存单据的主表
chkValue String 检查栏位的值
joinkeycol String 链接主键的条件

返回值

类型 说明
String SQL 语句


GeneratedEJBLot

目的

用于在在EJB中生成行次时与M18交互。


originAccept函数

	public boolean originAccept(String module);

说明

当行次将要生成时触发此函数。 用于确定当前模块是否应使用此接口生成批号。

参数

名称 类型 说明
module String 模块名称

返回值

类型 说明
boolean 若为true 则可以继续调用此接口中的generate()生成行次,若为 fales,则按照系统默认规则生成行次。


generate函数

	public String generate(final String module, final Long beId, final int rowIndex, final SqlTable footer, final String[] emptyField, final String lotField, final String proField);

说明

originAccept() 返回true时,会触发此函数,此函数用来生成行次。

参数

名称 类型 说明
module String 模块名称
beId Long 企业法人ID
rowIndex int 当前下款表行次
footer SqlTable 当前下款表
emptyField String[] 判断当前行是否为空的关键栏位
lotField String 行次栏位
proField String 产品栏位

返回值

类型 说明
String 生成的行次


GeneratedJSFLot

目的

当行次将要在JSF中生成时使用此接口。 函数与 GeneratedEJBLot相同,请参阅 GeneratedEJBLot 以获取更多详细信息。



LoadTradeFooter

目的

从来源单据加载下款数据时触发,用于在下款表中加载单价和说明字段。


getMultiProPriceDesc函数

	public default SqlTable getMultiProPriceDesc(String moduleName, Long beId, Long refId, Long virDeptId, String date, String upOrigin, String descOrigin, SqlTable footer, String[] proField, String jsonParam, SqlTable result) {
		return null;
	}

说明

系统从来源单据读取下款数据后触发,开发人员可以使用此功能修改或覆盖结果集。

参数

名称 类型 说明
module String 模块名称
beId Long 企业法人ID
refId Long 客户/供应商ID
virDeptId Long 商业中心ID
date String 单据日期
upOrigin String 产品价格来源
descOrigin String 产品说明来源
footer SqlTable 下款表
proField String[] 确定唯一性的字段
jsonParam String 额外的参数
result SqlTable 结果集

返回值

类型 说明
SqlTable 修改后的结果集。


	public default void assign_footer_updesc(SqlTable footer, int footerIndex, SqlTable tarTable, int rec) {

	}

说明

在系统加载<精简说明>和<详细说明>或者<单位价格>后,触发此函数。开发人员可以修改对应栏位的值。

参数

名称 类型 说明
footer SqlTable 下款表
footerIndex int 下款表行次
tarTable SqlTable 来源数据表
rec int 来源数据表行次


AssignLotnoHelper

目的

用于开发人员与M18交互,修改已读取的系统默认的批号表信息。


isAccept函数

	public boolean isAccept();

说明

用于决定这个接口的其他函数是否继续运行。

返回值

Type Description
boolean 若为true ,则继续运行这个接口的其他函数。若为 false, 则中止运行这个接口的其他函数 。


getAssignLotno函数

	public SqlTable getAssignLotno(long beId, String module, SqlTable stock);

说明

当M18读取了产品的批号库存信息后,开发人员可以在这个函数中修改批号库存表的信息。

参数

名称 类型 说明
beId long 企业法人ID
module String 模块名称
stock SqlTable 库存批号表

返回值

类型 说明
SqlTable 修改后的库存批号表


sortStock函数

	public void sortStock(String module, SqlTable stock, List<String> sortFieldList, List<Boolean> sortTypeList);

说明

getAssignLotno()之后触发,用来为库存批号表重新排序。

参数

名称 类型 说明
module String 模块名称
stock SqlTable 库存批号表
sortFieldList List<String> 排序字段列表
sortTypeList List<Boolean> 排序字段列表对应的排序方式。若为 true,则是升序,若为 false ,则是降序。


isStockFit函数

	public boolean isStockFit(String module, SqlTable stock, int stockIndex, SqlTable footer, int footerIndex);

说明

判断当前库存批号表的行,是否符合分配的条件。

参数

名称 类型 说明
module String 模块名称
stock SqlTable 库存批号表
stockIndex int 库存批号表行次
footer SqlTable 被分配批号的下款表
footerIndex int 下款表行次

返回值

类型 说明
boolean 若为 false,则库存批号表当前行不能被分配。


IMacCalcHandler

目的

该接口用于M18移动应用程序与M18交互。


getOrder函数

	public int getOrder();

说明

定义接口的顺序,数字越小,接口调用越早。

返回值

类型 说明
int 返回代表调用顺序的数字。


efe_mainfooter_up函数

	public void efe_mainfooter_up(long beId, String tranType, SqlTable footer, int rowIndex);

说明

<单位价格>被赋值时触发。

参数

名称 类型 说明
beId long 企业法人ID
tranType String 模块名称
footer SqlTable 下款表
rowIndex int 下款表行次


calc_invamt函数

	public default void calc_invamt(long beId, String tranType, SqlTable mainData, SqlTable mainFooter, SqlTable mainDisc) {
	}

说明

用于在保存单据之前计算上款中的<总金额/总费用/总折扣/折实金额>。

参数

名称 类型 说明
beId long 企业法人ID
tranType String 模块名称
mainData SqlTable 主表
mainFooter SqlTable 下款表
mainDisc SqlTable 附加折扣/收费表


getInChargeQtyField函数

	public default String getInChargeQtyField() {
		return "qty";
	};

说明

用户获取下款表计算金额时所使用的数量栏位名。

返回值

类型 说明
String 返回下款表计算金额时的数量栏位名


getFooterUpField函数

	public default String getFooterUpField() {
		return "up";
	}

说明

用户获取下款表计算金额时所使用的单价栏位名。

返回值

类型 说明
String 返回下款表计算金额时的单价栏位名


getFooterUcField函数

	public default String getFooterUcField() {
		return "uc";
	}

说明

用户获取下款表计算金额时所使用的成本栏位名。

返回值

类型 说明
String 返回下款表计算金额时的成本栏位名


UpdateProCost

目的

开发人员与M18交互,用于计算库存成本。


详细说明

public interface UpdateProCost {

	/**
	 * For Product LLC
	 * this function can be replaced by using procedure named get_pro_llc_*
	 */
	public default SqlTable getMatList(Long beId, SqlTable varList) {
		return null;
	}

	/**
	 * For Data Updating(Stock In UC)
	 */
	public default void beforeLoadData(Long beId, SqlTable varList, SqlTable codeList) {

	}

	/**
	 * can append special field used in the getCalcUc
	 * or
	 * update data
	 */
	public default void afterLoadData(Long beId, SqlTable varList, SqlTable codeList, SqlTable stockIn, SqlTable stockOut, SqlTable stock_open) {

	}

	/**
	 * 1: return false(CalcUcStatus.skipOther) means skip the other instance of UpdateProCost
	 * 2: for special value please set it to CalcUcStatus.uc(and set CalcUcStatus.setUc = true)
	 */
	public default CalcUcStatus getCalcUc(String stk_mth, boolean isStockIn, int rowIndex, double calcUc, SqlTable tempVarList, SqlTable tempStockIn, SqlTable tempStockOut) {
		return null;
	}

	public default boolean calcFIFOUc(Long beId, SqlTable inVARLIST, Long proId, Date tranDate, int outIndex, SqlTable stockIn, SqlTable stockOut, SqlTable stock_open, SqlTable outAss, SqlTable retAss, SqlTable retUesd) {
		return false;
	}

	/**
	 * For Product Cost Updating(PC)
	 */
	public default void afterUpdateUc(Long beId, SqlTable varList, SqlTable codeList) {

	}

	/**
	 * For Data Updating After Close Stock
	 */
	public default void afterCloseStock(Long beId, SqlTable varList) {

	}

	/**
	 * For Data Updating After Reverse Stock
	 */
	public default void afterReverseStock(Long beId, SqlTable varList) {

	}
}


LoadBomDataSourceHelper

目的

用于给开发人员修改读取的即时成本里的BOM资料信息。


updateBomDataSourceData函数

	public List<SqlTable> updateBomDataSourceData(SqlEntity entity, int bomRec, int footerIndex, List<SqlTable> bomInfo, String bomDataSource);

说明

读取即时成本资料时触发。

参数

名称 类型 说明
entity SqlEntity 当前模块的数据实体
bomRec int BOM的行次
footerIndex int 下款表的行次
bomInfo List<SqlTable> 读取BOM信息的列表,使用bomInfo.get(0) 获取BOM的主查询信息。
bomDataSource String 数据来源类型

返回值

类型 说明
boolean 返回修改后的 bomInfo.


ModuleSettingHelper

目的

用于扩展判定模块是否为库存模块。


checkInventoryModule函数

	public boolean checkInventoryModule(long beId, String moduleName);

说明

判断当前模块是否为库存模块。

参数

名称 类型 说明
beId long 企业法人ID
moduleName String 模块名称

返回值

类型 说明
boolean 若为true,则当前模块为库存模块。


getStkModule函数

	public SqlTable getStkModule();

说明

用户读取库存模块,用来生成[业务流程]的缓存数据。

返回值

类型 说明
SqlTable 一个只有一列(module)的 SqlTable 表。提供额外的库存模块。


GenerateVoucher

目的

用于开发者与M18,在生成交易单据的凭证时的交互。


getUDFOrder函数

	public default int getUDFOrder(long beId, String moduleName, SqlEntity entity, boolean isStock) {
		return -1;
	}

说明

用于决定 GenerateUDFVoucher()函数是否该调用。返回的数值必须大于 -1

参数

名称 类型 说明
beId long 企业法人ID
moduleName String 模块名称
entity SqlEntity 当前单据的实体数据
isStock boolean 用于标志该单据是否为库存单据

返回值

类型 说明
int GenerateUDFVoucher() 需要被调用,返回值必须大于 -1


GenerateUDFVoucher函数

	public default Object GenerateUDFVoucher(long beId, String moduleName, SqlEntity entity, boolean isStock) {
		return null;
	}

说明

重写系统默认凭证生成规则, 将新SQL提供给系统并生成凭证。

参数

名称 类型 说明
beId long 企业法人ID
moduleName String 模块名称
entity SqlEntity 单据实体数据
isStock boolean 标志单据是否为库存单据

返回值

类型 说明
Object 若返回 null ,则当前函数无任何影响,进程继续运行。若返回 CheckMsg ,则中止当前运行进程,单据会保存失败。若返回 List<String> ,则包含所有生成凭证的SQL语句。


beforeGenerateVoucher函数

	public String beforeGenerateVoucher(long beId, String moduleName, SqlEntity entity, boolean isStock);

说明

GenerateUDFVouche()返回null时触发,开发人员可以在生成默认SQL语句之前提供其他的SQL语句。

参数

名称 类型 说明
beId long 企业法人ID
moduleName String 模块名称
entity SqlEntity 单据实体数据
isStock boolean 标志单据是否为库存相关单据

返回值

类型 说明
String 返回SQL语句必须在执行系统生成的SQL语句前执行。


beforeGenT函数

	public String beforeGenT(long beId, String moduleName, SqlEntity entity, boolean isStock);

说明

GenerateUDFVoucher() 返回null并且开发人员在生成默认SQL语句之前提供其他SQL语句时触发。

参数

名称 类型 说明
beId long 企业法人ID
moduleName String 模块名称
entity SqlEntity 单据实体数据
isStock boolean 标志单据是否为库存相关单据

返回值

类型 说明
String 返回的SQL语句需要在系统生成的SQL语句执行之前执行。


afterGenerateVoucher函数

	public String afterGenerateVoucher(long beId, String moduleName, SqlEntity entity, boolean isStock, Long voucherId, boolean genModel);

说明

GenerateUDFVoucher()返回null并且开发人员在生成凭证的所有默认SQL语句执行后有提供其他SQL语句时触发。

参数

名称 类型 说明
beId long 企业法人ID
moduleName String 模块名称
entity SqlEntity 单据实体数据
isStock boolean 标志单据是否为库存相关单据
voucherId Long 记账凭证ID
genModel boolean 标志凭证是否是即时生成的。

返回值

类型 说明
String 返回的SQL语句需要在系统生成的SQL语句执行后执行。


afterGenerateInstanceVoucher函数

	public String afterGenerateInstanceVoucher(long beId, String moduleName, SqlEntity entity, boolean isStock);

说明

afterGenerateVoucher() 之后触发,并在保存交易后生成凭证(即时凭证)。

参数

名称 类型 说明
beId long 企业法人ID
moduleName String 模块名称
entity SqlEntity 单据实体数据
isStock boolean 标志单据是否为库存相关单据

返回值

类型 说明
String 返回的SQL语句需要在系统生成的SQL语句执行后执行。


afterGenerateModuleVoucher函数

	public String afterGenerateModuleVoucher(long beId, String moduleName, List<Long> ids, boolean isStock);

说明

在模块是批量生成凭证的条件下,并所有系统默认的SQL语句生成时触发。

参数

名称 类型 数名
beId long 企业法人ID
moduleName String 模块名称
ids List<Long> 单据的ID列表
isStock boolean 标志单据是否为库存相关单据

返回值

类型 说明
String 返回的SQL语句需要在系统生成的SQL语句执行后执行


afterGenerateTranVoucher函数

	public String afterGenerateTranVoucher(long beId, String moduleName, long ids, boolean isStock);

说明

在模块是批量生成凭证的条件下,并所有系统默认的SQL语句生成时触发。

参数

名称 类型 说明
beId long 企业法人ID
moduleName String 模块名称
ids long 单据的ID列表
isStock boolean 标志单据是否为库存相关单据

返回值

类型 说明
String 返回的SQL语句需要在系统生成的SQL语句执行后执行


afterBatchRevertVoucher函数

	public String afterBatchRevertVoucher(long beId, long jlId);

说明

在凭证要还原并且所有系统默认的SQL语句生成的时候触发。

参数

名称 类型 说明
beId long 企业法人ID
jlId long 要还原的凭证的ID列表

返回值

类型 说明
String 返回的SQL语句需要在系统生成的SQL语句执行后执行


PrqAllocate

目的

在处理生成MRP单据时与M18进行交互。


supply_demand函数

	void supply_demand(long beId, SqlTable etdList, SqlTable etaList, SqlTable stkList, SqlTable etd_supply_List);

说明

为MRP生成单据中的特殊情况分配需求和供应数量。

参数

名称 类型 说明
beId long 企业法人ID
etdList SqlTable 步骤2中需求列表
etaList SqlTable 步骤2中供应列表
stkList SqlTable 库存列表
etd_supply_List SqlTable 按[可用量配置]的分配结果。


LoadLockTranHelper

目的

[锁定/解锁物料]模块与M18的交互。


addLoadLockTranCond函数

	public void addLoadLockTranCond(long beId, String loadType, String module, List<FormatCond> conds);

说明

读取相应的锁定/无锁定的物料时触发。 开发人员可以修改条件并影响搜索结果。

参数

名称 类型 说明
beId long 企业法人ID
loadType String 标识读取物料的类型,有lock, release两种。
module String 读取物料的模块
conds List<FormatCond> 用户自定义的条件

TradingSettingHelper

目的

用于扩展[贸易参数设定]设置模块。


getLastTranTableName函数

	public default String getLastTranTableName(String origin) {
		return "";
	}

说明

获取“上一次交易记录”来源的类型在缓存中的表名称。

参数

名称 类型 说明
origin String “上一次交易记录”来源的类型

返回值

类型 说明
String 返回“上一次交易记录”来源的类型在缓存中的表名称

addTradingSettingData函数

	public default void addTradingSettingData(Map<String, SqlTable> cacheMap) {
	}

说明

TradeStaticVar.tradingSetting缓存增加额外的缓存数据。

参数

名称 类型 说明
cacheMap Map<String, SqlTable> TradeStaticVar.tradingSetting缓存数据

EcnHelper

目的

用于扩展[工程变更单]模块。


ecnChangeProcessExtraData函数

	public default void ecnChangeProcessExtraData(SqlEntity ecnpEntity, int ecnptRec, SqlEntity bomEntity, int bomptRec) {
	};

说明

用于[工程变更单(工艺)]模块,对扩展增加的数据,替换到BOM变更单。

参数

名称 类型 说明
ecnpEntity SqlEntity [工程变更单(工艺)]的实体数据
ecnptRec int [工程变更单(工艺)]的行次
bomEntity SqlEntity [BOM]的实体数据
bomptRec int [BOM]工艺下款被变更的行次

ecnChangeMatExtraData函数

	public default void ecnChangeMatExtraData(SqlEntity ecnmEntity, int ecnmtRec, SqlEntity bomEntity, int bomtRec) {
	};

说明

用于[工程变更单(物料)]模块,对扩展增加的数据,替换到BOM变更单。

参数

名称 类型 说明
ecnmEntity SqlEntity [工程变更单(物料)]的实体数据
ecnmtRec int [工程变更单(物料)]的行次
bomEntity SqlEntity [BOM]的实体数据
bomtRec int [BOM]物料下款被变更的行次