
# 数据接口
接口详情请参考第五章节《接口和样式参考.docx》
1、**createSourceAttribute**
接口用于存储资产来源属性：资产上架页，订购页都可能用，比如Astro轻应用资产上架页用于存储用户鉴权信息。
2、**querySourceAttribute**
接口用于用户查询来源属性值，资产上架页，订阅页都可能用。
3、**filterSourceAttribute**
资产上架过滤已被使用的来源属性：以Astro轻应用资产为例，因为不允许同一个资产对象多次被上架，此接口用于过滤已被上架过的资产对象，资产上架页调用。
4、**querySubscriptionSourceAttribute**
接口用于业务用户根据订阅实例号查询商品和用户属性，订阅页调用，查询订阅自定义属性。同时对订阅实例号与当前用户信息进行校验
5、**notifySubscriptionStatus**
接口用于适配器通知订阅实例状态，订阅页调用。
**变更：为适配多来源底座，在通知订阅状态时，新增sourceId参数作为某一来源下的订阅实例状态，用于区分多来源部署状态划分。**
6、**recordLog**
记录接口日志及操作日志。
7、**uploadOBSObject**
存入OBS对象，适用于ServiceStage类来源部署时，存入私仓中。
8、**downloadOBSObject**
获取OBS对象，适用于ServiceStage类来源发布时，从私仓中下载。
9、**createOBSBucket**
创建OBS桶，适用于serviceStage类安装时使用，创建的OBS桶信息存储进用户级来源属性信息内，每次进行安装时，校验当前用户当前来源下的'User'级属性信息内是否存在桶信息，存在则直接使用，不存在则创建OBS桶，将桶信息存储进当前来源User级来源属性信息内。
10、**fileDownload**
附件下载接口，屏蔽基线接口校验，直接从租户公仓下载资源。
11、**交互脚本（用于资产管理各个阶段调用适配器逻辑）**
命名规范：适配器名称**__Interaction**
注意：交互脚本命名取适配器命名，否则在安装适配器时无法自动获取脚本脚本，需手动添加适配器交互脚本数据。
格式定义参考：
**①提交资产上架申请**
exportfunction submitAsset(sourceAttributes:object, sourceId:string):void{
// 实现资产上架时校验或其他操作
}
**② 撤销/驳回资产上架申请**
exportfunction cancelAsset(sourceAttributes:object, sourceId:string):
void{
// 实现资产上架驳回时校验或其他操作
}
**③ 资产下架成功**
exportfunction unshelfAsset(sourceAttributes:object, sourceId:string):
void{
// 实现资产下架成功时校验或其他操作
}
**④ 资产上架申请成功**
exportfunction submitAssetSuccess(sourceAttributes:object, sourceId:string, subjectId:string):
object{
//实现资产上架申请成功是需要触发的操作，新增入参subjectId为来源用户，因审批人发生变更，无法获取发布者信息，故添加入参。
}
**⑤资产提交订阅申请**
exportfunction subscribeAsset(sourceAttributes:object, sourceId:string):
void{
// 资产提交订阅申请时校验或其他操作
}
**⑥ 撤销/驳回资产订阅申请**
exportfunction cancelSubscribeAsset(sourceAttributes:object, sourceId:string):
void{
//撤销/驳回资产订阅申请时校验或其他操作
}
**⑦删除资产申请**
exportfunction deleteAsset(sourceAttributes:object, sourceId:string):void{
// 实现资产删除时删除相关附件或其他操作
}
交互脚本方法存在返回值时，根据业务需要在基线触发交互处，接收返回数据，并进行处理操作。
7，**基线触发脚本：CP_DS__offeringPublishApplication**
**交互方式：**
//调用适配器交互方法
const reservedField2 = dataParse\['offering'\]\['reservedField2'\];
const sourceAttributes = dataParse\['sourceAttributes'\];
if(reservedField2 \&\& sourceAttributes){
const sources =newQueryAssetSourcesList().run({ id: reservedField2 }).sources;
if(sources.length ==0){
throw new I18nError('CP_DS__NotFoundSource');
}
const interactionScript = sources\[0\].interactionScript;
if(interactionScript \&\&Object.keys(require(interactionScript)).indexOf('submitAssetSuccess')!=-1){
const sourceAttributesTmpl =require(interactionScript).submitAssetSuccess(sourceAttributes, reservedField2, owner);
if(sourceAttributesTmpl){
dataParse\['sourceAttributes'\]= sourceAttributesTmpl;
}
}
}
此交互方式触发的适配器方法为submitAssetSuccess，并使用了该方法的返回值，回写进dataParse\['sourceAttributes'\]。其余方法的触发调用与此类似，只需要变更需要触发的方法名称即可。
