c++ api

Модераторы: deschere, ayatsk

Закрыто
shevchenkoAI
Сообщения: 5
Зарегистрирован: 21 авг 2008, 12:14

c++ api

Сообщение shevchenkoAI » 02 сен 2008, 10:52

Какими методами получить атрибуты relating_organization и related_organization у объекта organization_relationship?
:o Объектры загружаются ф-ей LoadOrgStruct() :roll: атрибуты других объектов достаются без проблем. :ugeek:

Аватара пользователя
ayatsk
Сообщения: 371
Зарегистрирован: 03 июл 2008, 22:41
Откуда: НИЦ CALS
Контактная информация:

Re: c++ api

Сообщение ayatsk » 04 сен 2008, 21:18

После вызова LoadOrgStruct все атрибуты organization_relationship будут в кэше.

Чтение этих атрибутов ничем не отличается от других. Для уменьшения числа потенциальных ошибок можно попробовать прочитать по имени атрибута (GetAttrBN).

Возможно, Вы читаете из объекта, в котором эти атрибуты не заданы.

Чтобы посмотреть реальное содержимое базы можно взять aplDBE.bin и переименовать его в aplDBE.exe. Затем запустить, установить соединение с БД и .... (думаю будет понятно). ОСТОРОЖНО !!! Этой программой, если менять данные, можно убить БД (поэтому и лежит не как exe).

shevchenkoAI
Сообщения: 5
Зарегистрирован: 21 авг 2008, 12:14

Re: c++ api

Сообщение shevchenkoAI » 05 сен 2008, 08:41

Код: Выделить всё

...

	aplExtent ext;
	CString oname;
	m_apl->m_appr_mgr.LoadOrgStruct(&ext);
	for(int i=0;i<ext.GetSize();i++)
	{
    /* как пример, для организации считывает нормально*/
    if(ext[i]->GetType()->name=="organization")
		{
			m_apl->m_data.GetAttrBN(ext[i], "name", oname);
      printf(oname);
    }
    /*а тут нет*/
    if(ext[i]->GetType()->name=="organization_relationship")
		{
      //ссылки на объекты INT ?!
      int intVal;
      m_apl->m_data.GetAttrBN(ext[i], "relating_organization", intVal);
      printf(intVal);
      //тут уже вариации :)      
      long longVal;
      m_apl->m_data.GetAttrBN(ext[i], "relating_organization", longVal);
      printf(longVal);
      CaplValue  val;
      CString str;
      m_apl->m_data.GetAttrBN(ext[i], "relating_organization", val);
      val.Print(str);
      printf(str);      
      m_apl->m_data.GetAttrBN(ext[i], "relating_organization", str;);
      printf(str);
      //везде 0 или пустые строки :(
      }
    }
  
...
Чтение происходит у нужного объекта. Проблемы возникли _только_ с этими атребутами.

Аватара пользователя
ayatsk
Сообщения: 371
Зарегистрирован: 03 июл 2008, 22:41
Откуда: НИЦ CALS
Контактная информация:

Re: c++ api

Сообщение ayatsk » 05 сен 2008, 20:35

1. Атрибут "relating_organization" – это ссылка на другой объект. Читать надо так:

Код: Выделить всё

CaplInstance *inst_org;
m_apl->m_data.GetAttrBN(ext[i], "relating_organization", inst_org);
if(0== inst_org)     printf(“Пустой атрибут”);
else
{
   m_apl->m_data.GetAttrBN(inst_org, "name", oname);
   printf(oname);
}
2. Проверять тип по имени не совсем корректно (не будут обрабатываться потомки). Правильнее:

Код: Выделить всё

if( m_apl->m_data.IsKindOfBN(ext[i], "relating_organization"))
3. LoadOrgstruct возвращает все что относится к оргструктуре, включая роли и статусы. Чтобы не перебирать лишнего, можно сделать так:

Код: Выделить всё

	CaplAPI *m_apl=new CaplAPI;
	m_apl->Connect("","","");
	int i,j;
	aplExtent ext_org,ext_rel;
	CString oname;
	m_apl->m_appr_mgr.LoadOrgStruct();

	m_apl->m_data.GetEntityExtentBN("organization", ext_org);
	m_apl->m_data.GetEntityExtentBN("organization_relationship", ext_rel);

	for(i=0;i<ext_org.GetSize();i++)
	{
		/* читаем имя организации */
		m_apl->m_data.GetAttrBN(ext_org[i], "name", oname);
		printf("\n");
		oname.AnsiToOem(); // Для отобр. русских букв в консоли
		printf(oname);
		printf("\n");

		for(j=0;j<ext_rel.GetSize();j++)
		{
			CaplInstance *inst_org;
			m_apl->m_data.GetAttrBN(ext_rel[j], "relating_organization", inst_org);

			if(ext_org[i]!= inst_org)  continue; 
			m_apl->m_data.GetAttrBN(ext_rel[j], "related_organization",inst_org);
			if(inst_org) m_apl->m_data.GetAttrBN(inst_org, "name", oname);
			printf("\n *** ");   
			oname.AnsiToOem(); // Для отобр. русских букв в консоли
			printf(oname);
		}
	}


antonio2306

Re: c++ api

Сообщение antonio2306 » 05 окт 2008, 20:17

Здравствуйте уважаемые разработчики! Пишет Вам группа студентов из МГТУ им. Баумана. В данный момент мы выполняем проект в среде PDM Step Suite и унас возникли сложности с поиском примеров и информации по API. Огромная просьба выслать на blindblazer@mail.ru SDK с документацией и примеры (модули, написанные с помощью API на С++).

Заранее благодарим!!!

Аватара пользователя
ayatsk
Сообщения: 371
Зарегистрирован: 03 июл 2008, 22:41
Откуда: НИЦ CALS
Контактная информация:

Re: c++ api

Сообщение ayatsk » 07 окт 2008, 17:26

Примеры по API http://pss.cals.ru/DOC/API/

Закрыто

Вернуться в «Вопросы по API»