Teamcenter_NX集成开发:使用NX、SOA连接Teamcenter

该内容已在博客园发布。Teamcenter_NX集成开发:使用NX、SOA连接Teamcenter - huangym1 - 博客园 (cnblogs.com)

最近工作中经常使用Teamcenter、NX集成开发的情况,因此在这里记录使用NX、SOA连接到Teamcenter的连接方式。

主要操作:

1-初始化UGMGR环境成功后就可以连接到Teamcenter。

2-获取指定ID编码零组件标识和Latest Working(没记错的话应该是最新版本)版本ID。

3-获取版本下相关数据集文件(UGMASTER、UGPART等)。

4-ID、版本、文件类型Encode组成集成环境下NX可以打开的NX部件文件名称,并打开。

5-获取Session,打印Teamcenter当前登录方式(二层或者四层等)及其他信息。

6-关闭打开的零组件并释放内存。

// Mandatory UF Includes
#include <uf.h>
#include <uf_object_types.h>
#include <uf_ugmgr.h>
#include <uf_part.h>
#include <uf_disp.h>
#include <uf_modl.h>
#include <uf_obj.h>
#include <uf_assem.h>

// Internal+External Includes
#include <NXOpen/Annotations.hxx>
#include <NXOpen/Assemblies_Component.hxx>
#include <NXOpen/Assemblies_ComponentAssembly.hxx>
#include <NXOpen/Body.hxx>
#include <NXOpen/BodyCollection.hxx>
#include <NXOpen/Face.hxx>
#include <NXOpen/Line.hxx>
#include <NXOpen/NXException.hxx>
#include <NXOpen/NXObject.hxx>
#include <NXOpen/Part.hxx>
#include <NXOpen/PartCollection.hxx>
#include <NXOpen/Session.hxx>

#include <NXOpen/PDM_PdmSession.hxx>
#include <NXOpen/PDM_SoaConnectionHandle.hxx>
#include <teamcenter/soa/client/Connection.hxx>
#include <teamcenter/services/core/DatamanagementService.hxx>
#include <teamcenter/soa/common/Version.hxx>

// Std C++ Includes
#include <iostream>
#include <sstream>

using namespace NXOpen;
using namespace Teamcenter::Soa::Client;
using namespace Teamcenter::Services::Core;
using std::string;
using std::exception;
using std::stringstream;
using std::endl;
using std::cout;
using std::cerr;

void do_it()
{
    int err = 0;
    UF_UGMGR_tag_t database_part_tag = NULL_TAG;
    err = UF_UGMGR_ask_part_tag("000000000AA000082", &database_part_tag);
    err = UF_UGMGR_set_config_rule("Latest Working");

    UF_UGMGR_tag_t part_revision = NULL_TAG;
    err = UF_UGMGR_ask_configured_rev(database_part_tag, &part_revision);

    char revision_id[UF_UGMGR_NAME_BUFSIZE] = { 0 };
    err = UF_UGMGR_ask_part_revision_id(part_revision, revision_id);

    int file_count = 0;
    char** file_types = NULL;
    char** file_names = NULL;
    err = UF_UGMGR_list_part_rev_files(part_revision, &file_count, &file_types, &file_names);
    if (file_count <= 0) return;

    for (int idx = 0; idx < file_count; idx++){
        if (file_names[idx] == NULL)
            continue;

        char encoded_name[MAX_FSPEC_BUFSIZE] = { 0 };
        err = UF_UGMGR_encode_part_filename("000000000AA000082", revision_id, file_types[idx], file_names[idx], encoded_name);

        tag_t partTag = NULL_TAG;
        UF_PART_load_status_t error_status;
        err = UF_PART_open(encoded_name, &partTag, &error_status);

        //===================
        // 打开零组件后获取Session,不然会报错。也可以获取零组件属性,打开的是图纸还可以导出PDF。
        //===================
        NXOpen::Session *theSession = NXOpen::Session::GetSession();
        NXOpen::Part *displayPart(theSession->Parts()->Display());
        NXOpen::PDM::PdmSession *thePdmSession = NULL;
        NXOpen::PDM::SoaConnectionHandle *connectHandle = NULL;
        Teamcenter::Soa::Client::Connection *tcSoaConnect = NULL;

        thePdmSession = theSession->PdmSession();
        connectHandle = thePdmSession->GetSoaConnectionHandle();
        tcSoaConnect = reinterpret_cast<Teamcenter::Soa::Client::Connection*>(connectHandle->GetHandle());
        Teamcenter::Services::Core::DatamanagementService *dmService = Teamcenter::Services::Core::DatamanagementService::getService(tcSoaConnect);

        Teamcenter::Soa::Common::Version clientVersion = tcSoaConnect->getClientVersion();
        Teamcenter::Soa::Common::Version serviceClient = tcSoaConnect->getServerVersion();
        Teamcenter::Soa::Client::Connection::Protocol protocol = tcSoaConnect->getProtocol();
        Teamcenter::Soa::Client::Connection::Binding binding = tcSoaConnect->getBinding();

        std::cout << "\nclientVersion.getTeamcenterVersion = " << clientVersion.getTeamcenterVersion() << std::endl;
        std::cout << "clientVersion.getTeamcenterVersionLabel = " << clientVersion.getTeamcenterVersionLabel() << std::endl;
        std::cout << "serviceClient.getTeamcenterVersion = " << serviceClient.getTeamcenterVersion() << std::endl;
        std::cout << "serviceClient.getTeamcenterVersionLabel = " << serviceClient.getTeamcenterVersionLabel() << std::endl;

        std::cout << "\ntcSoaConnect->getLocale = " << tcSoaConnect->getLocale() << std::endl;
        std::cout << "tcSoaConnect->getServerAddress = " << tcSoaConnect->getServerAddress() << std::endl;
        std::cout << "tcSoaConnect->getCurrentObjectPropertyPolicy = " << tcSoaConnect->getCurrentObjectPropertyPolicy() << std::endl;

        switch (protocol){
        case Teamcenter::Soa::Client::Connection::HTTP:
            std::cout << "\n\nTeamcenter::Soa::Client::Connection::HTTP" << std::endl;
            break;
        case Teamcenter::Soa::Client::Connection::TCCS:
            std::cout << "\nTeamcenter::Soa::Client::Connection::TCCS" << std::endl;
            break;
        case Teamcenter::Soa::Client::Connection::IIOP:
            std::cout << "\nTeamcenter::Soa::Client::Connection::IIOP" << std::endl;
            break;
        case Teamcenter::Soa::Client::Connection::TCTP:
            std::cout << "\nTeamcenter::Soa::Client::Connection::TCTP" << std::endl;
            break;
        default:
            break;
        }
        switch (binding){
        case Teamcenter::Soa::Client::Connection::REST:
            std::cout << "\n\nTeamcenter::Soa::Client::Connection::REST" << std::endl;
            break;
        case Teamcenter::Soa::Client::Connection::SOAP:
            std::cout << "\nTeamcenter::Soa::Client::Connection::SOAP" << std::endl;
            break;
        default:
            break;
        }

        err = UF_PART_free_load_status(&error_status);
        err = UF_PART_close(partTag, 1, 1);
    }

    UF_free_string_array(file_count, file_names);
    UF_free_string_array(file_count, file_types);
    file_types = NULL;
    file_names = NULL;
}

//===================
// Entry Point
//===================
int main(int argc, char* argv[])
{
    try{
        const char** dd = (const char**)(argv);
        int err = UF_UGMGR_initialize(argc, dd);
        do_it();
        err = UF_UGMGR_terminate();
        return err;
    }
    catch (const NXException& e1){
        cerr << "NXException: " << e1.ErrorCode() << endl;
        cerr << e1.Message() << endl;
    }
    catch (const exception& e2){
        cerr << "Exception: " << e2.what() << endl;
    }
    catch (...){
        cerr << "Unknown Exception: " << endl;
    }
}

encode:把ID、版本、文件类型编码成NX可以打开的名称。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Teamcenter SOA开发是基于服务导向架构(Service-Oriented Architecture)的一种软件开发方法。它使用开放标准的Web服务技术,实现了在Teamcenter PLM(Product Lifecycle Management,产品生命周期管理)平台上进行扩展和定制的能力。 在Teamcenter SOA开发中,开发者可以使用不同的编程语言和开发工具,如Java、C#等,根据业务需求创建自定义的服务,这些服务可以通过接口与Teamcenter PLM平台进行交互。这些自定义服务可以用于实现各种功能,如数据查询、数据导入导出、工作流定制等。 通过Teamcenter SOA开发,企业可以根据自身的业务流程和需求进行定制开发,以便更好地适应和支持公司的业务。Teamcenter SOA开发提供了一种轻量级、灵活且可扩展的方式来增加和修改Teamcenter PLM平台的功能。 Teamcenter SOA开发具有以下优势: 1. 灵活性:开发者可以根据实际需求进行定制开发,扩展和修改Teamcenter PLM平台的功能,以适应不同的业务流程和工作方式。 2. 可复用性:通过创建标准化的服务接口,开发者可以在不同的应用程序和系统间共享和复用功能,提高开发效率。 3. 可扩展性:Teamcenter SOA开发可以根据业务需要随时增加新的服务,并与现有系统进行无缝集成,实现系统的功能扩展。 4. 高效性:通过使用Web服务技术,Teamcenter SOA开发可以实现跨平台、跨系统的数据交换和集成,提高系统的数据处理和传输效率。 总之,Teamcenter SOA开发是一种基于服务导向架构的软件开发方法,在Teamcenter PLM平台上实现定制开发,提供灵活、可扩展的解决方案,以支持企业的业务需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值