[Web]明细表格API示例
Author: 郑颍丽、江炜
订单/报价单 全屏交互 编辑明细页面
扩展点对应位置 编辑时,同样的扩展点,显示为”编辑报价单“。 (非CPQ, CPQ 订单和报价单相同,以下以报价单为例)

订单报价单明细API说明
//实例化扩展点
const ext_quote_CPQPriceSetsExtensionPoint =
new xsyrpa.CPQPriceSetsExtensionPoint("quote_CPQPriceSetsExtensionPoint");
/****************************************** Events **********************************************************/
/*Events / outports*/
//编辑明细页面加载前事件
ext_quote_CPQPriceSetsExtensionPoint.on('beforeLoad', (data) => {
//传出data为
/*{
parentObjectId: 父实体id,
childObjectId: 子实体id,
parentRecordId: 报价单数据id,
productFamilyId: 价格表id,
supportCalculate: 是否支持系统默认计算,
enabledRules: 是否开通CPQ Rule License,
isCopy: 是否是生成或复制,
isCpq: 是否开通CPQ License,
srcObjectId: 生成或复制来源实体id,
srcDataId: 生成或复制来源数据id,
parentData: 主实体数据信息
availablePriceBookInfo: 可用的价格表信息
}*/
});
//编辑明细页面加载完成后事件
ext_quote_CPQPriceSetsExtensionPoint.on('loaded', (data) => {
//data 同beforeLoead
})
//编辑或生成,复制时, 首次加载明细数据后事件
ext_quote_CPQPriceSetsExtensionPoint.on('afterInitDetail', () => {
//仅暴露事件,无数据传出
});
//添加新的明细数据后事件
ext_quote_CPQPriceSetsExtensionPoint.on('afterAddDetail', () => {
//仅暴露事件,无数据传出
});
//编辑明细字段后事件
ext_quote_CPQPriceSetsExtensionPoint.on('afterEditDetail', (data) => {
//data
/*
{
detailId: 修改的明细数据id,
detailUuid: 修改的明细数据uuid,
itemApiKey: 修改的明细字段itemApiKey,
oldValue: 字段原始值oldValue,
newValue: 字段修改后的值newValue
}
*/
});
//保存明细前事件
ext_quote_CPQPriceSetsExtensionPoint.on('beforeSave', (data, resolve, reject) => {
//无data传出,如需校验,请调用getDetailData方法获取全部明细
resolve(); //resolve()后继续执行系统保存
//如 调用 reject() 则不执行系统保存
// 不调用 resolve 或 reject 程序将会被挂起等待
});
//快捷保存明细前事件
ext_quote_CPQPriceSetsExtensionPoint.on('beforeQuickSave', (data, resolve, reject) => {
//无data传出,如需校验,请调用getDetailData方法获取全部明细
resolve(); //resolve()后继续执行系统保存
//如 调用 reject() 则不执行系统保存
// 不调用 resolve 或 reject 程序将会被挂起等待
});
/****************************************** Methods **********************************************************/
/*Methods / inports*/
// 获取当前所有明细数据
ext_quote_CPQPriceSetsExtensionPoint.getDetailData().then((data) => {
// data as array
});
// 获取指定uuid明细数据
ext_quote_CPQPriceSetsExtensionPoint.getDetailData({detailUuid: xxx}).then((data) => {
// data as object
});
// 设置明细的数据值
ext_quote_CPQPriceSetsExtensionPoint.setDetailData({
data, // data是所有明细数据, 批量全覆盖, 不传则set 单条明细的某个字段的值。
detailId, // 指定明细数据的id
detailUuid, // 指定明细的uuid
apiKey, // 指定明细的字段apikey
value // 指定明细指定字段的值
});
// 删除明细的数据
ext_quote_CPQPriceSetsExtensionPoint.delDetailData({
detailId, // 指定明细的id
detailUuid, // 指定明细的uuid
hide // true/false, 明细删除后是否隐藏(针对编辑时已保存的明细, 系统默认已保存过的明细删除时,显示带删除线)
});
// 刷新明细的数据
ext_quote_CPQPriceSetsExtensionPoint.refreshDetail();
// 开启/禁用系统计算
ext_quote_CPQPriceSetsExtensionPoint.disableDefaultCalc({
enabled // true/false
});
// 执行单条明细计算
ext_quote_CPQPriceSetsExtensionPoint.detailCalculate({
detailUuid,
detailId,
itemApiKey, //设置参与系统计算的字段的值,并触发系统计算
newValue
});
// 获取价格表Id
ext_quote_CPQPriceSetsExtensionPoint.getProductFamilyId(); //获取的是一个promise对象
// 设置价格表Id
ext_quote_CPQPriceSetsExtensionPoint.setProductFamilyId({
id
});
// 设置明细错误信息
ext_quote_CPQPriceSetsExtensionPoint.setDetailError({
detailUuid,
detailId,
errorMsg //错误信息文案
});
// 设置单元格样式 (暂不支持!!!!)
ext_quote_CPQPriceSetsExtensionPoint.setCellStyle({
detailUuid,
detailId,
itemApiKey,
fontColor?, // 字体颜色
backgroundColor?, // 背景颜色
borderColor? // 边框颜色
});
// 设置单元格是否可编辑
ext_quote_CPQPriceSetsExtensionPoint.setCellEditable({
detailUuid,
detailId,
itemApiKey,
editable // true/false
});
// 设置单元格是否可见
ext_quote_CPQPriceSetsExtensionPoint.setCellVisible({
detailUuid,
detailId,
itemApiKey,
visible // true/false
});
// 设置行数据隐藏
ext_quote_CPQPriceSetsExtensionPoint.hideDetail({
detailUuid,
detailId,
visible // true/false
});
// 清空行数据(删除)
ext_quote_CPQPriceSetsExtensionPoint.clearDetailData();
/*
设置列可见/只读
需要在beforeLoad监听中调用才生效
可按明细业务类型设置,可同时设置多个字段
传参如下:
config: [
{entityType:'', itemApiKey: 'xxx', visible(editable): true/false } // 全部明细业务类型下的指定字段可见/只读
{entityType:'xxxx', itemApiKey: 'xxx', visible(editable): true/false } // 指定明细业务类型下的指定字段可见/只读
]
*/
// 设置列可见
ext_quote_CPQPriceSetsExtensionPoint.setColumnVisible({
config: any[]
});
// 设置列只读
ext_quote_CPQPriceSetsExtensionPoint.setColumnEditable({
config: any[]
});
**报价单明细代码示例:从销售机会新建报价单时,商机上的明细全部删除并隐藏不显示 **
//创建报价单明细扩展实例
const ext_quote_CPQPriceSetsExtensionPoint = new xsyrpa.CPQPriceSetsExtensionPoint("quote_CPQPriceSetsExtensionPoint");
let quoteFromOpp; //是否是从商机生成报价单
let hasCleared; //是否已经清空初始明细
//监听报价单明细配置页加载前事件
ext_quote_CPQPriceSetsExtensionPoint.on('beforeLoad', (data, resolve, reject) => {
hasCleared = false;
//根据data信息判断是否是商机生成明细
if(data.isCopy && data.srcObjectId == 3){
quoteFromOpp = true;
}else{
quoteFromOpp = false;
}
resolve(); //继续渲染
});
//监听初始明细渲染后事件
ext_quote_CPQPriceSetsExtensionPoint.on('afterInitDetail', ()=> {
if(quoteFromOpp && !hasCleared){
//如果是商机生成明细 并且 没有清空过明细时
ext_quote_CPQPriceSetsExtensionPoint.clearDetailData(); //清空明细(删除并隐藏)
hasCleared = true;
}
});
弹窗新建编辑实体带明细(商机)
新增的明细字段控制API
- 新建商机时 默认展开明细部分,从opportunity.subForm上 获取扩展点
const ext_opportunity_SubForm_opportunityProduct =
new xsyrpa.FormSubEntityTableExtensionPoint("opportunity.SubForm#*#opportunityProduct");
ext_opportunity_SubForm_opportunityProduct.on('loaded', function(data, resolve, reject){
ext_opportunity_SubForm_opportunityProduct.setDetailExpand({expand:true});
resolve(); //注意因为此处添加了阻塞性处理,所以需要监听 loaded的地方 resolve 进行后续的渲染处理。
});
- 设置明细数据中字段的可见,只读,赋值,从业务类型的明细表格获取扩展点
const ext_opportunityProduct_SubForm_EntityType_opportunityProduct_886950 =
new xsyrpa.FormSubEntityTableExtensionPoint("opportunityProduct.SubForm.EntityType#*#opportunityProduct_886950");
// 只读
ext_opportunityProduct_SubForm_EntityType_opportunityProduct_886950.setCellReadonly({
rowIndex: //数据行index
itemApiKey: //要修改的字段apiKey
readonly: true/false
});
// 赋值
ext_opportunityProduct_SubForm_EntityType_opportunityProduct_886950.setCellValue({
rowIndex: //数据行index
itemApiKey: //要修改的字段apiKey
value: //字段值 (文本或数值)
});
//可见
ext_opportunityProduct_SubForm_EntityType_opportunityProduct_886950.setCellVisible({
rowIndex: //数据行index
itemApiKey: //要修改的字段apiKey
visible: true/false
});
//设置明细表格(包含tab)是否可见
ext_customEntity166__c_SubForm_customEntity167__c.setDetailTabeVisible({
objectId:'1321131596169251',//明细表格的objectId
visible: true/false//true可见、false不可见
})
//设置新建、编辑表单“保存并提交申请”按钮是否可见
const ext_account_Form_ButtonGroup = new xsyrpa.ButtonGroupExtensionPoint("account.Form#*#ButtonGroup");//按钮组
const ext_account_Form_saveAndSubmitApply = new xsyrpa.ButtonExtensionPoint("account.Form#*#saveAndSubmitApply");//按钮
ext_account_Form_ButtonGroup.on('detailButtonGroupLoaded', ()=>{
ext_account_Form_saveAndSubmitApply.setVisible(value:true/false);//true可见、false不可见
})
