# M18 ERP 装饰器 (前端接口)
Version: 1.1 | Release Date: 7/12/2018
# AccountEditorDecorator
# 接口定义
此装饰器用于处理[科目]模块界面中的字段更改操作。
public interface AccountEditorDecorator extends ViewDecorator {
public default void afterUpdateAccountSetting(String triggerFieldName) {
}
}
# 应用
在[帐户]模块界面中,当字段更新时(如更改<商机科目>或<银行帐户>的值),M18将调用AccountEditorDecorator
接口中的afterUpdateAccountSetting
函数。
private void updateAcccountSetting(String triggerFieldName) {
...
controller.notifyDecorator(AccountEditorDecorator.class, (decorator, params) -> decorator.afterUpdateAccountSetting((String) params[0]), new Object[] { triggerFieldName });
WebUtil.update(getMTName() + "_bankAcc", getMTName() + "_cashAcc", getMTName() + "_adjExAcc", ...);
}
在3PD的App中,您可以设置backingBean
或viewListener
实现AccountEditorDecorator
接口,并重写afterUpdateAccountSetting
函数。
public class AccountListener implements AccountEditorDecorator {
@Override
public void afterUpdateAccountSetting(String triggerFieldName) {
// do something, like "WebUtil.setDisabled(true, field);
}
...
}
# 详细说明
# 更新科目栏位
public default void afterUpdateAccountSetting(String triggerFieldName) {
}
说明
在[科目]模块界面中字段更新时会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
triggerFieldName | String | 触发函数时更改的栏位名称 |
# BatchGenDataDecorator
# 接口定义
此装饰器用于处理[自动文件中心]模块中的下款表数据。
public interface BatchGenDataDecorator extends ViewDecorator {
public void afterLoadData(SqlTable sourceTable);
}
# 应用
在[自动文件中心]中,当加载数据到目标模块时,M18将调用BatchGenDataDecorator
接口的AfterLoadData
函数。
public void loadBatchGenData(SqlTable sourceTable, JSONObject extraParam) {
...
getController().notifyDecorator(BatchGenDataDecorator.class,
(decorator, params) -> decorator.afterLoadData((SqlTable) params[0]),
new Object[] { sourceTable });
}
在3PD的App中,您可以设置backingBean
或viewListener
实现BatchGenDataDecorator
接口,并重写afterLoadData
函数。
public class XxxListener implements BatchGenDataDecorator {
@Override
public void afterLoadData(SqlTable sourceTable) {
//do something data loaded
}
...
}
# 详细说明
# 读取生成单据的数据
public default void afterLoadData(SqlTable sourceTable) {
}
说明
函数在[自动文件中心]下款表数据被加载到目标模块后触发。
参数
名称 | 类型 | 说明 |
---|---|---|
sourceTable | SqlTable | 被选择的数据 |
# ITradingCalcDecorator
# 接口定义
此装饰器用于处理交易模块中常见字段的更改操作。
public interface ITradingCalcDecorator extends ViewDecorator {
public default void before_update_adisc(IMacCalculateHelper calcHelper) {
}
public default void after_update_adisc(IMacCalculateHelper calcHelper) {
}
...
}
# 应用
在交易模块中,当更新公共字段时,M18将调用ItradingCalcDecorator
接口的before_update_xxx
函数和after_update_xxx
函数。
public void calc_update_adisc() {
controller.notifyDecorator(ITradingCalcDecorator.class, (decorator, params) -> decorator.before_update_adisc((IMacCalculateHelper) params[0]), new Object[] { calcHelper });
efe_calc_update_adisc();
controller.notifyDecorator(ITradingCalcDecorator.class, (decorator, params) -> decorator.after_update_adisc((IMacCalculateHelper) params[0]), new Object[] { calcHelper });
}
在3PD的App中,您可以设置backingBean
或viewListener
实现ItradingCalcDecorator
接口,并重写before_update_xxx
和after_update_xxx
函数。
public class TrdgVatTradeMainFooterListener implements ITradingCalcDecorator {
@Override
public void before_update_xxx(IMacCalculateHelper calcHelper) {
//do something
}
@Override
public void after_update_xxx(IMacCalculateHelper calcHelper) {
//do something
}
...
}
# 详细说明
# 下款产品表的<报价>栏位
public default void before_update_qup(IMacCalculateHelper calcHelper, int rec, SqlTable srcTable, boolean must_update) {
}
public default void after_update_qup(IMacCalculateHelper calcHelper, int rec, SqlTable srcTable, boolean must_update) {
}
说明
在交易单据的产品表加载<报价>字段的值时触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rec | int | 当前下款表的行次 |
srcTable | SqlTable | 价格来源数据表 |
must_update | boolean | 如果是reload_price_one_pro , must_update 为 true; 其他情况 must_update 为 false. |
# 下款产品表的<折扣>栏位
public default void before_a_mainfooter_disc(IMacCalculateHelper calcHelper, int rec, double inOldValue) {
}
public default void after_a_mainfooter_disc(IMacCalculateHelper calcHelper, int rec, double inOldValue) {
}
说明
当交易单据下款产品表的<折扣(%)>栏位更新时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rec | int | 当前下款表的行次 |
inOldValue | double | <折扣(%)>修改前的值 |
# 下款产品表的<金额>栏位
public default void before_a_mainfooter_amt(IMacCalculateHelper calcHelper, int rowIndex) {
}
public default void after_a_mainfooter_amt(IMacCalculateHelper calcHelper, int rowIndex) {
}
说明
当交易单据下款产品表的<金额>栏位更新时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rowIndex | int | 当前下款表的行次 |
# 下款产品表的<单位订价>栏位
public default void before_mainfooter_up(IMacCalculateHelper calcHelper, int rowIndex, SqlTable srcTable, boolean fromUc) {
}
public default void after_mainfooter_up(IMacCalculateHelper calcHelper, int rowIndex, SqlTable srcTable, boolean fromUc) {
}
说明
当交易单据下款产品表加载<单位定价>时,会触发以上函数。例如,当从产品来源加载数据到单位定价时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rowIndex | int | 当前下款表的行次 |
srcTable | SqlTable | 价格来源数据表 |
fromUc | boolean | 用来决定使用价格来源数据表的UP栏位还是UC栏位 |
# 下款产品表的<单位订价>栏位(在<单位定价>读取后)
public default void before_a_mainfooter_up(IMacCalculateHelper calcHelper, int rec) {
}
public default void after_a_mainfooter_up(IMacCalculateHelper calcHelper, int rec) {
}
说明
当交易单据下款产品表<单位定价>更改时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rec | int | 当前下款表的行次 |
# 下款产品表的<说明>栏位
public default void before_mainfooter_desc(IMacCalculateHelper calcHelper, int rowIndex, SqlTable srcTable) {
}
public default void after_mainfooter_desc(IMacCalculateHelper calcHelper, int rowIndex, SqlTable srcTable) {
}
说明
当交易单据下款产品表加载<说明>栏位时,会触发以上函数。例如,当从产品说明来源加载说明数据时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rowIndex | int | 当前下款表的行次 |
srcTable | SqlTable | 说明来源数据表 |
# 下款产品表的<数量>栏位
public default void before_a_mainfooter_qty(IMacCalculateHelper calcHelper, int rowIndex) {
}
public default void after_a_mainfooter_qty(IMacCalculateHelper calcHelper, int rowIndex) {
}
说明
当交易单据下款产品表<数量>栏位更改时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rowIndex | int | 当前下款表的行次 |
# 下款产品表的<数量 (没有批号)>栏位
public default void before_a_mainfooter_lotnoOutQty(IMacCalculateHelper calcHelper, int rowIndex) {
}
public default void after_a_mainfooter_lotnoOutQty(IMacCalculateHelper calcHelper, int rowIndex) {
}
说明
当交易单据下款产品表<数量 (没有批号)>栏位更新时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rowIndex | int | 当前下款表的行次 |
# 下款产品表的<单位>栏位
public default void before_up_byUnit(IMacCalculateHelper calcHelper, int rowIndex, long oldUnitId) {
}
public default void after_up_byUnit(IMacCalculateHelper calcHelper, int rowIndex, long oldUnitId) {
}
说明
当交易单据下款产品表<单位>栏位更改时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rowIndex | int | 当前下款表的行次 |
oldUnitId | long | <单位>修改前的值 |
# 总附加折扣收费
public default void before_update_adisc(IMacCalculateHelper calcHelper) {
}
public default void after_update_adisc(IMacCalculateHelper calcHelper) {
}
说明
当上款的<总附加收费>/<总附加折扣>重新计算时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
# 附加折扣/收费下款表的<金额>栏位
public default void before_a_adisc_amt(IMacCalculateHelper calcHelper, int rec) {
}
public default void after_a_adisc_amt(IMacCalculateHelper calcHelper, int rec) {
}
说明
当[附加折扣/收费]表的<金额>栏位更改时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rec | int | 当前[附加折扣/收费]表的行次 |
# 附加折扣/收费表的<收费/折扣率>栏位
public default void before_a_adisc_discrate(IMacCalculateHelper calcHelper, int rec) {
}
public default void after_a_adisc_discrate(IMacCalculateHelper calcHelper, int rec) {
}
说明
当[附加折扣/收费]表的<收费/折扣率>栏位更改时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
calcHelper | IMacCalculateHelper | MacCalculateHelper |
rec | int | 当前[附加折扣/收费]表的行次 |
# ITransactionDecorator
# 接口定义
这个渲染器是用于处理交易单据从来源单据加载附加折扣/收费数据。
public interface ITransactionDecorator extends ViewDecorator {
public void beforeAssignDisc(SqlTable lookupTable);
public void afterAssignDisc();
}
# 应用
在交易应用程序中,当加载来源单据的附加折扣/费用数据时,它将调用ITransactionDecorator
的AssignDisc
函数和afterAssignDisc
函数。
private void assign_so_disc(SqlTable sodisc) {
if (sodisc != null && sodisc.size() > 0) {
controller.notifyDecorator(ITransactionDecorator.class,
(decorator, params) -> decorator.beforeAssignDisc((SqlTable) params[0]), new Object[] { sodisc });
...
controller.notifyDecorator(ITransactionDecorator.class,
(decorator, params) -> decorator.afterAssignDisc(), null);
}
}
在3PD的App中,您可以设置backingBean
或viewListener
实现ITransactionDecorator
接口,并重写beforeAssignDisc
函数和afterAssignDisc
函数。
public class TrdgVatTradeMainFooterListener extends TransactionDecorator
implements ModuleViewListener, ITradingCalcDecorator {
@Override
public void beforeAssignDisc(SqlTable lookupTable) {
if (VatUtil.isVatPerItem(getBeId())) {
if (lookupTable != null && lookupTable.size() > 0) {
// handler vat fields (like taxAmt preTaxAmt)
}
}
}
@Override
public void afterAssignDisc() {
if (VatUtil.isVatEnabled(getBeId())) {
updateVatCalFields();
}
}
}
# 详细说明
# 附加折扣/收费加载
public void beforeAssignDisc(SqlTable lookupTable);
public void afterAssignDisc();
说明
当交易单据加载来源单据的附加折扣/收费数据时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
lookupTable | SqlTable | 从来源单据中读取的附加折扣/收费的数据 |
# PrqGenDecorator
# 接口定义
此渲染器是用来扩展[生成MRP单据]模块。
public interface PrqGenDecorator extends ViewDecorator {
public default List<String> getMoreFields() {
return null;
}
public default List<FormatCond> getMoreConds() {
return null;
}
...
}
# 应用
在[生成MRP单据]模块中,当读取数据,加载数据或者生成单据的操作中,会调用PrqGenDecorator
渲染器的相关函数。
public void refreshData() {
// Fields
List<String> fieldList = Arrays.asList("tranType", "tranId", "pproId", "proId", "bDesc",
"lot", "qty", "unitId", "dDate");
DecorateVisitCallback<PrqGenDecorator> fieldsCallBack = new
DecorateVisitCallback<PrqGenDecorator>() {
@Override
public boolean visited(PrqGenDecorator decorator, Object returnObject) {
if (returnObject != null) {
@SuppressWarnings("unchecked")
List<String> addFields = (List<String>) returnObject;
if (addFields != null) {
for (String field : addFields) {
if (!fieldList.contains(field)) {
fieldList.add(field);
}
}
}
}
return true;
}
};
controller.visitDecorator(PrqGenDecorator.class, (decorator, params) ->
decorator.getMoreFields(), new Object[] {}, fieldsCallBack);
}
在3PD的App中,您可以设置viewListener
实现PrqGenDecorator
接口,并重写里面的函数。
public class XxxListener implements PrqGenDecorator {
@Override
public List<String> getMoreFields() {
// Get more fields when loading data
}
...
}
# 详细说明
# 读取数据
public List<String> getMoreFields() {
// Define the list of extra fields
}
public List<FormatCond> getMoreConds() {
// Define the extra conditions to loading data
}
public void beforeAssignedData(long beId, SqlTable searchTable) {
// Do something before system assigning data
}
public void assignedShowField(SqlTable showTable, int rec, SqlTable searchTable, int index)
{
// Do something after system assigned data to one row
}
说明
在读取数据的时候,包括PrqGenBean.java
中的refreshData()
函数运行时,都会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
beId | long | 当前企业法人ID |
searchTable | SqlTable | 读取的数据 |
rec | int | [生成MRP单据]模块下款表的行次 |
showTable | SqlTable | [生成MRP单据]模块下款表 |
index | int | 读取的数据的行次 |
# 生成单据
public default CheckMsg validTableData(SqlTable showTable) {
// Add checking before generating transactions
}
public default List<String> getRequiredFields(String moduleName) {
// Define extra compulsory fields
}
public default void beforeSeparateRecored(SqlTable showTable) {
// Do something before separating records
}
说明
在生成单据的时候,包括PrqGenBean.java
中的batchGenData(ViewActionEvent vae)
函数运行时,都会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
showTable | SqlTable | [生成MRP单据]模块下款表 |
moduleName | Sting | 生成单据的类型 |
# UpdatePriceListDecorator
# 接口定义
此渲染器用来扩展[价目表(产品)]模块。
public interface UpdatePriceListDecorator extends ViewDecorator {
public default void afterLoadProductList(SqlTable priceList) {
}
public default void beforeSavePriceList(SqlEntity entity, int entityFooterRowIndex, SqlTable priceList, int priceListRowIndex) {
}
public default void afterUplBEChanged(long beId) {
}
}
# 应用
在[价目表(产品)]模块中,当执行读取、保存操作或者修改模块的<企业法人>下拉列表时,会调用以上函数。
@Override
public void valueChange(ValueChangeEvent vce) {
super.valueChange(vce);
String compId = vce.getComponent().getId();
if (compId.equals("beList")) {
...
controller.notifyDecorator(UpdatePriceListDecorator.class, (decorator, params) -> decorator.afterUplBEChanged((long) params[0]), new Object[] { beId });
...
}
}
}
在3PD的App中,您可以设置backingBean
或者viewListener
实现UpdatePriceListDecorator
接口,并重写里面相关的函数。
public class TrdgVatUpdatePriceListListener implements ViewListener, UpdatePriceListDecorator {
@Override
public void afterUplBEChanged(long beId) {
// handler vat fields
controller.setVariable("vatEnabled", VatUtil.isVatEnabled(beId));
controller.setVariable("vatPerItemEnabled", VatUtil.isVatPerItem(beId));
controller.setVariable("beId", beId);
WebUtil.update("priceList");
}
...
}
# 详细说明
# 读取产品价目表
public default void afterLoadProductList(SqlTable priceList) {
}
说明
当在[价目表(产品)]中读取产品价目表时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
priceList | SqlTable | 产品价目表数据 |
# 保存价目表
public default void beforeSavePriceList(SqlEntity entity, int entityFooterRowIndex, SqlTable priceList, int priceListRowIndex) {
}
说明
当在[价目表(产品)]中保存产品价目表时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
entity | SqlEntity | 保存的价目表entity |
entityFooterRowIndex | int | 当前entity下款表的行次 |
priceList | SqlTable | 价目表数据 |
priceListRowIndex | int | 价目表数据的行次 |
# 修改BE
public default void afterUplBEChanged(long beId) {
}
说明
当在[价目表(产品)]中选择BE下拉列表时,会触发以上函数。
参数
名称 | 类型 | 说明 |
---|---|---|
beId | long | 企业法人ID |
# EcnpDecorator
# 接口定义
此装饰器用于扩展[工程变更单 (工艺)]的前端操作。
public interface EcnpDecorator extends ViewDecorator {
public default void afterClearMainFooterInfo(int rowIndex) {
}
}
# 应用
在[工程变更单 (工艺)]中,当清除下款表数据后,M18将调用EcnpDecorator
接口的afterClearMainFooterInfo
函数。
public void clearMainFooterInfo(int rowIndex) {
...
controller.notifyDecorator(EcnpDecorator.class,
(decorator, params) -> decorator.afterClearMainFooterInfo((int) params[0]),
new Object[] { rowIndex });
...
}
在3PD的App中,您可以设置backingBean
或viewListener
实现EcnpDecorator
接口,并重写afterClearMainFooterInfo
函数。
public class XxxListener implements EcnpDecorator {
@Override
public void afterClearMainFooterInfo(int rowIndex) {
}
...
}
# 详细说明
# 清除下款栏位数据
public void afterClearMainFooterInfo(int rowIndex) {
}
说明
函数在[工程变更单 (工艺)]模块中清除下款数据后被调用。
参数
名称 | 类型 | 说明 |
---|---|---|
rowIndex | int | 下款表的行次 |
# EcnmDecorator
# 接口定义
此装饰器用于扩展[工程变更单 (物料)]的前端操作。
public interface EcnmDecorator extends ViewDecorator {
public default void afterClearMainFooterInfo(int rowIndex) {
}
}
# 应用
在[工程变更单 (物料)]中,当清除下款表数据后,M18将调用EcnmDecorator
接口的afterClearMainFooterInfo
函数。
public void clearMainFooterInfo(int rowIndex) {
...
controller.notifyDecorator(EcnmDecorator.class,
(decorator, params) -> decorator.afterClearMainFooterInfo((int) params[0]),
new Object[] { rowIndex });
...
}
在3PD的App中,您可以设置backingBean
或viewListener
实现EcnmDecorator
接口,并重写afterClearMainFooterInfo
函数。
public class XxxListener implements EcnmDecorator {
@Override
public void afterClearMainFooterInfo(int rowIndex) {
}
...
}
# 详细说明
# 清除下款栏位数据
public void afterClearMainFooterInfo(int rowIndex) {
}
说明
函数在[工程变更单 (物料)]模块中清除下款数据后被调用。
参数
名称 | 类型 | 说明 |
---|---|---|
rowIndex | int | 下款表的行次 |
# ERPViewDecorator
# 接口定义
此装饰器用于自定义单据“另存为”操作时,新单据数据的变更。
public interface ERPViewDecorator extends ViewDecorator {
public void handlerSaveAsAction();
}
# 应用
在将单据另存为新的单据时,M18将调用ERPViewDecorator
接口的handlerSaveAsAction
函数。
@Override
public void beforeSave(ModuleAction action) {
...
if (saveas) {
controller.notifyDecorator(ERPViewDecorator.class,
(decorator, params) -> decorator.handlerSaveAsAction(), new Object[] {});
}
}
在3PD的App中,您可以设置backingBean
或viewListener
实现ERPViewDecorator
接口,并重写handlerSaveAsAction
函数。
public class XxxListener implements ERPViewDecorator {
@Override
public void handlerSaveAsAction() {
super.handlerSaveAsAction();
}
...
}
# 详细说明
# 处理“另存为”新单据的数据
public void handlerSaveAsAction() {
}
说明
函数在“另存为”新单据保存之前被调用。