对象建模管理之系统内置服务使用说明

对象模型提供了一些内置服务,用于完成常见的基础功能。 从语法上分为模板服务和实例服务两类,如果把模板看作是java/js的class,模板服务就是class上的静态方法,而实例服务就是class的普通方法。 模板服务只能在模板上执行,服务别名首字母大写。实例服务只能在实例上执行,me绑定到实例。 内置的模板服务主要用于数据的CRUD。 内置的实例服务主要用于获取属性的实时值,历史值,设置属性实时值等。

•服务端脚本开发指南请参考:http://confluence.bluetron.cn/pages/viewpage.action?pageId=46581430

•模板/实例/属性的访问语法及命名空间的使用请参考:http://confluence.bluetron.cn/pages/viewpage.action?pageId=46575130

服务写法

示例: 入参: var inputs = { "propNames": "system.P_1" }

新版本: 1、var propValues = objects.Instance_64.getPropertyVQTValues(inputs) --objects-固定格式,Instance_64-实例对象别名,getPropertyVQTValues-方法名称,inputs-服务入参

1.1、 var inputs = { pageIndex:1, distinct:true, pageSize:10, }; var template = templates['system.person']; var result = template.GetDataTableEntries(inputs); result;

老版本: 2、var result = ObjectPool.get('Instance_64').executeService('getPropertyValues',inputs) --ObjectPool-固定格式,Instance_64-实例对象别名,executeService-固定方法,执行服务,getPropertyVQTValues-方法名称,inputs-服务入参

模板服务

目前所有的内置模板服务只能用于表单模板,后续会在所有模板上提供

示例中使用以下表单模板

•user: 员工表单模板,命名空间为work,包含以下属性uid: 字符串类型,员工编号name: 字符串类型,员工姓名dep: 字符串类型,员工部门age: 整数类型,员工年龄employ_time:日期类型,入职时间

AddDataTableEntry

•用途:向模板中插入一条数据。

•openapi入参格式

{
   "uid": "01",
   "name": "张三",
   "age": 30
}

•入参说明:param必填(兼容直接传入param对应的value数据)key是属性别名,value是属性值

•必填校验:如果属性被设置成了唯一标识符,则该属性必填,并且不能重复

•出参:整数,插入的数量。

•在自定义服务中调用

// 入参是一个对象,key是属性别名,value是属性值
var inputs = {
   uid: "01",
   name: "张三",
   age: 30
};

templates["work.user"].AddDataTableEntry(inputs);

•通过openapi调用 {domain}/runtime/work/template/user/service/system/AddDataTableEntry post body:

{
   "uid": "01",
   "name": "张三",
   "age": 30
}

AddDataTableEntries

•用途:向模板中插入多条数据。

•openapi入参

{
   "list":[
      {
         "name": "张三",
         "age": 30
      },
      {
         "system.name": "李四",
         "system.age": 40
      }
   ]
}

•入参说明:params必填(兼容直接传入params对应的value数据)必填key键"list"中包含所有待插入的数据,不能为null或者空数组[],格式同AddDateTableEntry

•出参:整数,插入的数量。

•在自定义服务中调用

var param = {
   list: [
      {
         name: "张三",
         age: 30
      },
      {
         name: "李四",
         age: 40
      }
   ]
};
var params = {
	params: JSON.stringify(param)
}

// 访问模板是省略命名空间
templates.user.AddDataTableEntries(params);

•通过openapi调用 {domain}/runtime/work/template/user/service/system/AddDataTableEntries post body:

{
   "list":[
      {
         "name": "张三",
         "age": 30
      },
      {
         "system.name": "李四",
         "system.age": 40
      }
   ]
}

UpdateDataTableEntry

•用途:更新模板的一条数据。

•openapi入参

{
    "update": {
        "age": 40,
        "grade": 3
    },
    "where": {
        "name": "张三",
        "dep": "研发"
    }
}

•入参说明:updateData必填(兼容直接传入updateData对应的value数据)必填key键"update"中包含需要更新的属性值,不能为null或者空{}并且至少包含一个更新字段,key是属性别名,value是属性值。必填key键"where"中的kv使用等于符号拼接条件,多个kv使用and拼接条件,不能为null或者空{}至少包含一个条件。

•出参:整数,更新的数量。

•在自定义服务中调用

var inputs = {
    update: {
        age: 40,
        grade: 3u
    },
    where: {
        name: "张三",
        dep: "研发"
    }
}
templates["work.user"].UpdateDataTableEntry(inputs);

•通过openapi调用 {domain}/runtime/work/template/user/service/system/UpdateDataTableEntry post body:

{
    "update": {
        "age": 40,
        "grade": 3
    },
    "where": {
        "name": "张三",
        "dep": "研发"
    }
}

DeleteDataTableEntries

•用途:删除模板的多条数据。

•openapi入参

{
    "name": "张三",
    "dep": "研发"
}

•入参说明:condition必填(兼容直接传入condition对应的value数据)参数中指定的是删除的where条件,kv使用等于符号拼接条件,多个kv使用and拼接条件,不能为空{}且至少包含一个条件。

•出参:整数,删除的数量。

•在自定义服务中调用

var inputs = {
    name: "张三",
    dep: "研发"
};

templates.user.DeleteDataTableEntries(inputs);

•通过openapi调用 {domain}/runtime/work/template/user/service/system/DeleteDataTableEntries post body:

{
    "name": "张三",
    "dep": "研发"
}

GetDataTableEntries

•用途:查询表单模板的多条数据。

•openapi入参

{
	"fields": [],
	"distinct":false,
	"pageIndex":1,
	"pageSize":50,
	"order": [
    	{
        	"order": "name",
			"sort": "desc"
    	}
	],
	"condition": {
		"and": {
			"name": "张三",
			"age": 20
		},
		"or": {
			"name": "李四",
			"age": 30
		}
	}
}

•入参说明:fields: 指定返回字段,格式为数组,不传值或为空值则查询全部列distinct: 是否去重,必填,默认为false,仅在指定了fields时有效pageIndex: 查询起始页,默认为1pageSize: 查询页大小,默认为50order: 排序,其中order为排序字段,sort为排序方式,desc为倒序,asc为正序。若在数组中定义了一个排序规则,则order字段和sort字段必填condition: 查询条件,使用模糊匹配需自己前后加%,运算符只能为and或者or,and和or中的条件分别为and和or的关系,and与or之间为and关系

•出参:

{
	"pagination": {
    	"current": 1,
    	"total": 1,
    	"pageSize": 10
	},
	"list": [
    	{
        	"work.uid": "user_fdbaa34tbvs",
        	"work.name": "zhangsan",
        	"work.age": 32,
        	"work.dep": "销售部",
        	"work.app_name": "system",
        	"work.creator_id": "1025876580291488",
        	"work.last_modifier_id": "1025876580291488",
        	"work.created_time": "2021-02-03 12:32:12",
        	"work.last_modified_time": "2021-02-03 12:32:12"
    	}
	]
}

•在自定义服务中调用

var param = {
	"fields": ["name", "age"],
	"pageIndex":1,
	"pageSize":10,
	"order": [
    	{
        	"order": "name",
			"sort": "desc"
    	}
	],
	"condition": {
		"and": {
			"name": "张三",
			"age": 20
		}
	}
}
var params = {
	params: JSON.stringify(param)
}

var data = templates["work.user"].GetDataTableEntries(params);

•通过openapi调用 {domain}/runtime/work/template/user/service/system/GetDataTableEntries post body:

{
	"fields": ["name", "age"],
	"pageIndex":1,
	"pageSize":10,
	"order": [
    	{
        	"order": "name",
			"sort": "desc"
    	}
	],
	"condition": {
		"and": {
			"name": "张三",
			"age": 20
		}
	}
}

getDataTableScript

•用途:查询数据脚本。

•openapi入参

{
	"inputs": "{\"fields\":[],\"distinct\":false,\"pageIndex\":1,\"pageSize\":50,\"order\":[{\"order\":\"name\",\"sort\":\"desc\"}],\"condition\":{\"and\":{\"name\":\"张三\",\"age\":20},\"or\":{\"name\":\"李四\",\"age\":30}}}"
}

•入参说明:inputs,非必填fields: 指定返回字段,格式为数组,不传值或为空值则查询全部列distinct: 是否去重,必填,默认为false,仅在指定了fields时有效pageIndex: 查询起始页,默认为1pageSize: 查询页大小,默认为50order: 排序,其中order为排序字段,sort为排序方式,desc为倒序,asc为正序。若在数组中定义了一个排序规则,则order字段和sort字段必填condition: 查询条件,使用模糊匹配需自己前后加%,运算符只能为and或者or,and和or中的条件分别为and和or的关系,and与or之间为and关系

•出参:

{
	"pagination": {
    	"current": 1,
    	"total": 1,
    	"pageSize": 10
	},
	"list": [
    	{
        	"work.uid": "user_fdbaa34tbvs",
        	"work.name": "zhangsan",
        	"work.age": 32,
        	"work.dep": "销售部",
        	"work.app_name": "system",
        	"work.creator_id": "1025876580291488",
        	"work.last_modifier_id": "1025876580291488",
        	"work.created_time": "2021-02-03 12:32:12",
        	"work.last_modified_time": "2021-02-03 12:32:12"
    	}
	]
}

•在自定义服务中调用

var param = {
	"fields": ["name", "age"],
	"pageIndex":1,
	"pageSize":10,
	"order": [
    	{
        	"order": "name",
			"sort": "desc"
    	}
	],
	"condition": {
		"and": {
			"name": "张三",
			"age": 20
		}
	}
}
var inputs = {
	inputs: JSON.stringify(param)
}

var data = templates["work.user"].getDataTableScript(inputs);

•通过openapi调用 {domain}/runtime/work/template/user/service/system/getDataTableScript post body:

{
	"inputs": "{\"fields\":[],\"distinct\":false,\"pageIndex\":1,\"pageSize\":50,\"order\":[{\"order\":\"name\",\"sort\":\"desc\"}],\"condition\":{\"and\":{\"name\":\"张三\",\"age\":20},\"or\":{\"name\":\"李四\",\"age\":30}}}"
}

RebuildDataTable

•用途:清除目标模板下所有数据。

•openapi入参:

{}

•入参说明:无需入参

•出参:整数,本次操作删除的数量。

•在自定义服务中调用

var inputs = {

};
// 访问模板是省略命名空间
templates.user.RebuildDataTable(inputs);

•通过openapi调用 {domain}/runtime/work/template/user/service/system/RebuildDataTable post body:

{}

getDatatableDetails

•用途:查询目标模板对应物化表的结构。

•openapi入参:

{}

•入参说明:无需入参

•出参:

{
	"data":{
		"columns":[
			{
				"name":"work_uid","type":"VARCHAR(255)"
			},
			{
				"name":"work_name","type":"VARCHAR(255)"
			},
			{
				"name":"work_employ_time","type":"DATETIME"
			},
			{
				"name":"work_dep","type":"VARCHAR(255)"
			},
			{
				"name":"work_age","type":"INTEGER"
			},
			{
				"name":"system_last_modifier_id","type":"VARCHAR(127)"
			},
			{
				"name":"system_app_name","type":"VARCHAR(127)"
			},
			{
				"name":"system_id","type":"BIGINT"
			},
			{
				"name":"system_created_time","type":"DATETIME"
			},
			{
				"name":"system_creator_id","type":"VARCHAR(127)"
			},
			{
				"name":"system_app_access_mode","type":"VARCHAR(32)"
			},
			{
				"name":"system_last_modified_time","type":"DATETIME"
			}
		],
		"tableName":"work_user"
	},
	"error":false
}

•在自定义服务中调用

var inputs = {

};
// 访问模板是省略命名空间
templates.user.getDatatableDetails(inputs);

•通过openapi调用 {domain}/runtime/work/template/user/service/system/getDatatableDetails post body:

{}

querySQLExec

•用途:编写sql直接执行

•openapi入参:

{
	"sql": "select * from work_user where work_name = ${name} and work_age = ${xx.age}",
	"params":[
		{
			"name":"name", "value":"zhangsan"
		},
		{
			"name":"xx.age","value":28
		}
	], 
	"pageSize":200
}

•入参说明:input必填(兼容直接传入input对应的value数据)必填key键"sql",需要执行的sql本体,可以用${}来定义一个变量,若在本次传入对应变量的k-v,会将该${}进行替换非必填key键"orderField",需要排序的字段,只支持单个字段排序,(因为底层数据库差异,对于自身有嵌套查询指定排序不生效的时候,可以通过显示传入这个参数,指定排序)非必填key键"order",可选ASC/DESC,默认ASC非必填key键"pageSize",此次执行sql查询的数据数量,默认为200,会覆盖sql中指定的limit

•出参:

{
	"total":1,
	"data":{
		"columnNames":[				
			"system_id",
			"system_created_time",
			"system_last_modified_time",
			"system_creator_id",
			"system_last_modifier_id",
			"system_app_name",
			"system_app_access_mode",
			"work_uid",
			"work_name",
			"work_dep",
			"work_age",
			"work_employ_time"
		],
		"dataSource":[
			{
				"system_creator_id":"1",
				"system_app_name":"system",
				"work_employ_time":"2022-05-10T09:02:42Z",
				"system_id":12554,
				"work_name":"zhangsan",
				"work_dep":"develop",
				"system_last_modified_time":"2022-05-10T10:16:54Z",
				"work_uid":"23423535",
				"system_last_modifier_id":"1",
				"system_app_access_mode":"PUBLIC",
				"work_age":28,
				"system_created_time":"2022-05-10T10:16:54Z"
			}
		]
	}
}

•在自定义服务中调用

var param = {
	"sql": "select * from work_user where work_name = ${name} and work_age = ${xx.age}",
	"params":[
		{
			"name":"name", "value":"zhangsan"
		},
		{
			"name":"xx.age","value":28
		}
	], 
	"pageSize":200
}
var inputs = {
	input: JSON.stringify(param)
};
// 访问模板是省略命名空间
templates.user.querySQLExec(inputs);

•通过openapi调用 {domain}/runtime/work/template/user/service/system/querySQLExec post body:

{
	"sql": "select * from work_user where work_name = ${name} and work_age = ${xx.age}",
	"params":[
		{
			"name":"name", "value":"zhangsan"
		},
		{
			"name":"xx.age","value":28
		}
	], 
	"pageSize":200
}

实例服务

实例服务只能在实体模板的实例上执行

示例中使用以下实体模板

•device: 设备实体模板,命名空间为factory,包含以下属性code: 字符串类型,设备编码name: 字符串类型,设备名称workshop: 字符串类型,所属车间first_use_time:日期类型,首次投入使用时间temperature: float类型,温度pressure:float类型,气压

device模板中有一个锅炉实例,别名为boiler1

注:所有带命名空间的地方,命名空间可以不传,但是如果存在同名的会报错

getPropertyValue

•用途: 获取属性实时值

•入参

{
	"propName": "namespace.propertyName",
	"destUnitName": "destUnitName"
}

•入参说明:propName:必填,格式为要查询的属性命名空间.别名destUnitName:非必填,格式为要换算的目标单位名称

•出参: 属性快照值

•在自定义服务中调用

var inputs = {
	"propName": "factory.temperature"
}

var propValue = objects.boiler1.getPropertyValue(inputs)

•通过openapi调用 {domain}/runtime/factory/template/device/instance/boiler1/service/system/getPropertyValue post body:

{
	"propName": "factory.temperature",
	"destUnitName": "destUnitName"
}

getPropertyValues

•用途: 批量获取属性实时值

•入参

{
	"propNames": "namespace.propertyName1,namespace.propertyName2,namespace.propertyName3",
    "destUnitNames": ",,摄氏度"
}

•入参说明:propNames:必填,格式为要查询的属性命名空间.别名,多个属性之间用逗号分隔destUnitNames:非必填,格式为要换算的单位名称,与propNames一一对应,上例为对第三个属性值做换算

•出参

{
	"/templateNamespace/templateName/instanceName/propertyNamespace/propertyName1": 50,
	"/templateNamespace/templateName/instanceName/propertyNamespace/propertyName2": 150
}

•在自定义服务中调用

var inputs = {
	"propNames": "factory.pressure,factory.temperature"
}

var propValues = objects.boiler1.getPropertyValues(inputs)

•通过openapi调用 {domain}/runtime/factory/template/device/instance/boiler1/service/system/getPropertyValues post body:

{ "propNames": "factory.pressure,factory.temperature" }

getPropertyVQTValue

•用途: 获取属性实时值,以VQT格式返回数据

•入参

{
	"propName": "namespace.propertyName",
	"destUnitName": "destUnitName"
}

•入参说明:propName:必填,格式为要查询的属性命名空间.别名destUnitName:非必填,格式为要换算的单位名称

•出参:

{
	"value": 18,
	"tags": {
    	"name": "/templateNamespace/templateName/instanceName/propertyNamespace/propertyName",
    	"value": 50,
    	"status": "0",
    	"timeStamp": 1612355987068
	}
}

•在自定义服务中调用

var inputs = {
	"propName": "factory.temperature"
}

var propValue = objects.boiler1.getPropertyVQTValue(inputs)

•通过openapi调用 {domain}/runtime/factory/template/device/instace/boiler1/service/system/getPropertyVQTValue post body:

{
	"propName": "factory.temperature"
}

getPropertyVQTValues

•用途: 批量获取属性实时值,以VQT格式返回数据

•入参

{
	"propNames": "namespace.propertyName1,namespace.propertyName2",
	"destUnitNames": "destUnitName"
}

•入参说明:propNames:必填,格式为要查询的属性命名空间.别名,多个属性之间用逗号分隔destUnitNames:非必填,格式为换算的单位名称与propNames对应,多个属性之间用逗号分隔

•出参:

{
	"/templateNamespace/templateName/instanceName/propertyNamespace/propertyName1": {
    	"name": "/templateNamespace/templateName/instanceName/propertyNamespace/propertyName1",
    	"value": 50,
    	"status": "0",
    	"timeStamp": 1612356497037
	},
	"/templateNamespace/templateName/instanceName/propertyNamespace/propertyName2": {
    	"name": "/templateNamespace/templateName/instanceName/propertyNamespace/propertyName2",
    	"value": 150,
    	"status": "0",
    	"timeStamp": 1612356497037
	}
}

•在自定义服务中调用

var inputs = {
	"propNames": "factory.pressure,factory.temperature"
}

var propValues = objects.boiler1.getPropertyVQTValues(inputs)

•通过openapi调用 {domain}/runtime/factory/template/device/instance/boiler1/service/system/getPropertyVQTValues post body:

{
	"propNames": "factory.pressure,factory.temperature"
}

getPropertyLastValue

•用途: 获取属性最后一个正常的历史值

•入参

{
	"propName": "namespace.propertyName",
	"destUnitName": "destUnitName"
}

•入参说明:propName:必填,格式为要查询的属性命名空间.别名destUnitName:非必填,格式为要换算的单位名称

•出参: 最后一个正常的历史值

•在自定义服务中调用

var inputs = {
	"propName": "factory.temperature"
}

var propValue = objects.boiler1.getPropertyLastValue(inputs)

•通过openapi调用 {domain}/runtime/factory/template/device/instance/boiler1/service/system/getPropertyLastValue post body:

{
	"propName": "factory.temperature"
}

getPropertyLastVQTValue

•用途: 获取属性最后一个正常的历史值,以VQT格式返回数据

•入参

{
	"propName": "namespace.propertyName",
	"destUnitName": "destUnitName"
}

•入参说明:propName:必填,格式为要查询的属性命名空间.别名destUnitName:非必填,格式为要换算的单位名称

•出参

{
	"time": "2021-02-03T13:16:17Z",
	"value": 50,
	"status": "0"
}

•在自定义服务中调用

var inputs = {
	"propName": "factory.temperature"
}

var propValue = objects.boiler1.getPropertyLastValue(inputs)

•通过openapi调用 {domain}/runtime/factory/template/device/instance/boiler1/service/system/getPropertyLastVQTValue post body:

{
	"propName": "factory.temperature"
}

getPropertiesHistory

•用途: 获取属性历史值

•入参(兼容了2.0版本的简化写法) { "objName":"init_WQG_ENTITY_INSTANCE", "propNames":[ "init_WQG_ENTITY_INSTANCE_PROPERTY_02" ], "startTime":"2023-02-07T02:00:00Z", "endTime":"2022-08-05T06:00:00Z", "limit":"500", "pageNo":"1" }

•入参

{
	"fill": {
    	"strategy": "previous"
	},
	"groupBy": {
    	"time": "300s"
	},
	"limit": 5,
	"offset": 0,
	"select": [
    	"first(\"templateNamespace.templateName.instanceName.propertyNamespace.propertyName\")",
        "difference(\"first(\"templateNamespace.templateName.instanceName.propertyNamespace.propertyName\")\")"
	],
	"destUnitNames":[
    	"destUnitName1",
		"destUnitName2"
	],
	"where": {
    	"and": {
        	"timestamp": {
            	"ge": "",
            	"gt": "2020-05-26T05:30:00Z",
            	"le": "",
            	"lt": "2020-05-26T06:15:01Z"
        	}
    	}
	}
}

•入参说明:inputs必填(兼容直接传入inputs对应的value数据)fill: 非必填,补值策略,需配合聚合函数使用previous 如果当前窗口没有值,以前一个窗口的值填充line 根据前后两个点拉直线补值,即窗口内的值都相同linear 同linenone 不补groupBy: 非必填,聚合窗口,配合聚合函数使用,如果用了groupBy字段,必须要有time字段且不为null格式:窗口间隔[,窗口偏移],例如:1h表示窗口是一小时,没有偏移。 1h,1m表示窗口是1小时偏移1分钟。计算时间从1970年1月1日0时0分0秒开始窗口单位可以是:秒(s),分(m),小时(h),天(d)limit:非必填,指定返回数据量,必须大于等于1,默认10000offset: 非必填,偏移量,必须大于等于0select:必填查询表达式属性格式:模板命名空间.模板别名.实例别名.属性命名空间.属性别名,例如:"system.t1.i1.system.p1"聚合查询格式:function(attr),function支持:mean,sum,max,min,first,last,count,如:"max("system.t1.i1.system.p1")"聚合求差: difference,格式为difference(function(attr)), function支持:mean,sum,max,min,first,last,count,含义为平均值差值,最大值差值等,具体入参如:"difference("first("system.t1.i1.system.p1")")";另外当为求差查询时补值参数fill无效destUnitNames: 非必填换算单位格式:单位名称,例如:"米"where:必填,时间戳表达式,支持的操作符:ge:大于等于le:小于等于gt:大于lt:小于le,lt如果都没有,取默认值(当前时间),如果都有值,会忽略le,ge和gt至少填一个,如果都有值,会忽略ge,若不是一个有效的区间值,取ge或gt的时间点作为时间区间

•在自定义服务中调用

var inputs = {
	"fill": {
    	"strategy": "previous"
	},
	"groupBy": {
    	"time": "300s"
	},
	"limit": 5,
	"offset": 0,
	"select": [
    	"first(\"factory.device.boiler1.factory.temperature\")"
	],
	"where": {
    	"and": {
        	"timestamp": {
            	"ge": "",
            	"gt": "2020-05-26T05:30:00Z",
            	"le": "",
            	"lt": "2020-05-26T06:15:01Z"
        	}
    	}
	}
}

var param = {
	"inputs": JSON.stringify(inputs)
}

var propValue = objects.boiler1.getPropertiesHistory(param)

•通过openapi调用 {domain}/runtime/factory/template/device/instance/boiler1/service/system/getPropertiesHistory post body:

{
	"fill": {
    	"strategy": "previous"
	},
	"groupBy": {
    	"time": "300s"
	},
	"limit": 5,
	"offset": 0,
	"select": [
    	"first(\"factory.device.boiler1.factory.temperature")"
	],
	"where": {
    	"and": {
        	"timestamp": {
            	"ge": "",
            	"gt": "2020-05-26T05:30:00Z",
            	"le": "",
            	"lt": "2020-05-26T06:15:01Z"
        	}
    	}
	}
}

getCertainHistory

•用途: 根据给定时刻和处理策略获取最近一条历史值

•入参

{
	"propNames": [
    	"namespace.propertyName1",
    	"namespace.propertyName2"
	],
	"time": "2021-01-01T12:00:00Z",
	"strategy": "pre/next"
}
{
	"destUnitNames": 
		destUnitName1,
    	destUnitName2
}

•入参说明:inputs必填(兼容直接传入inputs对应的value数据)propNames:必填,要查询的属性命名空间.别名的集合destUnitNames: 非必填,要换算的单位名称time:必填,指定查询的时间,时间格式为TZ格式,如2021-01-01T12:00:00Zstrategy:非必填,查询策略,pre为指定时间的前一个值,next为后一个值,默认值为nextvalueOnly:非必填,默认值为true

•出参

{
	"map": {
    	"/templateNamespace/templateName/instanceName/propertyNamespace/propertyName1": 50,
    	"/templateNamespace/templateName/instanceName/propertyNamespace/propertyName2": 150
	}
}

•在自定义服务中调用

var inputs = {
	"propNames": [
    	"factory.temperature",
    	"factory.pressure"
	],
	"time": "2021-01-01T12:00:00Z",
	"strategy": "pre",
	"destUnitNames":["destUnitNames1","destUnitNames2"]
}
var param = {
	"inputs": JSON.stringify(inputs)
}

var propValue = objects.boiler1.getCertainHistory(param)

•通过openapi调用 {domain}/runtime/factory/template/device/instance/boiler1/service/system/getCertainHistory post body:

{
	"propNames": [
    	"factory.temperature",
    	"factory.pressure"
	],
	"time": "2021-01-01T12:00:00Z",
	"strategy": "next"
}

setPropertyValue

•用途: 设置属性实时值

•入参

{
	"propName": "namespace.propertyName",
	"propValue": 123
}

•入参说明:propName:必填,格式为要查询的属性命名空间.别名propValue:必填,要设置的属性值只读属性不可使用该服务设置属性值

•出参

{
	"success":true
}

•在自定义服务中调用

var inputs = {
	"propName": "factory.temperature",
	"propValue": 123
}

var result = objects.boiler1.setPropertyValue(inputs)

•通过openapi调用 {domain}/runtime/factory/template/device/instance/boiler1/service/system/setPropertyValue post body:

{
	"propName": "factory.temperature",
	"propValue": 123
}

setPropertyValues

•用途: 批量设置属性实时值

•入参

{
	"namsapace.propertyName1": "11",
	"namsapace.propertyName2": "zhangsan"
}

•入参说明:propValues:必填(兼容直接传入propValues对应的value数据),不能为空{}且需要有至少设置一组属性值只读属性不可使用该服务设置属性值key为属性命名空间.别名,value为要设置的属性值

•出参

{
	"success":true
}

•在自定义服务中调用

var inputs = {
	"factory.temperature": 50,
	"factory.pressure": 150
}

objects.boiler1.setPropertyValues(inputs)

•通过openapi调用 {domain}/runtime/factory/template/device/instance/boiler1/service/system/setPropertyValues post body:

{
	"factory.temperature": 50,
	"factory.pressure": 150
}

setPropertyVQTValues

•用途: 批量设置属性VQT实时值

•入参

•注意事项:value必须是字符串,所以需要先把要设置的值转为字符串

{
	"namespace.propertyName": [
    	{
        	"value": "234",
        	"timestamp": 1612408661716
    	}
	]
}

•入参说明:inputs必填(兼容直接传入propValues对应的value数据),不能为空{}且需要有至少设置一组属性值只读属性不可使用该服务设置属性值key为属性命名空间.别名,value为要设置的属性值集合,集合的数据中key键"value"为属性值,必填;key键"timestamp"为设置的时间戳,非必填,默认为当前时间

•出参

{
	"success":true
}

•在自定义服务中调用

var param = {
	"factory.temperature": [
    	{
        	"value": 50,
        	"timestamp": 1612408661716
    	}
	],
	"factory.pressure": [
    	{
        	"value": 150,
        	"timestamp": 1612408661716
    	}
	]
}

var inputs = {
	inputs: JSON.stringify(param)
}

objects.boiler1.setPropertyVQTValues(inputs)

•通过openapi调用 {domain}/runtime/factory/template/device/instace/boiler1/service/system/setPropertyVQTValues post body:

{
	"factory.temperature": [
    	{
        	"value": 50,
        	"timestamp": 1612408661716
    	}
	],
	"factory.pressure": [
    	{
        	"value": 150,
        	"timestamp": 1612408661716
    	}
	]
}

setPropertyDefaultValue

•用途: 设置属性默认值

•入参

{
	"propName": "namespace.propertyName",
	"propValue": 123
}

•入参说明:propName:必填,格式为要查询的属性命名空间.别名propValue:必填,要设置的属性值

•出参

{
	"success":true
}

•在自定义服务中调用

var inputs = {
	"propName": "factory.temperature",
	"propValue": 123
}

var result = objects.boiler1.setPropertyDefaultValue(inputs)

•通过openapi调用 {domain}/runtime/factory/template/device/service/system/setPropertyDefaultValue post body:

{
	"propName": "factory.temperature",
	"propValue": 123
}

内置服务时间类型数据输出格式/时区使用说明

•直接执行内置服务根据接口调用header参数中的OODM-DATETIME-FORMAT来指定datetime类型数据的输出格式,目前支持:DEFAULT ----- YYYY-MM-DD hh:mm:ss;UTC ----- YYYY-MM-DDThh:mm:ssZ;UTC_MILLIS ----- YYYY-MM-DDThh:mm:ss.sssZ,默认时间格式为DEFAULT当指定的输出格式为DEFAULT时,可以使用header参数OODM-UTC-OFFSET来指定时区偏移量,值是整数,单位分钟,例如东8区(+08:00):480,西8区(-08:00):-480date类型的数据格式始终为YYYY-MM-DD

•自定义服务调用内置服务

•调用内置服务所在的服务的时间格式即为内置服务的时区,例如:

1.header中已经设置时间格式为UTC(此时对于直接调用的自定义服务来说时间格式为header中的时间格式即为UTC,但是对于自定义服务调用的服务来说没有设置过时区即为默认值DEFAULT),设置属性p1为2020-10-01 10:00:00,获取值也为2020-10-01 10:00:00

var input = {"propName": "p1", "propValue":"2020-10-01 10:00:00"};
me.setPropertyValue(input);
me.getPropertyValue(input);

2.header中已经设置时间格式为UTC,设置属性p1为2020-10-01 15:00:00,然后重新设置了时间格式为UTC(对于获取值服务来说时区改变了即为UTC),获取值则为2020-10-01T15:00:00Z

var input = {"propName": "p1", "propValue":"2020-10-01 15:00:00"};
me.setPropertyValue(input);
currentServiceContext.setDateFormatType("UTC");
me.getPropertyValue(input);

•关于时间类型输入:目前服务输入没有开放datetime和date类型,所以header的时间格式不对任何输入参数影响,只和执行服务当时的时区有关

  • 23
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值