ITK开发之UserService开发

使用UserService机制来指定要在Teamcenter工程中注册的功能。这些功能由Teamcenter工程客户端动态调用。在TC使用过程中调用用户自定义的操作,这样做对于TC的扩展是非常方便的,比如常用的开旁路功能。

在这里使用userservice开发一个创建Item对象的例子,开发userservice主要有以下几步:

  • 需要修改的基本函数为USERSERVICE_register_methods()
  • 在site-name_register_callbacks() 函数内定义:

CUSTOM_register_exit("sertest","USERSERVICE_register_methods(CUSTOM_EXIT_ftn_t)CUST_init_module);

  • 在文件xxx.cpp 中编写新的函数CUST_init_module(),注册 userservice

1:使用 USERSERVICE_register_method() 注册 user services

2:定义 user service 函数名称

3:指定输入叁数的数量与数据类型,同时指定输出的数据类型

  • 在首选项TC_customization_libraries中进行配置,在Rich Client中进行调用

案例如下:

  • 项目目录结构如下:
  • ITK开发之UserService开发_第1张图片

  • sertest_register_method.h文件内容如下
#pragma once
#include 
#include 
#include 
#include 
#ifdef __cplusplus
extern "C"
{
#endif
  extern DLLAPI int CUST_init_module(int *, va_list);
  extern DLLAPI int sertest_register_callbacks();
  int createItem(void *retType);
#ifdef __cplusplus
}
#endif
  • sertest_register_method.cpp文件内容如下
#include 
#include 
#include
#include 
#include 
#include 
#include 
#include 
#include 
#include "sertest_register_method.h"
extern DLLAPI int sertest_register_callbacks()
{
  int stat = ITK_ok;
  CUSTOM_register_exit("sertest", "USERSERVICE_register_methods", (CUSTOM_EXIT_ftn_t)CUST_init_module);

  return stat;
}
extern DLLAPI int CUST_init_module(int *decision, va_list args)
{
  printf("CUST_init_module\n");
  int
    stat = ITK_ok,
    *argumentList = NULL,
    numberOfArguments = 0;

  *decision = ALL_CUSTOMIZATIONS;

  USER_function_t functionPtr= createItem;

  numberOfArguments = 3;
  argumentList = (int*)MEM_alloc(numberOfArguments * sizeof(int));
  argumentList[0] = USERARG_STRING_TYPE;
  argumentList[1] = USERARG_STRING_TYPE;
  argumentList[2] = USERARG_STRING_TYPE;

  //定义userservice函数名createitem
  //functionPtr:指向用户指定函数的指针
  //argumentList:用户指定函数的参数数
  //argumentList:用户指定的函数的输入参数类型列表
  //USERARG_TAG_TYPE:返回值类型

  USERSERVICE_register_method("createitem",functionPtr, numberOfArguments,argumentList, USERARG_TAG_TYPE);

  MEM_free(argumentList);

  return stat;
}

int createItem(void *retType) {
  int retcode = ITK_ok;
  int status = 0;
  tag_t itemTag;
  tag_t revTag;
  char *itemId = NULL;
  char *itemRev = NULL;
  char *itemName = NULL;
  USERARG_get_string_argument(&itemId);
  USERARG_get_string_argument(&itemRev);
  USERARG_get_string_argument(&itemName);

  printf("\n");
  printf(itemId);
  printf("\n");
  printf(itemRev);
  printf("\n");
  printf(itemName);
  printf("\n");

  retcode = ITEM_create_item(itemId, itemName, "Item", itemRev, &itemTag, &revTag);
  if (status == retcode)
  {
    AOM_save(itemTag);
    AOM_save(revTag);
  }
  *((tag_t *)retType) = itemTag;
  return retcode;
}
  • 在rc中用java代码进行调用
TCUserService userServ = session.getUserService();
    Object[] objs = new Object[3]; 
    String itemId = new String("20190505");
    String itemRev = new String ("A"); 
    String itemName = new String ("劳动节"); 
    objs[0]=itemId; 
    objs[1] = itemRev; 
    objs[2]=itemName;
    userServ.call("createitem", objs);

 

你可能感兴趣的:(Teamcenter开发进阶)