Перейти к публикации

Teamcenter API


Рекомендованные сообщения

Вызываю на java си-шный метод. Из си мне нужно вернуть массив тэгов в java.

Код:

retcode = USERSERVICE_register_method("analizrabot", (USER_function_t)analizrabot, iNumberOfArgs, piArgTypes, USERARG_TAG_TYPE + USERARG_ARRAY_TYPE);

.......................

extern "C" tag_t* analizrabot(void)

{

char * entries[1];

char * entries_values[1];

int num_found;

tag_t my_query, *results, groupmember;

QRY_find("Модификация изделия...", &my_query);

entries[0]="Группа-владелец";

entries_values[0]="dba";

QRY_execute(my_query, 1, entries, entries_values, &num_found, &results);

return results;

}

Компилируется, но при выполннении возникает ошибка.

Ссылка на сообщение
Поделиться на других сайтах


Вызываю на java си-шный метод. Из си мне нужно вернуть массив тэгов в java.

Код:

retcode = USERSERVICE_register_method("analizrabot", (USER_function_t)analizrabot, iNumberOfArgs, piArgTypes, USERARG_TAG_TYPE + USERARG_ARRAY_TYPE);

.......................

extern "C" tag_t* analizrabot(void)

{

char * entries[1];

char * entries_values[1];

int num_found;

tag_t my_query, *results, groupmember;

QRY_find("Модификация изделия...", &my_query);

entries[0]="Группа-владелец";

entries_values[0]="dba";

QRY_execute(my_query, 1, entries, entries_values, &num_found, &results);

return results;

}

Компилируется, но при выполннении возникает ошибка.

а подробней,что сообщает компилятор?
Ссылка на сообщение
Поделиться на других сайтах

Всем доброго времени суток,

Если долго и пристально смотреть в документацию, то сможно заметить что серверный метод имеет сигнатуру

int AwesomeMethod(void* result)

т.е. мы всегда возвращаем системе явно код ошибки если она была, а через аргумент result результат работы самого метода. Воооот:rolleyes:

После того как был получен результирующий массив с тагами необходимо скопировать его в отдельное местечко с помощью USERSERVICE_return_tag_array а сам массивчик освободить

В вашем случае должно было быть что то типа (не забываем чекать то что возвращают ITK функции)

extern "C" int analizrabot(void* returnVal){	int rc = ITK_ok;	USERSERVICE_array_t arrayStruct = {0};	char * entries[] = {"Owning-group"};	char * entries_values[] = {"dba"};		int num_found = 0;	tag_t my_query = NULLTAG, 	      *results = NULL;	rc = QRY_find("Query_name", &my_query);	if(rc == ITK_ok && my_query != NULLTAG)	{		rc = QRY_execute(my_query, 1, entries, entries_values, &num_found, &results);	}	USERSERVICE_return_tag_array(num_found, results, &arrayStruct);		if (arrayStruct.length != 0)	  *((USERSERVICE_array_t*) returnValueType) = arrayStruct;       MEM_free(results);	return rc;}

p.s. Дернуть query можно и из java

Ссылка на сообщение
Поделиться на других сайтах

Всем доброго времени суток,

Если долго и пристально смотреть в документацию, то сможно заметить что серверный метод имеет сигнатуру

int AwesomeMethod(void* result)

т.е. мы всегда возвращаем системе явно код ошибки если она была, а через аргумент result результат работы самого метода. Воооот:rolleyes:

После того как был получен результирующий массив с тагами необходимо скопировать его в отдельное местечко с помощью USERSERVICE_return_tag_array а сам массивчик освободить

В вашем случае должно было быть что то типа (не забываем чекать то что возвращают ITK функции)

extern "C" int analizrabot(void* returnVal){	int rc = ITK_ok;	USERSERVICE_array_t arrayStruct = {0};	char * entries[] = {"Owning-group"};	char * entries_values[] = {"dba"};		int num_found = 0;	tag_t my_query = NULLTAG, 	      *results = NULL;	rc = QRY_find("Query_name", &my_query);	if(rc == ITK_ok && my_query != NULLTAG)	{		rc = QRY_execute(my_query, 1, entries, entries_values, &num_found, &results);	}	USERSERVICE_return_tag_array(num_found, results, &arrayStruct);		if (arrayStruct.length != 0)	  *((USERSERVICE_array_t*) returnValueType) = arrayStruct;       MEM_free(results);	return rc;}

p.s. Дернуть query можно и из java

Спасибо за подсказку, завтра попробую) А на джаве тоже делею, но там запрос минут по 7-10 отрабатывает( я даже когда просто через встроенный поиск на клиенте ищу, то он оооочень долго отрабатывает те же минут 7. а на си - считанные секунды.
Ссылка на сообщение
Поделиться на других сайтах

на си чуть быстрее но не намного.особенно при работе с BOM.

хотите быстродействия - оптимизируйте работу oracle, правильно настроенный oracle под тимцентр - это один из существенных критериев производительности тимцентра.Без этого мало что поможет.

Если пытаться выделить какое API использовать эффективней в плане быстродействия,то это не java или C, а SOA

Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...

на си чуть быстрее но не намного.особенно при работе с BOM.

хотите быстродействия - оптимизируйте работу oracle, правильно настроенный oracle под тимцентр - это один из существенных критериев производительности тимцентра.Без этого мало что поможет.

Если пытаться выделить какое API использовать эффективней в плане быстродействия,то это не java или C, а SOA

Вот очень странно получается:

выполняю поиск изделий по владельцу, и второй поиск изделий по группе-владельцу.(java)

Первый поиск отрабатывает около минуты, второй - минут 7-8.

Ссылка на сообщение
Поделиться на других сайтах

Вот очень странно получается:

выполняю поиск изделий по владельцу, и второй поиск изделий по группе-владельцу.(java)

Первый поиск отрабатывает около минуты, второй - минут 7-8.

включите SQL трассировку и в логах увидите какие запросы и куда идут.И будет понятно почему первое быстрее второе медленнее
Ссылка на сообщение
Поделиться на других сайтах

Попробуйте поискать с помощью инструментария модуля POM Enquiry. Лично мне при решении задачи поиска в пачке из почти миллиона форм дало фантастический выхлоп.

Ссылка на сообщение
Поделиться на других сайтах

Попробуйте поискать с помощью инструментария модуля POM Enquiry. Лично мне при решении задачи поиска в пачке из почти миллиона форм дало фантастический выхлоп.

насколько помню POM enquiry - это выполнение прямого SQL запроса по базе,что естественно- в разы быстрее прочих методов.Единственно что удивляет - что в ITK не сделали проще - хранение sql запроса в строковой переменной,а для его формирования надо вызвать ряд функций(формирование кляуз select,where итп)
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.
Примечание: вашему сообщению потребуется утверждение модератора, прежде чем оно станет доступным.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




×
×
  • Создать...