xenocephal

Задача сравнения файла при открытии со вторым

Pinned posts

ID: 1   Posted (edited)

Здравствуйте, уважаемые жители форума.

 

Пытаюсь решить задачу в которой есть два одноименных файла, но с разными расширениями в одной папке. По заданию при открытии одного файла его "время изменения" (или "состояние") должно сравниваться с "временем изменения" другого файла. 

Пытался решить ее посредством диспатча, но столкнулся с рядом проблем:

1. Отсутствие инициации действия при открытии файла.

2. Не понятно как описать действие поиска одноименного файла в той же папке.

3. Конвертация времени изменения файла в численный формат для сравнения. 

 

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

Edited by xenocephal

Share this post


Link to post
Share on other sites


UnPinned posts

ID: 2   Posted

В 18.04.2019 в 11:32, xenocephal сказал:

Здравствуйте, уважаемые жители форума.

 

Пытаюсь решить задачу в которой есть два одноименных файла, но с разными расширениями в одной папке. По заданию при открытии одного файла его "время изменения" (или "состояние") должно сравниваться с "временем изменения" другого файла. 

Пытался решить ее посредством диспатча, но столкнулся с рядом проблем:

1. Отсутствие инициации действия при открытии файла.

2. Не понятно как описать действие поиска одноименного файла в той же папке.

3. Конвертация времени изменения файла в численный формат для сравнения. 

 

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

Думаю всё же эту задачу решить только в add-in, то есть писать приложение самому.

Алгоритм примерно такой:

- перехватываете событие. События описаны здесь http://help.solidworks.com/2015/english/api/epdmapi/EPDM.Interop.epdm~EPDM.Interop.epdm.EdmCmdType.html

- перехватить событие "открытия файла" вроде как нельзя (может кто меня поправит, могу ошибаться), надо думать над другими возможностями перехвата;

- далее всё не сложно: у вас есть имя исходного файла, поиск такого же, но с другим расширением, сравнение дат модификации (опять же в последних версиях файлов или нет?). 

Проблема будет такая: подтягивать ли клиенту последние версии файлов принудительно или нет? Не всегда принудительное подтягивание последних версий идёт на пользу. ПДМ это не совсем Проводник, в нём свои законы и свойства файлов.

 

1 person likes this

Share this post


Link to post
Share on other sites

ID: 3   Posted

Благодарю за ответ! Очень Вам признателен за предоставленную информацию, буду разбираться.

Вам всяческих успехов и доброго здравия!

Share this post


Link to post
Share on other sites

ID: 4   Posted

@xenocephal А чем не устраивает столбец "Изменен" в папке?

изззз.png

Share this post


Link to post
Share on other sites

ID: 5   Posted

@tensh1 Трудность не в том, что столбец не устраивает, а в том, что если время изменения в Dispatch (%TimeFileModified%) и можно трансформировать в численный формат и задать соответствующую переменную для выделенного файла, то задать соответствующую переменную для файла с тем же именем но другим расширением в той же папке уже сложнее. 

Я попробовал получить эти переменные с помощью локальных переменных Dispatch задав путь и имя файла для задания глобальной переменной, но успеха это не принесло.3.jpg.115018edf5d12dd070d9b5106a1ff123.jpg1.jpg.dce8bfde0c0c9ea9a48038fd2a5c961e.jpg2.jpg.eb9b722544246e4fd9a6789280bf6ca0.jpg4.jpg.c18af7ca8bd89212f7c9f02ff79bd942.jpg

Кроме того до сих пор не ясно как инициировать действие при открытии файла. 

Хочу попробовать через API EdmCmd_PreGet

Share this post


Link to post
Share on other sites

ID: 6   Posted (edited)

@xenocephal 

123  

5cee80a8aaf83_1.png.978b8f2999d7a1c8026c8510c914c73f.png

Выделяем файлы

5cee809bd7506_2.thumb.png.c4e56a0dc8e3d4bba2133bad05492bd5.png

5cee808b87a84_3.png.6c738d8217d4c3e7e75785f774aeb0ee.png5cee807b497d5_4.thumb.png.7b0401f22d38581f9731fcf31dc82296.png5cee8067be871_5.thumb.png.82cc66ecd46db5b75bc72092142119a4.png5cee802f1507f_6.thumb.png.fa327be4b479aa3a10fcca25c104f97c.png5cee8020e223a_7-.thumb.png.4d8527a3ae34e483eef947dadb6f7784.png

Hide  

Edited by tensh1

Share this post


Link to post
Share on other sites

ID: 7   Posted

@tensh1 Благодарю за ответ. Правильно ли я понимаю, что данный скрипт для всех выделенных файлов устанавливает значение переменной "Album" равное дате изменения файла?

Share this post


Link to post
Share on other sites

ID: 8   Posted

@xenocephal Да, все верно. Единственное, что забыл уточнить - для того, чтобы не дописывать алгоритм /разрегистрация файла - запись переменной - регистрация файла/, переменную необходимо сделать "Независимой от версии", соответственно, у человека, который запускает данную процедуру, должны быть права на редактирование переменных, независимых от версии.

Share this post


Link to post
Share on other sites

ID: 9   Posted

@tensh1 Благодарю за пояснение.

Это, конечно, здорово. Правда, пока не могу понять как применить в своей задаче.

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

Но, похоже, я уже примерно представляю как реализовать это с помощью API.

Share this post


Link to post
Share on other sites

ID: 10   Posted

Наконец-то разобрался с задачей и написал работающий код. У себя сделал в виде приложения 

Если кому нужно, то вот:

 

Показать  

using System;
using System.IO;
using System.Runtime.InteropServices;
using EdmLib;

namespace Program
{
    // Формируется через Tools - Create GUID
    [Guid("34024507-0883-43A1-9AE4-284B8B0D1103")]
    [ComVisible(true)]
    
    public class Class1 : IEdmAddIn5
    {
        // Описательный блок
        public void GetAddInInfo(ref EdmAddInInfo poInfo, IEdmVault5 poVault, IEdmCmdMgr5 poCmdMgr)
        {
            // Информация о приложении
            poInfo.mbsAddInName = "Add-in Name";
            poInfo.mbsCompany = "Company";
            poInfo.mbsDescription = "";
            poInfo.mlAddInVersion = 1;
            
            // Допустимые версии PDM
            poInfo.mlRequiredVersionMajor = 15;
            poInfo.mlRequiredVersionMinor = 1;          
           
            // Триггер события ПОСЛЕ получения файла из хранилища
            poCmdMgr.AddHook(EdmCmdType.EdmCmd_PostGet);
        }
        
        // Исполнительный блок при активации триггера
        public void OnCmd(ref EdmCmd poCmd, ref Array ppoData)
        {
            // Описание хранилища
            IEdmVault5 vault = (IEdmVault5)poCmd.mpoVault;
            
            // Описание папки
            IEdmFolder5 ParentFolder;
            
            // Описание файла
            IEdmFile5 file;
            string name = "";                             

            // Выбор действия при разных типах meCmdType перехватываемых команд poCmd
            if (poCmd.meCmdType == EdmCmdType.EdmCmd_PostGet)
            {
                name = "";

                foreach (EdmCmdData AffectedFile in ppoData)
                {
                    // Получение данных выделенного файла из хранилища 
                    file = vault.GetFileFromPath(AffectedFile.mbsStrData1, out ParentFolder);
                    
                    // Получение пути файла
                    string filepath = file.GetLocalPath(ParentFolder.ID);

                    // Получение расширения файла из пути
                    string ext = filepath.Substring(filepath.Length - 4);

                    // Если полученный файл имеет расширение PDF, то файл DWG 
                    // получается из хранилища, а так же считываются даты изменения обоих файлов,
                    // сравниваются и если DWG был изменен позже чем PDF, то создается сообщение
                    if (ext == ".pdf")
                    {
                        try
                        {
                            // Создание пути для DWG и описание файла как FileInfo
                            string pathDWG = filepath.Replace(".pdf", ".dwg");

                            // Описание файла в виде объекта FileInfo для получения свойств
                            FileInfo localfile = new FileInfo(filepath);
                            FileInfo localDWG = new FileInfo(pathDWG);
                            
                            // Получение файла DWG
                            IEdmFile5 fileDWG = vault.GetFileFromPath(pathDWG, out IEdmFolder5 PFolder);
                            fileDWG.GetFileCopy(0, 0);
                            
                            // Получение дат изменения локальных файлов
                            DateTime date1 = localfile.LastWriteTime;
                            DateTime date2 = localDWG.LastWriteTime;
                            
                            // Сравнение дат изменения файлов и активация действия
                            if (date1 < date2)
                            {
                                // Сообщение для вывода
                                name += string.Format("Файл {1} был отредактирован. Необходимо актуализировать файл {0}.", file.Name, fileDWG.Name); 


                                // Вывод сообщения
                                vault.MsgBox(poCmd.mlParentWnd, name, EdmMBoxType.EdmMbt_Icon_Warning, "ВНИМАНИЕ!");
                            }                               

                        }
                        catch (Exception)
                        {

                        }
                    }
                }                   
            }            
        }
    }
}
 

Hide  

Share this post


Link to post
Share on other sites

Чем не устраивает поток работы с утверждением? Если файл чертежа был изменён это значит, что у него новая редакция и новое состояние. Можно опросить файл чертежа на предмет изменения состояния.

Share this post


Link to post
Share on other sites

@Maze не уверен, что понял Ваш подход в решении, вы имеете ввиду сравнивать дату изменения открываемого файла с датой перевода файла чертежа в соответствующее состояние?

Share this post


Link to post
Share on other sites

Состояние.

Если файл изменили, то его перевели в другое состояние (доработка к примеру). Таким образом файл пдф утратил актуальность. Что делать с таким файлом выберите сами.

 Можно после утверждения заново автоматом сгенерить пдф инструментом пдм

1 person likes this

Share this post


Link to post
Share on other sites

@Maze Вас понял. Благодарю за совет, обязательно опробую! 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.



  • Сообщения

    • FrezerAST
      Это что опять за дичь))) Вам предлагали сделать сравнение с другим роликом. Там кде 40 секунд вместе с симуляцией. О каких 20 минутах речь? Я за 20 минут с телефона в текстовом редакторе нахреначу кадров на 200+( это такто дохрена, это вы все хз что пишите в УП) Просто запомните что УП на новых станках готовится в пределах минуты  
    • IgP
      Не видно версии NX и тем более точной версии ...
      Может надо обновить до последнего/крайнего MP, ну или близкого ...
      последний для NX10 - NX10.0.3.5 MP19; крайний для NX12 - NX 12.0.2.9 MP10, 26May19.
    • hlibhlib
    • TBC
      Сделал. И очень, очень впечатлен.    Кстати я могу тоже сделать с построением контура, как у них. Это конечно намного медленнее, чем с КТЭ, зато нет ограничений по конфигурации самого контура. Т.е. AICUT будет закрывать всю возможную номенклатуру деталей в токарке.  И будет подготовка ТП и УП все равно быстрее, чем у них, т.к. будут распознаваться в созданном контуре КТЭ, а дальше все автоматом будет результат получаться.  В SINUMERIK 808D ушло время на подготовку УП на деталь, картинку которой прилааю более 20 минут. в AICUT ТП, УП были получены за 1,4 минуты. Будет заказ, сделаю. Или сделаю без заказа но позже, если увижу перспективу. Пока вижу такую перспективу для стоек Фанук и Синумерик.  
    • Slavdos
      подозреваю что резка азотом 6 мм нержавейки ( какой кстати?) тоже даст вам нехилый грат, если сумеете настроиться. про черноту то согласен.
    • Di-mann
      Пердунки Глушат звук, фильтруют запах.
    • fangdabaoy
      Shenzhen ASTA Co.,Ltd. a été créée en 2004. En 2009, la marque Astar était née. Astar se concentre sur le développement et la vente de cartouches de toner compatibles et de cartouches de toner pour copieurs de haute qualité. Il dispose d'un parc industriel de 35 000 mètres carrés et de plus de 710 employés. Avec 18 lignes de production et de nouveaux emballages, nous avons atteint la capacité mensuelle de 600 000 cartouches de toner et de cartouches de toner et 1 million de consommables. À l'heure actuelle, deux marques d'ASTA et d'ACO ont leur siège à Shenzhen et ont ouvert avec succès six succursales au Arabie saoudite, au Mexique, à Dubaï, au Myanmar, en Colombie, au Vietnam. Plus de 90 agents de marque ASTA & ACO. Notre force technique, notre équipement de test avancé, notre structure organisationnelle professionnelle et performante et notre excellente philosophie de gestion nous ont permis d'établir une relation de coopération stable et à long terme avec nos partenaires et d'accroître continuellement notre part de marché à l'étranger. Nous valorisons la satisfaction du client et l'innovation continue. Nous nous sommes engagés à mettre en place une solution unique : solutions d’imprimante et de consommables pour imprimantes à codes à barres. Le champ d'activité principal comprend les imprimantes laser, les copieurs et les consommables pour imprimantes à jet d'encre, les cartouches de toner, les imprimantes à rubans, thermiques et à transfert thermique, les rubans, le papier pour étiquettes, les rubans pour étiquettes, les cartes de nettoyage, etc. Largement utilisé dans les banques, les hôpitaux, les écoles, les administrations publiques, les entreprises, les usines, les ménages, la vente au détail, les entrepôts, la logistique, les vêtements, la poste, les divertissements, la fabrication, les textiles, etc. Nous nous engageons à fournir à nos partenaires des solutions précieuses et professionnelles. https://www.chinastaoffice.com/
    • fangdabaoy
      Shenzhen ASTA Co.,Ltd. foi fundada em 2004. Em 2009, nasceu a marca Astar. A Astar concentra-se na produção, pesquisa e venda de cartuchos de toner compatíveis e cartuchos de pó para copiadora de alta qualidade. Possui um parque industrial de 35.000 metros quadrados e mais de 710 funcionários. Com 18 linhas de produção e novas embalagens, atingimos a capacidade mensal de 600.000 cartuchos de toner e cartuchos de pó e 1 milhão de consumíveis. Atualmente, duas marcas da ASTA & ACO estão sediadas em Shenzhen e entraram com sucesso em seis filiais em México, Dubai, Mianmar, Colômbia, Arábia Saudita, Vietnã. Há mais de 90 agentes da marca ASTA & ACO. Nós temos a força técnica forte, equipamentos de teste avançados, estrutura organizacional profissional e eficiente e filosofia de gestão excelente. Nós estabelecemos um relacionamento a longo prazo e estável da cooperação com nossos sócios e expandimos continuamente a quota do mercado extrangeira. Valorizamos a satisfação do cliente e a inovação contínua. Cartucho fotosensível de qualidade e rolo de carregamento, compatível com revestimento fotosensível, excelente resistência ao desgaste, impressão clara e excelente resolução; o rolo de carregamento pode adaptar-se à baixa humidade e alta humidade para manter a exportação. https://www.astatonerstation.com/
       
    • fangdabaoy
      ShenZhen ASTA Co., Ltd. was founded in 2004. Asta brand born in 2009. Asta focus on the R&D and sales of high quality compatible toner cartridges and copier toner cartridges. The production industry area is 35,000sqm, currently has 710 employees and workers. 18 production and packaging line could make 600,000 toner cartridges and copier cartridges even 1 million consumable accessories every month. Our marketing sales are mainly on domestic market, Asia,Europe,America and Africa etc fields. The main brands ASTA and ACO head office located in Shenzhen China. Built 6 oversea branches in Mexico, Dubai, Myanmar,Colombia, Saudi, Vietnam . has more than 90 ASTA and ACO brand agents around the world. We are committed to one stop imaging solution: namely printer and barcode printer consumable office supplies solution. Including Laser toner cartridges, copier toner cartridges, ink cartridges, refill ink, printer ribbon, thermal printer and thermal transfer printer, label papers, label tape cassette and cleaning cards etc. The toner cartridge is a copying consumable product for use in a multifunction copying machine and a laser printer, and belongs to a toner adding device on a laser printing cartridge. It has a very important position for the entire inkjet printer. Current printer consumables can be broadly classified into three categories: ribbons, inkjets, and lasers.
      The toner cartridge contains toner, a small, dry plastic granule, a mixture of carbon and black or other colorant that forms the actual image on the paper. The toner is transferred onto the paper by a static-charged drum unit, and the paper is melted onto the paper by a heating roller during printing.
      The toner cartridges we offer are compatible and can be used with a wide range of printers.
      We're professional toner cartridge manufacturers and suppliers in China, specialized in providing high quality products. We warmly welcome you to wholesale bulk toner cartridge from our factory. https://www.asta-toner.com/
       
    • fangdabaoy
      ООО «ASTA Шэньчжэнь» была основана в 2004 году. В 2009 году появился бренд «ASTA», который фокусируется на разработке и продаже высококачественных совместимых тонер-картриджей и бункеров для тонера копировальных аппаратов. Компания имеет индустриальный парк с площадью 35 000 квадратных метров, более 710 сотрудников, 18 производственных и упаковочных линий, с которыми наш ежемесячный объем выпуска достигает 600 000 тонер-картриджей и бункеров тонера, миллиона запчастей расходных материалов и запчасти. В настоящее время штаб-квартира бренда «ASTA» и «ACO» установлена в городе Шэньчжэнь, в то же время открыты 6 филиалов в Мексика, Дубай, Мьянма, Колумбия, Саудовская Аравия, Вьетнам. Сегодня у нас более 90 агентов бренда «ASTA» и «ACO». С сильней технической силой, ведущими испытательными оборудованиями, профессиональной и эффективной организационной структурой, отличной философией управления, мы создали долгосрочные и стабильные отношения сотрудничества с нашими партнерами и постоянно расширяем долю рынка за рубежом. Мы ценим удовлетворенность клиентов и постоянные инновации. Мы стремимся к решению «Одна станция» – расходные материалы принтеров и принтеров штрих-кодов. Основным направлением деятельности компании: расходные материалы для лазерных принтеров, копировальных аппаратов и струйных принтеров – тонер-картриджи, чернила и тонер-ленты; расходные материалы для термальных и термопереносных принтеров – тонер-лены, этикетки, ленты для печати, лезвия очистки и т.д. Наши продукции широко используются в банках, больницах, школах, государственных учреждениях, предприятиях, фабриках, домашних хозяйствах, розничной торговле, складах, логистике, одежде, почтовом отделении, развлечениях, производстве, текстиле и т. д. Мы отдадим силы в предоставление нашим партнерам ценные и профессиональные решения. https://www.astatechnology.com/