Создание пакета изменений

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

Ответить
UlMagnus
Сообщения: 8
Зарегистрирован: 31 мар 2016, 13:37

Создание пакета изменений

Сообщение UlMagnus » 04 май 2016, 18:25

Здравствуйте,

Помогите, пожалуйста, с созданием пакета изменений.
В основном не получается создавать итемы изменений, массив которых передается в m_api.m_change_mgr.CreateChange. Вроде как создается, но при этом ругается на отсутствие какого то атрибута.
Буду очень признателен, если поделитесь кусочком кода. Мне нужно создавать изменение количества/добавление/удаление pdf и изменение/добавление/удаление документов. При этом правило применяемости у меня самое простое (по дате проведения изменения).
Заранее спасибо

С уважением, Геннадий!

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

Re: Создание пакета изменений

Сообщение ayatsk » 05 май 2016, 17:46

В папке с файлами PSS есть apldbe.bin Его можно переименовать в apldbe.exe и посмотреть что и как заносится в БД,
Естественно, надо предварительно сделать тестовый пример с помощью интерфейса.

Чистого куска кода, естественно, нет.
Но,если сообщите кто Вы, откуда, и что делаете - сообщу как скачать исходники клиента PSS.
Можно в личку.

UlMagnus
Сообщения: 8
Зарегистрирован: 31 мар 2016, 13:37

Re: Создание пакета изменений

Сообщение UlMagnus » 06 май 2016, 19:54

Вот, если не сложно взгляните на то, как я формирую пакет изменений. Что может быть не так?

CaplInstance* newItem = m_pApi->m_data.CreateInstance(m_pApi->m_change_mgr.e_psc);
CString m_sId, m_sName;
m_pApi->m_data.GetAttr(prod, m_pApi->m_prd_mgr.a_prd_name, m_sName);

aplExtent m_changeItems;
m_sId = m_pApi->m_change_mgr.GetMFCId(pdfProdVersion);
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_chng_item_id, m_sId);
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_chng_item_name, "");
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_psc_eff_type, "none");
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_psc_changed_product, pdfProdVersion); // версия изделия, состав которой и меняется
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_psc_changing_product, classpdf); // версия изделия добавляемая в состав pdfProdVersion
m_pApi->m_data.PutAttr(newItem, m_pApi->m_change_mgr.a_psc_value, iInstanceCount); // количество добавляемого
m_changeItems.Add(newItem);

CString changeId, changeName;
changeId = m_api.m_change_mgr.GetPSCId(pdf);
change= m_api.m_change_mgr.CreateChange(changeId, "", "", "", NULL, m_changeItems);
CaplInstance* changeFolder = m_api.m_folder_mgr.CreateFolder(NULL, "TestChanges", "Тестовая папка для изменений");
m_api.m_folder_mgr.AddToFolder(changeFolder, change);

alex
Сообщения: 2
Зарегистрирован: 25 июл 2008, 18:13
Откуда: НИЦ СALS

Re: Создание пакета изменений

Сообщение alex » 10 май 2016, 19:40

Здравствуйте!

В Вашем коде, в принципе, все правильно. Не срабатывала проверка уникальности в функции CreateChange. В следующей версии функцию доработаем и сообщение выводиться не будет.

В Вашем коде предлагаем внести следующие изменения:
CString m_sId, m_sName;
m_api.m_data.GetAttr(prod, m_api.m_prd_mgr.a_prd_name, m_sName);

aplExtent m_changeItems;
m_sId = m_api.m_change_mgr.GetPSCId(pdfProdVer);//функция возвращает уникальный номер изменения для сборочной единицы. Вами использовалась аналогичная функция, только для изменения материалов и норм расхода
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_chng_item_id, m_sId);
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_chng_item_name, "");
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_psc_eff_type, "none");
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_psc_changed_product, pdfProdVersion); // версия изделия, состав которой и меняется
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_psc_changing_product, classpdf); // версия изделия добавляемая в состав pdfProdVersion
m_api.m_data.PutAttr(newItem, m_api.m_change_mgr.a_psc_value, iInstanceCount); // количество добавляемого
m_changeItems.Add(newItem);

CString changeId, changeName;
changeId = "TestChange"; //здесь должно быть обозначение изменения
CaplInstance* change= m_api.m_change_mgr.CreateChange(changeId, "", "", "", NULL, m_changeItems);
CaplInstance* changeFolder = m_api.m_folder_mgr.CreateFolder(NULL, "TestChanges", "Тестовая папка для изменений");
m_api.m_folder_mgr.AddToFolder(changeFolder, change);

Еще убедитесь, что тип переменной iInstanceCount double.

С уважением,
Александр

Ответить