Здравствуйте, скажите пожалуйста, как наиболее простым способом программно получить время создания(изменения) объекта (определённого инстанса). Конкретно мне нужно узнать время создания объекта "apl_stored_document", но тип объекта как я понимаю неважен.
Мне нужна та дата, которая отображается в модуле PSS При подробном отображении состава обекта (кем и когда создан, кем и когда изменен)
Заранее спасибо.
Как программно получить дату создания(изменения) объекта?
-
- Сообщения: 5
- Зарегистрирован: 21 авг 2008, 12:14
-
- Сообщения: 44
- Зарегистрирован: 27 июн 2008, 16:52
- Откуда: НИЦ CALS-Технологий "Прикладная Логистика". Отдел PDM
Re: Как программно получить дату создания(изменения) объекта?
В C++ API у класса CaplNetStepData есть функция NET_LoadInstUserDataTimeInfo;
входным и выходным параметром этой функции идет массив из структур SInstInfo:
Перед вызовом функции создаете массив этих структур и в каждой структуре задаете значение inst - указатель на инстанс,параметры которой Вам надо узнать. После выполнения функция возвращает тот же массив с заполненными полями create_user, create_date, update_user, update_date
Вот пример обработки:
В ActiveX для получения системной информации об инстансе есть метод
Подчеркну отличия: функция работает только для одного инстанса и возвращает информацию об создавшем/изменившем пользователе в виде строки - имени пользователя.
Код: Выделить всё
bool CaplNetStepData::NET_LoadInstUserDataTimeInfo(CaplTAggr<SInstInfo*,SInstInfo*,APLAGGR_AUTOKILLREF> &data,const char* wait_text);
Код: Выделить всё
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;
};
Вот пример обработки:
Код: Выделить всё
// указатель на класс 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);
}
Код: Выделить всё
IAplAPI::GetInstanceSysInfo([in] long instance, [out] BSTR* createdBy, [out] DATE* createTime, [out] BSTR* editedBy, [out] DATE* editTime, [out, retval] VARIANT* result)
-
- Сообщения: 5
- Зарегистрирован: 21 авг 2008, 12:14
Re: Как программно получить дату создания(изменения) объекта?
Спасибо, извините, что не внимательно смотрел документацию.