[Web]明细代码示例
1.1 报价单,订单自定义产品Picker
Event: pickerClick Method: afterPickerSelected
//系统方法实例
const ext_SystemUtils = new xsyrpa.SystemUtils();
//明细扩展实例
const ext_quote_CPQPriceSetsExtensionPoint = new xsyrpa.CPQPriceSetsExtensionPoint("quote_CPQPriceSetsExtensionPoint");
//监听明细picker点击+号
ext_quote_CPQPriceSetsExtensionPoint.on('pickerClick', (data, resolve, reject) => {
//接收到的系统明细picker打开需要的参数
console.log(data);
ext_SystemUtils.openDialog({
url: 'customPickerUrl',
windowSize:2,
title: "自定义选择产品"
}).then(function(data){
//data 为产品ids
//调用系统添加明细数据方法
ext_quote_CPQPriceSetsExtensionPoint.afterPickerSelected({ids: data});
});
});
1.2 报价单、订单明细字段值的设置和清空
Method: setDetailData
//明细扩展实例
const ext_quote_CPQPriceSetsExtensionPoint = new xsyrpa.CPQPriceSetsExtensionPoint("quote_CPQPriceSetsExtensionPoint");
// 获取当前所有明细数据
ext_quote_CPQPriceSetsExtensionPoint.getDetailData().then((data) => {
// data as array
console.log(data);
// 方法1:单个字段修改
// 设置第一条明细的数量字段为10
ext_quote_CPQPriceSetsExtensionPoint.setDetailData({
detailId: data[0].id, // 指定明细数据的id
detailUuid: data[0].detailUuid, // 指定明细的uuid
apiKey: 'quantity', // 指定明细的字段apikey
value: 10 // 指定明细指定字段的值
});
// 清空值设置value为空(清空报价单明细销售单价)
ext_quote_CPQPriceSetsExtensionPoint.setDetailData({
detailId: data[0].id, // 指定明细数据的id
detailUuid: data[0].detailUuid, // 指定明细的uuid
apiKey: 'price', // 指定明细的字段apikey
value: '' // 指定明细指定字段的值
});
// 方法2 设置第二条数据的多个字段值 (仅支持CPQ)
data[1].quantity = 10;
data[1].detailRemarks = 'edit by RPA';
ext_quote_CPQPriceSetsExtensionPoint.setDetailData({
data: data
});
ext_quote_CPQPriceSetsExtensionPoint.refreshDetail(); //刷新显示
});
1.3 报价单、订单明细字段设置必填 、 只读、 可见属性
Method:
setColumnRequired 设置列必填 setCellRequired 设置单元格必填
setColumnEditable 设置列只读/可编辑 setCellEditable 设置单元格必填/可编辑
setColumnVisible 设置列可见 setCellVisible 设置单元格可见
//明细扩展实例
const ext_quote_CPQPriceSetsExtensionPoint = new xsyrpa.CPQPriceSetsExtensionPoint("quote_CPQPriceSetsExtensionPoint");
// 方法1: 设置整列必填
/*
设置列可见/只读/必填
需要在beforeLoad监听中调用才生效
可按明细业务类型设置,可同时设置多个字段
传参如下:
config: [
{entityType:'', itemApiKey: 'xxx', visible(editable|required): true/false } // 全部明细业务类型下的指定字段可见/只读
{entityType:'xxxx', itemApiKey: 'xxx', visible(editable|required): true/false } // 指定明细业务类型下的指定字段可见/只读
]
*/
// 设置所有明细业务类型的备注字段必填
ext_quote_CPQPriceSetsExtensionPoint.on('beforeLoad', (data,resolve)=>
{
ext_quote_CPQPriceSetsExtensionPoint.setColumnRequired({
config:[{
entityType:'',
itemApiKey: 'detailRemarks',
required: true
}]
});
resolve();
})
// 方法2 设置某条明细某个字段必填
// 设置新添加的第一条明细数据的备注字段必填
// 添加新的明细数据后事件
ext_quote_CPQPriceSetsExtensionPoint.on('afterAddDetail', () => {
// 获取当前所有明细数据
ext_quote_CPQPriceSetsExtensionPoint.getDetailData().then((data) => {
ext_quote_CPQPriceSetsExtensionPoint.setCellRequired({
detailId: data[0].id,
detailUuid: data[0].detailUuid,
itemApiKey: 'detailRemarks',
required: true
});
});
});
1.4 报价单、订单明细行操作按钮设置可见性
Method: setDetailButtonVisible
//明细扩展实例
const ext_quote_CPQPriceSetsExtensionPoint = new xsyrpa.CPQPriceSetsExtensionPoint("quote_CPQPriceSetsExtensionPoint");
//设置第一行的删除按钮隐藏
ext_quote_CPQPriceSetsExtensionPoint.getDetailData().then((data) => {
ext_quote_CPQPriceSetsExtensionPoint.setDetailButtonVisible({
detailId: data[0].id,
detailUuid: data[0].detailUuid,
buttonType: 'delete', //copy | priceBook(仅CPQ) | bundle (仅CPQ)
visible: false
});
});
1.5 报价单、订单明细删除后事件
Event:afterDelDetail
const ext_quote_CPQPriceSetsExtensionPoint = new xsyrpa.CPQPriceSetsExtensionPoint("quote_CPQPriceSetsExtensionPoint");
ext_quote_CPQPriceSetsExtensionPoint.on('afterDelDetail', (data) => {console.log(data)});
1.6 报价单、订单明细删除行,增加行
Method:
delDetailData hideDetail clearDetailData afterPickerSelected
// 删除明细的数据
ext_quote_CPQPriceSetsExtensionPoint.delDetailData({
detailId, // 指定明细的id
detailUuid, // 指定明细的uuid
hide // true/false, 明细删除后是否隐藏(针对编辑时已保存的明细, 系统默认已保存过的明细删除时,显示带删除线)
});
// 设置行数据隐藏
ext_quote_CPQPriceSetsExtensionPoint.hideDetail({
detailUuid,
detailId,
visible // true/false
});
// 清空行数据(删除)
ext_quote_CPQPriceSetsExtensionPoint.clearDetailData();
// 增加行
// 由于订单,报价单明细是需要有映射转换的,因此可以直接使用 afterPickerSelect 方法来添加行。传递产品id即可。
//data 为产品ids
//调用系统添加明细数据方法
ext_quote_CPQPriceSetsExtensionPoint.afterPickerSelected({ids: data});
2.1 商机、自定义实体(旧表单)明细自定义Picker
//商机明细自定义picker
//创建商机明细扩展实例
const ext_opportunityProduct_Form_opportunityProduct = new xsyrpa.FormSubEntityTableExtensionPoint("opportunityProduct.Form#*#opportunityProduct-919228631532061");
//系统方法实例
const ext_SystemUtils = new xsyrpa.SystemUtils();
// 监听商机明细picker点击+号
ext_opportunityProduct_Form_opportunityProduct.on('pickerClick', function(data){
//接收到的系统商机明细picker打开需要的参数
console.log(data);
//打开Dialog, 链接到自定义页面
//自定义页面调用Api等方式(可将data传入作为参数)获取产品信息,这里随便使用一个该租户的产品为例
ext_SystemUtils.openDialog({
url: 'https://www.reynanote.com/?id=963469313770032',
windowSize:2,
title: "自定义选择产品"
}).then(function(data){
//data 为产品ids
//调用系统添加明细数据方法
ext_opportunityProduct_Form_opportunityProduct.afterPickerSelected({ids: data});
});
});
/*
自定义页面
*/
//自定义页面 传值 关闭picker
//自定义按钮,点击时
function(){
let msg = {
isvData: 1,2,3 //选择的数据ids,
doClose: true
};
window.top.postMessage(msg, '*');
}
2.2 商机、自定义实体(旧表单)明细字段值的设置和清空
//商机明细某业务类型明细表格实例
const oppDetail = new xsyrpa.FormSubEntityTableExtensionPoint("opportunityProduct.SubForm.EntityType#*#opportunityProduct_6822980");
//设置第一行数据的数量为20
oppDetail.setCellValue({
rowIndex: 1,
itemApiKey: 'amount',
value: 20
});
//清空第一行的单价
oppDetail.setCellValue({
rowIndex: 1,
itemApiKey: 'priceUnit',
value: ''
});
2.3 商机、自定义实体(旧表单)明细字段的只读,可见,必填属性
Method: setCellVisible //设置单元格可见 setCellReadonly //设置单元格只读 setCellEditable // 设置单元格可编辑 setCellRequired //设置单元格必填
const oppDetail = new xsyrpa.FormSubEntityTableExtensionPoint("opportunityProduct.SubForm.EntityType#*#opportunityProduct_6822980");
//设置第一行单价不可见
oppDetail.setCellVisible({
rowIndex: 1,
itemApiKey: 'priceUnit',
visible: false
});
//设置第一行数量只读
oppDetail.setCellReadonly({
rowIndex: 1,
itemApiKey: 'amount',
readonly: true
});
//设置第一行数据的价格表价格可编辑
oppDetail.setCellEditable({
rowIndex: 1,
itemApiKey: 'standardPrice',
editable: true
});
//设置第一行数据的折扣必填
oppDetail.setCellRequired({
rowIndex: 1,
itemApiKey: 'discount',
required: true
});
2.4 商机、自定义实体(旧表单)明细行操作按钮设置可见性
Method: setOperateButtonVisible
const oppDetail = new xsyrpa.FormSubEntityTableExtensionPoint("opportunityProduct.SubForm.EntityType#*#opportunityProduct_6822980");
// 隐藏第一行数据的删除按钮
oppDetail.setOperateButtonVisible({
buttonType: "delete", //"edit" | "delete" | "copy"
visible: false,
rowIndex: 1,
//id //编辑时可以传数据id来定位行
})
2.5 商机、自定义实体(旧表单)明细行删除后事件
Event: deleteRowData
const oppDetail = new xsyrpa.FormSubEntityTableExtensionPoint("opportunityProduct.SubForm.EntityType#*#opportunityProduct_6822980");
oppDetail.on("deleteRowData", (data) => {console.log(data)})
2.6 商机、自定义实体(旧表单)明细删除行、增加行
Method: deleteDetail clearDetails
const oppDetail = new xsyrpa.FormSubEntityTableExtensionPoint("opportunityProduct.SubForm.EntityType#*#opportunityProduct_6822980");
//删除第一行数据
oppDetail.deleteDetail({
rowIndex: 1,
// id: //传递id时,之后保存会真实删除。
})
// 清空明细 (仅支持新建时)
oppDetail.clearDetails();
// 增加行
// 商机明细需要产品映射等逻辑,因此可以直接使用afterPickerSelect来添加行
//创建商机明细扩展实例
const ext_opportunityProduct_Form_opportunityProduct = new xsyrpa.FormSubEntityTableExtensionPoint("opportunityProduct.Form#*#opportunityProduct-919228631532061");
//data 为产品ids
//调用系统添加明细数据方法
ext_opportunityProduct_Form_opportunityProduct.afterPickerSelected({ids: data});
//自定义明细,有批量依据时可以尝试使用afterPickerSelect来添加新行。
//没有批量依据的明细暂不支持添加行
//实例化订单编辑明细页扩展点
const ext_order_CPQPriceSetsExtensionPoint = new xsyrpa.CPQPriceSetsExtensionPoint("order_CPQPriceSetsExtensionPoint");
//监听保存前事件
ext_order_CPQPriceSetsExtensionPoint.on('beforeSave', async function(data, resolve, reject){
//获取当前明细数据
const detailData = await ext_order_CPQPriceSetsExtensionPoint.getDetailData();
console.log(detailData);
let pass = true;
//遍历数据
for(let i=0; i< detailData.length ; i++){
const currentDetail = detailData[i];
//当数据中的产品名称为1234时
if(currentDetail['productId-label'] == "1234"){
pass = false; //设置不能保存
//设置明细上的错误提示
ext_order_CPQPriceSetsExtensionPoint.setDetailError({
detailUuid: currentDetail.detailUuid,
errorMsg: '不能选择产品1234'
});
}
}
if(pass){
resolve(); //继续保存
}else {
reject(); //阻止保存
}
});
