自定义类
一、介绍
类即为java类,自定义按钮,触发器,定时类等模块都可以调用自定义类,在类中处理一些逻辑。
1.进入类开发页面
- 登录系统,点击右上角人头像,选择开发者平台按钮,此按钮目前只开放给管理员简档用户。

- 选择左侧:扩展——》类

2.案例:查询客户对象数据
import net.sf.json.JSONObject;
import net.sf.json.JSONArray;
import net.sf.json.JSON;
/**
* author:*** on 2022-10-12
* 客户类
*/
public class AccountClass{
private CCService cs;
private UserInfo userInfo;
public AccountClass(UserInfo userInfo) {
this.userInfo = userInfo;
cs = new CCService(userInfo);
}
public JSONObject selectAccount() throws Exception {
JSONObject rtninfo = new JSONObject();//New JSONObject
JSONArray dataList = new JSONArray();//New JSONArray
boolean flag = false;
try{
//查询客户对象数据
String sql = "select name,leixing,fenji,hangye from Account where is_deleted='0' ";
List<CCObject> AccountList = cs.cqlQuery("Account", sql);//客户List
for (int i=0;i<AccountList.size();i++) {
String name = AccountList.get(i).get("name")==null?"":AccountList.get(i).get("name").toString();//客户名称
String type = AccountList.get(i).get("leixing")==null?"":AccountList.get(i).get("leixing").toString();//类型
String grade = AccountList.get(i).get("fenji")==null?"0":AccountList.get(i).get("fenji").toString();//分级
String industry = AccountList.get(i).get("hangye")==null?"0":AccountList.get(i).get("hangye").toString();//行业
JSONObject data = new JSONObject();//New JSONObject
data.put("name", name);//客户名称
data.put("type", type);//类型
data.put("grade", grade);//分级
data.put("industry", industry);//行业
data.put("no",(i+1)+"");//序号
dataList.add(data);
}
flag = true;
}catch(Exception e){
throw e;
}
rtninfo.put("status",flag);//状态
rtninfo.put("data",dataList.toString());//客户数据
return rtninfo;
}
}3.使用场景
二、进阶:类/定时类
1.CCService
1.1 在类中使用CCService
在类中使用CCService类中的方法,需要先实例化CCService对象。实例化方法如下:
CCService cs = new CCService((UserInfo)userInfo);1.2 新增记录:insert
新增记录时,使用CCObject对象,CCObject有两个构造方法:
- 传入对象API名称,构造一个数据对象:
CCObject opp = new CCObject("Opportunity");- 传入对象API名称和共享标志,构造一个对象的共享表对象:
CCObject oppshare = new CCObject("Opportunity", CCObject.IS_SHARED);给CCObject赋值时,可以直接使用中文字段名称,无需转换为API名称。要将CCobject保存到数据库,调用方法 cs.insert(opp)。注意:ID,自动编号,创建人,创建时间等系统字段不需要赋值!
1.3 查询记录:cquery
查询记录时,使用cs.cquery方法。cs.cquery方法有三个重载方法:
- 返回所有记录:
List<CCObject> opps = cs.cquery("Opportunity");- 按条件返回记录,支持常用的where条件:
List<CCObject> opps = cs.cquery("Opportunity", "khmc__c = '" + record_new.get("id") + "'");- 按条件返回并排序:
List<CCObject> opps = cs.cquery("Opportunity", "khmc__c = '" + record_new.get("id") + "'", "jine__c desc");注意:exp和ordering条件中的字段API名称后一定要加"__c"。
1.4 修改记录:update
修改记录时,使用cs.update方法。cs.update方法需要传入一个CCObject对象。
CCObject opp = cs.query("Opportunity", "id = '" + record_id + "'").get(0);
opp.put("name", "修改后的机会名称");
cs.update(opp);1.5 删除记录:delete
删除记录时,使用cs.delete方法。cs.delete方法需要传入一个CCObject对象。
CCObject opp = cs.query("Opportunity", "id = '" + record_id + "'").get(0);
cs.delete(opp);1.6 操作共享表:
- 查询共享表
List<CCObject> cquery(String objectApiName,String expression,boolean isDataObject);isDataObject 需要传入 false;- 新增共享表记录:见新增记录。
- 删除共享表
deleteShareObjectBySql(String objectApiName,String expression)注意:共享表的表达式中字段不需要加"__c"!
1.8 使用自定义设置 customSetting
- 查询“列表”类型的自定义设置数据,返回对应apiName的全部数据
Map map = cs.getListCustomSetting(String apiName);- 查询“列表”类型的自定义设置数据,返回对应apiName和Name的单条数据
Map map = cs.getListCustomSetting(String apiName, String Name);- 查询“层次结构”类型的自定义设置数据,返回对应apiName和权限(id为简档id或用户id)的单条数据
Map map = cs.getCustomSetting(String apiName, String id);2.SendEmail
SendEmail sendEmail = new SendEmail(userInfo);
sendEmail.sendMailFromSystem(
String []toAddress,
String []ccAddress,
String []bccAddress,
String subject,
String content,
boolean isText);3.DevLogger
- 使用自定义log日志 DevLogger
// 初始化日志类
DevLogger cclogger = new DevLogger(userInfo);
// 打印info级别日志
cclogger.devLogInfo(String log);
// 打印error级别日志
cclogger.devLogError(String log);
// 打印error级别异常日志
cclogger.devLogError(String log, Throwable throwable);4.TimeUtil
- 日期时间类型数据多时区支持。
由于java.util.Date和Calendar是基于本地时区的,因此在涉及到跨时区的数据处理时,可能会出现错误。
为了解决这个问题,可以使用TimeUtil工具类中的getNowDate(userInfo)方法来获取当前时间。getNowDate(userInfo)方法会根据用户信息中的时区来获取当前时间,因此可以保证数据的准确性。
例如,在将日期保存到数据库时,可以将new Date()改为调用TimeUtil.getNowDate(userInfo):
TpSysTask task = new TpSysTask();
task.setBeginTime(TimeUtil.getNowDate(userInfo));- 使用SimpleDateFormat来对Date进行格式化时,应给SimpleDateFormat类实例设置时区,
例如:
SimpleDateFormat myDateFormat=new SimpleDateFormat("yyyy-MM-dd");
myDateFormat.setTimeZone(TimeUtil.getUserTimeZone(userInfo));
// 或者使用TimeUtil提供的工具方法获取实例
SimpleDateFormat myDateFormat=TimeUtil.getSimpleDateFormat("yyyy-MM-dd",userInfo);- 使用Calendar类处理日期时,应给Calendar实例设置时区,获取Calendar对象的方法可任选以下两种,
Calendar cal=Calendar.getInstance(TimeUtil.getUserTimeZone(userInfo))
Calendar cal=TimeUtil.getCalendar(userInfo);5.CCObject
- 构造函数
// 构造一个数据对象,需传入对象API名称:
CCObject opp = new CCObject("Opportunity");
// 构造一个对象的共享表对象,需传入对象API名称及共享标志:
CCObject oppshare = new CCObject("Opportunity",CCObject.IS_SHARED);
// 给CCObject赋值直接用put,name 为对象的字段API名称
opp.put("name","value");三、示例:类/定时类
1.触发器使用类
触发器可以直接调用CCService类中的方法,无需实例化CCService对象。这是因为触发器由cloudcc平台动态进行编译,因此触发器可以直接对类进行调用。在触发器中调用,写法同java调用方法。

2.自定义类使用类
自定义类调用该类,需要使用PageClsInvoker类的invoker()方法。PageClsInvoker类是一个包装类,用于将自定义类的方法包装成函数,使自定义类可以直接调用。
// 自定义类中调用自定义类的方法
PageClsInvoker.invoker("Hello","test5",userInfo,map);详细方法:调用自定义类的方法,需要使用PageClsInvoker类的invoker()方法。
invoker()方法有两个重载版本:
Object invoker(String calssname, String method, List<Map> conlist, List<Map> arglist);
Object invoker(String calssname, String method, List<Map> conlist, Map map);参数说明:
- calssname:自定义类的名称。
- method:需要调用的自定义类的方法名称。
- conlist:调用的自定义类的构造器参数。如果没有,则可传null。
- argType:参数类型
- argValue:参数值
- arglist:调用的自定义类的方法的参数。如果没有,则可传null。
- argType:参数类型
- argValue:参数
使用Object invoker(String calssname, String method, List<Map> conlist, Map map);
public class Hello{
public Hello(){}
public Hello(UserInfo userInfo){
System.out.print("测试");
}
public void test5(Map map) throws Exception{
System.out.print("获取map中的值"+map.get(“name”));
}
}- 在自定义类中可以通过这样调用:
List<Map> conlist = new ArrayList<Map>();
Map c = new HashMap();
c.put("argType",UserInfo.class);
c.put("argValue",userInfo);
conlist.add(c);
Map m = new HashMap();
m.put("name",”Alex”);
new PageClsInvoker(userInfo).invoker("Hello","test5",conlist,m);使用Object invoker(String calssname, String method, List<Map> conlist, List<Map> arglist);
public class Hello{
public Hello(){}
public ServiceResult test3(UserInfo userInfo,String leadName) throws Exception{
CCService cs = new CCService((UserInfo)userInfo);
CCObject co = new CCObject("Lead");
co.put("name",name);
ServiceResult sr = cs.insert(co);return sr;
}
}- 在自定义类中可以通过这样调用:
List<Map> arglist = new ArrayList<Map>();
Map c = new HashMap();
c.put("argType",UserInfo.class);
c.put("argValue",userInfo);
arglist.add(c);
Map n = new HashMap();
n.put("argType",String.class);
n.put("argValue",”Alex”);
arglist.add(n);
new PageClsInvoker(userInfo).invoker("Hello","test5",null, arglist);