RPA JS 扩展开发文档

RPA JS 扩展开发文档

  • SDK接口说明
  • 代码示例

›All Blog Posts

All Blog Posts

  • 使用VS Code插件在本地调试页面代码
  • 如何不使用VS Code和Chrome工具进行RPA开发
  • [Web]明细代码示例
  • [Web]CPQ产品配置页扩展
  • RPAJS中如何实现AOP开发
  • [H5]商机,报价,订单明细自定义编辑页面
  • [H5]自定义实体,表单子实体批量示例
  • [H5]表单页代码示例
  • [H5]详情页代码示例
  • [H5]系统级API示例
  • [H5]调试RPA JS扩展代码
  • [H5]在自定义页面中使用RPA SDK
  • [Mobile]调试RPA JS扩展代码
  • [Web][新版]表单页代码示例
  • [Web]明细表格API示例
  • [Web]系统级API示例
  • [Web]表单页代码示例
  • [Web]列表页代码示例
  • [Web]详情页代码示例
  • [Web]调试RPA JS扩展代码
  • RPA JS 更新日志
  • RPA JS 常见问题Q&A
  • RPA JS 扩展开发介绍

[Web]明细代码示例

January 5, 2021

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();    //阻止保存
    }
});
Recent Posts
  • 1.1 报价单,订单自定义产品Picker
  • 1.2 报价单、订单明细字段值的设置和清空
  • 1.3 报价单、订单明细字段设置必填 、 只读、 可见属性
  • 1.4 报价单、订单明细行操作按钮设置可见性
  • 1.5 报价单、订单明细删除后事件
  • 1.6 报价单、订单明细删除行,增加行
  • 2.1 商机、自定义实体(旧表单)明细自定义Picker
  • 2.2 商机、自定义实体(旧表单)明细字段值的设置和清空
  • 2.3 商机、自定义实体(旧表单)明细字段的只读,可见,必填属性
  • 2.4 商机、自定义实体(旧表单)明细行操作按钮设置可见性
  • 2.5 商机、自定义实体(旧表单)明细行删除后事件
  • 2.6 商机、自定义实体(旧表单)明细删除行、增加行
Copyright © 2021 销售易