Как программно получить дату создания(изменения) объекта?

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

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

Как программно получить дату создания(изменения) объекта?

Сообщение shevchenkoAI » 24 янв 2010, 19:36

Здравствуйте, скажите пожалуйста, как наиболее простым способом программно получить время создания(изменения) объекта (определённого инстанса). Конкретно мне нужно узнать время создания объекта "apl_stored_document", но тип объекта как я понимаю неважен.
Мне нужна та дата, которая отображается в модуле PSS При подробном отображении состава обекта (кем и когда создан, кем и когда изменен)
Заранее спасибо.

deschere
Сообщения: 10
Зарегистрирован: 27 июн 2008, 16:52
Откуда: НИЦ CALS-Технологий "Прикладная Логистика". Отдел PDM

Re: Как программно получить дату создания(изменения) объекта?

Сообщение deschere » 25 янв 2010, 14:46

В C++ API у класса CaplNetStepData есть функция NET_LoadInstUserDataTimeInfo;

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

bool CaplNetStepData::NET_LoadInstUserDataTimeInfo(CaplTAggr<SInstInfo*,SInstInfo*,APLAGGR_AUTOKILLREF> &data,const char* wait_text);
входным и выходным параметром этой функции идет массив из структур SInstInfo:

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

struct SInstInfo{
	SInstInfo(){inst=0;create_user=0;create_date=0;update_user=0;update_date=0;}
	SInstInfo(CaplInstance* inst_def){inst=inst_def;create_user=0;create_date=0;update_user=0;update_date=0;}
	CaplInstance* inst;
	CaplInstance* create_user;
	DATE create_date;
	CaplInstance* update_user;
	DATE update_date;
};
Перед вызовом функции создаете массив этих структур и в каждой структуре задаете значение inst - указатель на инстанс,параметры которой Вам надо узнать. После выполнения функция возвращает тот же массив с заполненными полями create_user, create_date, update_user, update_date

Вот пример обработки:

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

	// указатель на класс API
	CaplAPI* m_api;
	// массив инстансов, информацию о которых надо узнать
	aplExtent ext;
	// табличка, в которую выводим информацию
	CListCtrl *list
	...

	CaplInstance* inst;
	CaplTAggr<SInstInfo*,SInstInfo*,APLAGGR_AUTOKILLREF> data;
	SInstInfo* el;
	COleDateTime odt;
	CString buf,buf1;
	int i,j,k;
	bool res;

	for(i=0;i<ext.GetSize();i++){
		inst=ext.GetAt(i);
		if(inst==0)continue;
		
		el=new SInstInfo(ext.GetAt(i));
		data.Add(el);
	}
	if(data.GetSize()==0)return;
	res=m_api.m_data.NET_LoadInstUserDataTimeInfo(data);

	for(i=0;i<data.Size;i++)
	{
		el=data.GetAt(i);
		if(el==0)continue;
		inst=el->inst;
		
		j=list->InsertItem(list->GetItemCount(),"id");
		if(inst==0){
			buf="пустой объект";
			list->SetItemText(j,1,buf);
			continue;
		}else{
			buf.Format("%i (0x%0x) (temporary() = %s)",inst->GetId(),inst,(inst->GetTemporary())?"yes":"no");
			list->SetItemText(j,1,buf);
			
			j=list->InsertItem(list->GetItemCount(),"type");
			if(inst->GetType()==0) buf="Удален";
			else buf=inst->GetType()->name;
			list->SetItemText(j,1,buf);
		}

		inst=el->create_user;
		j=list->InsertItem(list->GetItemCount(),"Создан:");
		if(inst!=0){
			m_api.m_data.GetAttr(inst,m_doc->m_api.m_appr_mgr.a_apl_user_name,buf1);
			buf="Пользователь: \""+buf1+"\";";
		}else{
			buf="Пользователь: возможно удален ";
		}
		if(el->create_date==0){
			buf+="(неизвестно когда)";
		}else{
			odt=el->create_date;
			buf+=odt.Format(" Дата: %d/%m/%Y  %H:%M:%S");
		}
		list->SetItemText(j,1,buf);
	}
В ActiveX для получения системной информации об инстансе есть метод

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

IAplAPI::GetInstanceSysInfo([in] long instance, [out] BSTR* createdBy, [out] DATE* createTime, [out] BSTR* editedBy, [out] DATE* editTime, [out, retval] VARIANT* result)
Подчеркну отличия: функция работает только для одного инстанса и возвращает информацию об создавшем/изменившем пользователе в виде строки - имени пользователя.

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

Re: Как программно получить дату создания(изменения) объекта?

Сообщение shevchenkoAI » 26 янв 2010, 11:12

Спасибо, извините, что не внимательно смотрел документацию.

Закрыто