UDN-企业互联网技术人气社区

板块导航

浏览  : 9644
回复  : 14

[技术架构] *.bmf,具体错误:class nc.md.model.MetaDataException:数据库...

[复制链接]
等一下的头像 楼主
发表于 2014-7-18 10:36:44 | 显示全部楼层 |阅读模式
遇到这个问题,可以用下面脚本清楚下元数据,有风险,仅限开发环境使用哈,有谁用的着的,拿去。

删除BMF元数据,需要在PLSQL里面执行
declare
  --使用说明
  --问题  类似错误发布模型文件出错,文件:D:/MFGDev/NCHome63Gold/modules/gl/METADATA/contrast/ContrastDetail.bmf,具体错误:class nc.md.model.MetaDataException:数据库中已经存在名称为:ContrastData的组件,无法发布!请修改当前要发布的组件名称!
  --1 根据组件名称查询组件ID select ID from MD_COMPONENT where name = 'name';
  --2 要查询到了ID更新component_need_delete的值
  --组件
  component_need_delete varchar2(2000) := '0e17e298-9013-456e-86de-4a52e44cd0d0';
  --版本 水平产品 行业产品
  version_type_sql varchar2(2000) := ' and ( versiontype = 0 or  versiontype is null )';
  --类
  class_delete_sql varchar2(2000) := 'select distinct id from md_class where componentID=''' ||
                                     component_need_delete || '''';
  --表
  table_delete_sql varchar2(2000) := 'select distinct tableid from md_ormap,md_table where md_ormap.tableid = md_table.id and  classID in (' ||
                                     class_delete_sql || ')' ||
                                     version_type_sql;
  md_db_relation_delete_sql  varchar2(2000) := 'delete from md_db_relation where startattrid in (select id from md_property where classid in (' ||
                                               class_delete_sql ||
                                               '))  and starttableid in (' ||
                                               table_delete_sql || ')';
  md_ORMap_delete_sql        varchar2(2000) := 'delete from md_ORMap where ATTRIBUTEID in( select id from md_property where classid in (' ||
                                               class_delete_sql || ') ' || version_type_sql ||
                                               ') and tableid in (' ||
                                               table_delete_sql || ')';
  md_table_delete_sql        varchar2(2000) := 'delete from md_table where id not in (select distinct tableid from md_ormap )' ||
                                               version_type_sql;
  md_column1_delete_sql      varchar2(2000) := 'delete from md_column where tableid in( ' ||
                                               table_delete_sql ||
                                               ') and id not in(select distinct columnid from md_ormap) and (nvl(groupid ,''~'')=''~'' or groupid = id ) and name <> ''extend_bean_tag''';
  md_column2_delete_sql      varchar2(2000) := 'delete from md_column where tableid in( ' ||
                                               table_delete_sql ||
                                               ') and id not in(select distinct columnid from md_ormap) and  groupid is not null and groupid not in( select distinct id from md_column where tableid in (' ||
                                               table_delete_sql || '))';
  md_db_relation2_delete_sql varchar2(2000) := 'delete from md_db_relation where starttableid not in (select id from md_table)';
  md_property_delete_sql     varchar2(2000) := 'delete from md_property where classID in (' ||
                                               class_delete_sql || ')' ||
                                               version_type_sql;
  md_association_delete_sql  varchar2(2000) := 'delete from md_association where componentID=''' ||
                                               component_need_delete || '''' ||
                                               version_type_sql;
  md_bizItfMap1_delete_sql   varchar2(2000) := 'delete from md_bizItfMap where classID in (' ||
                                               class_delete_sql || ')';
  md_bizItfMap2_delete_sql   varchar2(2000) := 'delete from md_bizItfMap where classID in ( select id from md_opInterface where componentID=''' ||
                                               component_need_delete || '''' || ')' ||
                                               version_type_sql;
  md_accessorPara_delete_sql varchar2(2000) := 'delete from md_accessorPara where id in (' ||
                                               class_delete_sql || ')';
  md_enumValue_delete_sql    varchar2(2000) := 'delete from md_enumValue where id in (' ||
                                               class_delete_sql || ')' ||
                                               version_type_sql;
  md_class_delete_sql        varchar2(2000) := 'delete from md_class where componentID=''' ||
                                               component_need_delete || '''' ||
                                               version_type_sql;
  md_component_delete_sql    varchar2(2000) := 'delete from md_component where id =''' ||
                                               component_need_delete || '''' ||
                                               version_type_sql;
begin
  execute immediate md_db_relation_delete_sql;
  dbms_output.put_line(md_db_relation_delete_sql);
  
  execute immediate md_ORMap_delete_sql;
  dbms_output.put_line(md_ORMap_delete_sql);
  
  execute immediate md_table_delete_sql;
  dbms_output.put_line(md_table_delete_sql);
  
  execute immediate md_column1_delete_sql;
  dbms_output.put_line(md_column1_delete_sql);
  
  execute immediate md_column2_delete_sql;
  dbms_output.put_line(md_column2_delete_sql);
  
  execute immediate md_db_relation2_delete_sql;
  dbms_output.put_line(md_db_relation2_delete_sql);
  
  execute immediate md_property_delete_sql;
  dbms_output.put_line(md_property_delete_sql);
  
  execute immediate md_association_delete_sql;
  dbms_output.put_line(md_association_delete_sql);
  
  execute immediate md_bizItfMap1_delete_sql;
  dbms_output.put_line(md_bizItfMap1_delete_sql);
  
  execute immediate md_bizItfMap2_delete_sql;
  dbms_output.put_line(md_bizItfMap2_delete_sql);
  
  execute immediate md_accessorPara_delete_sql;
  dbms_output.put_line(md_accessorPara_delete_sql);
  
  execute immediate md_enumValue_delete_sql;
  dbms_output.put_line(md_enumValue_delete_sql);
  
  execute immediate md_class_delete_sql;
  dbms_output.put_line(md_ORMap_delete_sql);
  
  execute immediate md_component_delete_sql;
  dbms_output.put_line(md_component_delete_sql);
  
end;

等一下的头像 楼主
发表于 2014-7-18 10:38:11 | 显示全部楼层
bpf的
--IPublishService  deleteAllComponentChild

declare
  --使用说明
  --问题  类似错误发布元数据异常:发布模型文件出错,文件:D:/MFGDev/NCHome63Gold/modules/tbb/METADATA/budgetbill.bpf,具体错误:class nc.bs.dao.DAOException:ORA-00001: 违反唯一约束条件 (SMALL.PK_MD_BUSIOP)
  --1 根据组件名称查询组件ID select ID from MD_COMPONENT where name = 'budgetbill';
  --2 要查询到了ID更新component_need_delete的值
  --组件
  component_need_delete varchar2(2000) := '7ba74a69-2578-4fde-9ac5-5d9605bcd474';
  --版本 水平产品 行业产品
  version_type_sql varchar2(2000) := ' and ( versiontype = 0 or  versiontype is null )';

  opinterface_select_sql varchar2(2000) := 'select distinct id from md_opInterface where componentID='''||  component_need_delete || '''';
  operation_select_sql varchar2(2000) := 'select distinct id from md_operation where ownerElementID in (' || opinterface_select_sql || ')' ;

  parameter_delete_sql  varchar2(2000) := ' delete from md_parameter where operationID in ( ' || operation_select_sql || ' ) ';
  opitfimpl_delete_sql  varchar2(2000) := ' delete from md_opitfimpl where opitfid in (' || opinterface_select_sql || ')';
  operation_delete_sql        varchar2(2000) := ' delete from md_operation where ownerElementID in (' || opinterface_select_sql || ')';
  opinterface_delete_sql      varchar2(2000) := ' delete from md_opInterface where id in (' || opinterface_select_sql || ')';
  
   refoperation1_delete_sql varchar2(2000) := 'delete from  md_refOperation where busioperationid in ( select id from  md_busiop where componentID='''||  component_need_delete || '''' || version_type_sql || ' ) ';
   refoperation2_delete_sql varchar2(2000) := 'delete from  md_refOperation where busioperationid in ( select id from  md_busiop where componentID='''||  component_need_delete || ''' ) ' || version_type_sql;

   busiop_delete_sql varchar2(2000) := 'delete from md_busiop where componentID='''||  component_need_delete || '''' || version_type_sql;
   
   refbusiop1_delete_sql varchar2(2000) := 'delete from md_refbusiop where busiactivityid in ( select id from  md_busiactivity  where componentID='''||  component_need_delete || '''' || version_type_sql || ' ) ';
   refbusiop2_delete_sql varchar2(2000) := 'delete from md_refbusiop where busiactivityid in ( select id from  md_busiactivity  where componentID='''||  component_need_delete || ''' ) ' || version_type_sql;

   busiactivity_delete_sql varchar2(2000) := 'delete from md_busiactivity where componentID='''||  component_need_delete || '''' || version_type_sql;
   component_delete_sql varchar2(2000) := 'delete from md_component where id ='''||  component_need_delete || '''' || version_type_sql;

begin
  execute immediate  parameter_delete_sql;
  dbms_output.put_line( parameter_delete_sql);
  
  execute immediate opitfimpl_delete_sql;
  dbms_output.put_line(opitfimpl_delete_sql);
  
  execute immediate operation_delete_sql;
  dbms_output.put_line(operation_delete_sql);
  
  execute immediate opinterface_delete_sql;
  dbms_output.put_line(opinterface_delete_sql);
  
  execute immediate refoperation1_delete_sql;
  dbms_output.put_line(refoperation1_delete_sql);

  execute immediate refoperation2_delete_sql;
  dbms_output.put_line(refoperation2_delete_sql);
  
  execute immediate busiop_delete_sql;
  dbms_output.put_line(busiop_delete_sql);
  
  execute immediate refbusiop1_delete_sql;
  dbms_output.put_line(refbusiop1_delete_sql);

  execute immediate refbusiop2_delete_sql;
  dbms_output.put_line(refbusiop2_delete_sql);
  
  execute immediate busiactivity_delete_sql;
  dbms_output.put_line(busiactivity_delete_sql);
  
  execute immediate component_delete_sql;
  dbms_output.put_line(component_delete_sql);
end;
使用道具 举报

回复

发表于 2014-7-18 10:40:28 | 显示全部楼层
等一下 发表于 2014-7-18 10:38
bpf的
--IPublishService  deleteAllComponentChild

这是问题?还是经验分享?
使用道具 举报

回复

等一下的头像 楼主
发表于 2014-7-18 10:41:42 | 显示全部楼层
可以都是的。
使用道具 举报

回复

等一下的头像 楼主
发表于 2014-7-18 10:44:13 | 显示全部楼层
今天升级的时候又报了这个错,看看其他同事有遇到同样的问题的执行一下这个脚本就行了,数据库就能接着用了。
使用道具 举报

回复

发表于 2014-7-18 11:08:01 | 显示全部楼层
为什么不用模型设计器删除发布元数据的功能?
使用道具 举报

回复

发表于 2014-7-18 11:21:32 | 显示全部楼层
我觉得类似这样的问题先弄清楚原因比较好,然后再选择处理方式。从报错信息看,是同一行业层级的元数据组件版本重复了,然后我们再分析为什么重复,如果是平台升级问题要让平台完善,如果是自身操作问题当另论。一点儿建议哈。
使用道具 举报

回复

发表于 2014-7-18 11:25:01 | 显示全部楼层
机器人儿 发表于 2014-7-18 11:08
为什么不用模型设计器删除发布元数据的功能?

有的时候模型设计器删除了之后也还是不能用的,可以说是没有删除干净......
使用道具 举报

回复

发表于 2014-7-18 11:29:23 | 显示全部楼层
丁丁是个小画家 发表于 2014-7-18 10:40
这是问题?还是经验分享?

我感觉 - 元数据发布、删除就是一个黑盒子~~UAP-NC6的这套元数据发布机制对我们开发来说简直就是黑盒子呀~~~呜呜呜,我要去提问题
使用道具 举报

回复

发表于 2014-7-18 12:39:14 | 显示全部楼层
chuan 发表于 2014-7-18 11:29
我感觉 - 元数据发布、删除就是一个黑盒子~~UAP-NC6的这套元数据发布机制对我们开发来说简直就是黑盒子呀 ...

同意啊。碰到这样的问题就大胆反馈给平台,这样工具才能更强大,有问题才有进步。或者chuan可以弄个专区,专门反馈studio的问题?@丁丁是个小画家 @benbenxiong @胭脂粉
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部