Перейти к публикации

Автоматизировать создание классифицируемого объекта при создании ICO в классификаторе


asterixik

Рекомендованные сообщения

Teamcenter 8.3 толстытй клиент

Суть задачи в следующем: Классы в классификаторе созданы предварительно. Сейчас пользователю приходится создавать ICO, потом создавать Item, заполнять у Item аналогичное ICO наименование, и затем классифицировать этот Item с помощью ICO. Хоется этот процесс несколько упростить, так как предстоит создание нескольких тысяч ICO.

 

Хочется сделать: ответственная персона создает в классификаторе ICO, и затем либо автоматически, либо по команде меню создается классифицируемый этим ICO объект, т.е. например пользователь после создания ICO (этот ICO активен), нажимает кнопку на панели инструментов, появляется окно с выбором типа создаваемого классифицируемого объекта (материал, пки, стандартное изделие и т.п.), и после выбора автоматически создается item нужного типа, инфа для которого (наименование, значения атрибутов) берется из активного ICO  и это объект затем классифицируется активным ICO.

 

Возможно существует стандартная возможность ТС по упрощению процесса создания связанного объекта?

 

Но так или иначе, начал смотреть в сторону кастомизации толстого клиента. И тут незадача, в гайде по кастомизаци полно инфы о том как отобразить ту или иную информацию с Java, а вот как создать итем (с ревизией, мастер формами и т.п.) информации нет совсем. Java практически не знаю (паскалист), курсы по программированию в TC проходил 1,5 года назад, но оно не надо было раньше, и забылось почти все.

 

Отсюда вопросы:

Может кто-нибудь подскажет куда искать/смотреть, или примерчиками поделится  :rolleyes:

Ну или возможно проблема надуманная, и кто-нибудь знает как её проще решить.

 

Сам ранее работал напрямую с БД ТС, а тут вот надо толстого клиента кастомизировать. Напрямую думал создавать записи в БД, но как-то много очень надо таблиц править, боюсь напутать и запортить чего-нибудь.

 

Заранее спасибо.

 

Ссылка на сообщение
Поделиться на других сайтах


Сам ранее работал напрямую с БД ТС, а тут вот надо толстого клиента кастомизировать. Напрямую думал создавать записи в БД, но как-то много очень надо таблиц править, боюсь напутать и запортить чего-нибудь.
 

НИКОГДА НЕ ПИШИТЕ В БАЗУ TC НАПРЯМУЮ!


Ну или возможно проблема надуманная, и кто-нибудь знает как её проще решить.
 

а чего вы на выходе хотите получить?

в чем прикол то?

Ссылка на сообщение
Поделиться на других сайтах

Так я и не пишу. У меня пока была необходимость отображать ту или иную информацию из БД ТС. В принципе наработки по редактированию есть кое-какие, но в продакшен они не пошли.

 

Прикол в том чтобы облегчить работу людям наполняющим классификатор.

 

Сейчас: они создают в классификаторе ICO, заполняют необходимые атрибуты. Потом Идут в Мой Teamcenter, создают там Item нужного типа, наименовывают его так же как и ICO, заполняют если есть свойства мастер-формы аналогично атрибутам ICO, и затем классифицируют этот Item (точнее Item Revision) созданным ICO. Так есть на данный момент.

 

А хочется чтобы: создали ICO, заполнили атрибуты, потом либо по нажатию кнопки сохранения нового ICO, либо по нажатию отдельной кнопки (выполнения команды меню), по активному ICO  выдавался бы запрос типа создаваемого Item-а (в идеале хорошо бы завязать как-нибудь типы создаваемых Item-ов на классы классификатора) и затем создавался бы  Item, наименование которого бы совпадало с наименованием ICO, и часть инфы из атрибутов ICO заполнялось бы в ассоциированные свойства мастер-формы (в идеале!), и после этого Item бы классифицировался этим самым ICO.

 

То бишь облегчить и ускорить ввод инфы в классификатор ТС. На выходе хочется получить заполненный классификатор, в котором каждый ICO будет иметь классифицированный им Item, готовый для использования в разработке КД.

 

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

 

З.Ы.: Идея решить задачу прямой записью в БД ТС была, но прикинул какую кучу записей о новых объектах, и ещё большую кучу записей о связях между этими объектами придется  создавать... и как-то не рискнул.

Изменено пользователем asterixik
Ссылка на сообщение
Поделиться на других сайтах

именно так - писать код.

 

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

Ссылка на сообщение
Поделиться на других сайтах

именно так - писать код.

 

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

Так в том то и проблема, что в идущем с ТС rich_client_customization_programmer_gd.pdf есть примеры того как отображается информация о тех или иных объектах ТС, но совершенно нет примеров добавления/редактирования информации об объектах ТС. 

 

Т.е. совершенно не понятно как там это делается. Да с учетом практически 0-вых знаний Java - вообще беда. 

 

Коллеги, откуда вы берете информацию по разработке на Java для толстого клиента? Может кто-нибудь примерчиками хотя бы какими-нибудь поделится, или направит в нужное русло  поиска знаний.

Ссылка на сообщение
Поделиться на других сайтах

Т.о. по сути задача сводится к следующим подзадачам насколько я понимаю:

  1. Вывести диалог с выбором типа Item-а
  2. Получить выделенный ICO
  3. Создать Item типа выбранного в п.1 и наименования в соответствие с п.2
  4. Заполнить свойства Item-а инфой из п.2
  5. Классифицировать ревизию п3. -> п.2

Может кто-нибудь предоставить примеры кода помогающего решить подставленные подзадачи, или хотя бы дающег направления для дальнейших изысканий? Просмотрел форумы на GTAC - ничего подходящего не нашёл :-(

Ссылка на сообщение
Поделиться на других сайтах

 

Может кто-нибудь предоставить примеры кода помогающего решить подставленные подзадачи, или хотя бы дающег направления для дальнейших изысканий? Просмотрел форумы на GTAC - ничего подходящего не нашёл :-(

 на gtac помимо форумов есть и sarch solution center. там полно примеров кода ITK(c/c++)

на ява не обязательно все вчистую делать. можно на ява сделать интерфейс, а сам код написать на ITK и вызывать из java.

есть еще SOA

 

выбирайте

Ссылка на сообщение
Поделиться на других сайтах

Думаю попробовать реализовать с помощью SOA приложение, которое будет отображать дерево классификатора, пользователь выбирает в дереве класс и тип item-а, и  затем для всех ICO в этом классе у которых нет классифицированных Item-ов создавать item-ы выбранного типа и классифицировать этими ICO. Как-то так. Немного не то что хотелось, но по SOA хотя бы примеров больше есть.


Коллеги, если у кого-нибудь есть информация прошу тут отписать или в ЛС кинуть, существуют в РФ где-нибудь порядошные курсы по разработке под ТС, так как у нас то курс для разработчика интеграторы наши провели, но там курс по сути представлял собой озвучивание и выполнение на практике того что описано в rich client customization programmer's guide, а там в основном все по представлению/отображению информации в ТС, и совершенно ничего нет по поводу создания/добавления и редактирования.

Изменено пользователем asterixik
Ссылка на сообщение
Поделиться на других сайтах
на ява не обязательно все вчистую делать. можно на ява сделать интерфейс, а сам код написать на ITK и вызывать из java.
 

лучше всего.


Думаю попробовать реализовать с помощью SOA приложение, которое будет отображать дерево классификатора, пользователь выбирает в дереве класс и тип item-а, и  затем для всех ICO в этом классе у которых нет классифицированных Item-ов создавать item-ы выбранного типа и классифицировать этими ICO. Как-то так. Немного не то что хотелось, но по SOA хотя бы примеров больше есть.


Коллеги, если у кого-нибудь есть информация прошу тут отписать или в ЛС кинуть, существуют в РФ где-нибудь порядошные курсы по разработке под ТС, так как у нас то курс для разработчика интеграторы наши провели, но там курс по сути представлял собой озвучивание и выполнение на практике того что описано в rich client customization programmer's guide, а там в основном все по представлению/отображению информации в ТС, и совершенно ничего нет по поводу создания/добавления и редактирования.

к сименсу

Ссылка на сообщение
Поделиться на других сайтах

Коллеги, если у кого-нибудь есть информация прошу тут отписать или в ЛС кинуть, существуют в РФ где-нибудь порядошные курсы по разработке под ТС, так как у нас то курс для разработчика интеграторы наши провели, но там курс по сути представлял собой озвучивание и выполнение на практике того что описано в rich client customization programmer's guide, а там в основном все по представлению/отображению информации в ТС, и совершенно ничего нет по поводу создания/добавления и редактирования.

бред.

как у сименса так и у партнеров интеграторов есть курсы по программированию,в основном ITK и JAVA. Там не только про отображение. И даже в стандартных мануалах ест ьпримеры как писать редактировать в те же формы, свойства объектов. 

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

 

Найдите в интернете контакты известных компаний интеграторов решений сименс, выходите на связь,и если устраивает цена/предложения - пробуйте

Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...

У нас похожий процесс реализован в тонком клиенте с помощью TC script, т.е. ITK  по сути. Там все просто - после заполнения формы со свойствами ICO и нажатия "Сохранить", создается айтем и его ревизия классифицируется. строчек 15 наверное на все. в толстом клиенте будет посложней 

Ссылка на сообщение
Поделиться на других сайтах
  • 3 недели спустя...

В конечном счете задача реализована посредством разбора декомпилированных плагинов идущих с Teamcenter. В итоге создан плагин для RAC TC который вызывается по кнопке в меню инструментов Классификатора, при нажатии которой выводится диалоговое окно, в которое необходимо ввести ID, наименование и выбрать из выпадающего списка тип создаваемого Item-а (обязателен только тип), далее в Teamcenter автоматически создается Item (реализацию создания Item нашел в одном из плагинов разработанных интегратором), затем созданный Item копируется в буфер обмена и после этого вставляется из буфера обмена в выбранный класс Классификатора (реализацию копирования Item в буфер обмена и вставки из буфера в Классификатор нашел в плагинах идущих с TC), с соответствующим созданием ICO.
 
Ну и пример кода моей реализации, а то что-то в ветке примеров маловато.
 
Класс-помощник работы с TCComponent

package ru.cccp3d.helpers;

import com.teamcenter.rac.aif.ApplicationDef;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.TCComponent;
import com.teamcenter.rac.kernel.TCComponentBOMViewRevision;
import com.teamcenter.rac.kernel.TCComponentBOMViewRevisionType;
import com.teamcenter.rac.kernel.TCComponentDataset;
import com.teamcenter.rac.kernel.TCComponentDatasetType;
import com.teamcenter.rac.kernel.TCComponentFolder;
import com.teamcenter.rac.kernel.TCComponentItem;
import com.teamcenter.rac.kernel.TCComponentItemRevision;
import com.teamcenter.rac.kernel.TCComponentItemType;
import com.teamcenter.rac.kernel.TCComponentViewType;
import com.teamcenter.rac.kernel.TCComponentViewTypeType;
import com.teamcenter.rac.kernel.TCException;
import com.teamcenter.rac.kernel.TCSession;

public class TCComponentsHelper
 {
   private static final TCSession session = (TCSession)AIFUtility.getDefaultSession();
   
   public static TCComponentDataset createDataset(String type, String name) throws TCException {
     return createDataset(type, name, "");
   }
   
   public static TCComponentDataset createDataset(String type, String name, String tool) throws TCException {
     TCComponentDatasetType typeDS = (TCComponentDatasetType)session.getTypeComponent("Text");
     TCComponentDataset dataSet = typeDS.create(name, name, type, tool);
     return dataSet;
   }
   
   public static TCComponentItem createItem(String id, String rev, String type, String name) throws TCException {
     TCComponentItem search = searchItem(id);
     if (search == null) {
       TCComponentItemType typeItem = (TCComponentItemType)session.getTypeComponent("Item");
       search = typeItem.create(id, rev, type, name, "", new TCComponent());
       return search;
     }
     return null;     
   }
   
   public static TCComponentItem searchItem(String id) throws TCException
   {
     TCComponentItemType type = (TCComponentItemType)session.getTypeComponent("Item");
     TCComponentItem item = type.find(id);
     return item;
   }
   
   public static void addToNewStuff(TCComponentItem object) {
     try {
       TCComponentFolder newStuffFolder = session.getUser().getNewStuffFolder();
       addItemToFolder(object, newStuffFolder);
     } catch (TCException e) {
       e.printStackTrace();
     }
   }
   
   public static void addItemToFolder(TCComponentItem createItem, TCComponentFolder folder) {
     if (folder == null) {
       return;
     }
     try {
       folder.add("contents", createItem);
     }
     catch (Exception localException) {}
   }
   
   public static void openInTC(TCComponent comp) {
     ApplicationDef applicationDef = AIFUtility.getAIFApplicationDefMgr().getApplicationDef("com.teamcenter.rac.ui.perspectives.navigatorPerspective");
     applicationDef.openApplication(new com.teamcenter.rac.aif.kernel.InterfaceAIFComponent[] { comp });
   } 
 
   public static void copyToClipBoard(TCComponent comp) {} 
 
   public static void createDefaultBomView(TCComponentItem item)
   {
     try
     {
       TCComponentItemRevision rev = item.getLatestItemRevision();
       TCComponentBOMViewRevision createBVR = createBVR(rev, "View");
       createBVR.save();
       rev.lock();
       rev.save();
       rev.unlock();
     } catch (TCException e) {
       e.printStackTrace();
     }
   }
   
   public static TCComponentViewType findBOMViewType(String sBOMViewType, TCSession session) {
     TCComponentViewType vt = null;
     try {
       TCComponentViewTypeType tc_vtt = (TCComponentViewTypeType)session.getTypeComponent("PSViewType");
       TCComponent[] array_vt = tc_vtt.extent();
       for (int i = 0; i < array_vt.length; i++)
         if (array_vt[i].toString().equals(sBOMViewType)) {
           vt = (TCComponentViewType)array_vt[i];
           break;
         }
     } catch (TCException ex) {
       ex.printStackTrace();
     }
     return vt;
   }
   
   public static TCComponentBOMViewRevision createBVR(TCComponentItemRevision ir, String bv_type) throws TCException {
     TCSession session = ir.getSession();
     TCComponentBOMViewRevision bvr = null;
     TCComponentViewType vt = findBOMViewType(bv_type, session);
     TCComponentBOMViewRevisionType tc_bvr = (TCComponentBOMViewRevisionType)session.getTypeComponent("BOMView Revision");
     bvr = tc_bvr.create(ir.getItem().getProperty("item_id"), ir.getProperty("item_revision_id"), vt, false);
     return bvr;
   }
 }

Класс-помощник для "общения" с окном

 
package ru.cccp3d.helpers;
 
public class TCItemHelper {
 
private String m_id;
private String m_rev;
private String m_type;
private String m_name;
 
public TCItemHelper(String id, String rev, String type, String name) {
m_id = id;
m_rev = rev;
m_type = type;
m_name = name;
}
 
public void setId(String paramString) {
this.m_id = paramString;
}
 
public String getId() {
return this.m_id;
}
 
public void setRev(String paramString) {
this.m_rev = paramString;
}
 
public String getRev() {
return this.m_rev;
}
 
public void setType(String paramString) {
this.m_type = paramString;
}
 
public String getType() {
return this.m_type;
}
 
public void setName(String paramString) {
this.m_name = paramString;
}
 
public String getName() {
return this.m_name;
}
 
}

 
Класс диалогового окна, за основу взят TitleAreaDialog просто потому что нашел пример с ним в интернете, в принципе можно взять какой-нибудь другой класс из org.eclipse.jface.dialogs

 
packagepackage ru.cccp3d.components;
 
import java.awt.BorderLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
 
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JTextField;
 
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Shell;
 
import ru.cccp3d.helpers.TCItemHelper;
 
public class NewItemDialog extends TitleAreaDialog {
 
    private String selectedButton;
    private TCItemHelper resultItem;
    private String title, bodyMsg; 
    private int msgType; //IMessageProvider  
    private TCItemHelper m_item; 
    private Text textId;
    private Text textName;
    private Text textRev; 
    private Combo comboType;
 
    /** 
     * @param parentShell   - Parent Shell 
     * @param title         - Title of the dialogue. 
     * @param bodyMsg       - Body message of the dialogue. 
     * @param item  - Item default value. 
     * @param msgType       - 'IMessageProvider.INFORMATION '  Can be one of: NONE ERROR INFORMATION WARNING
     */
    public NewItemDialog(
            Shell parentShell, String title, String bodyMsg, 
            TCItemHelper item,
            int msgType)  { //for type see: IMessageProvider
   
        super(parentShell);
 
        this.m_item = item;
 
         
        //Set labels. 
        this.title = title;
        this.bodyMsg = bodyMsg;
        
        //set type
        this.msgType = msgType;
        
        // avoid help button poping up.
        this.setHelpAvailable(false);
        
        resultItem = null;
 
        selectedButton = null;
    }
 
    /** Dialogue constructor */
    @Override
    public void create() {
 
        super.create();
 
        //The 'Message' of a TitleArea dialogue only spans 1-2 lines. Then text is cut off. 
        //It is not very efficient for longer messages. 
        //Thus we utilize it as a 'title' and instaed we appeng a label to act as body. (see below). 
        setMessage(this.title, this.msgType); //$NON-NLS-1$
        //setTitle(); //not used.
        
        //Set the size of the dialogue. 
        //We avoid hard-coding size, instead we tell it to figure out the most optimal size.
        //this.getShell().setSize(650, 550); //Hard-Coded = bad.
        this.getShell().setSize(getInitialSize());
    }
 
    /** Return the buttonID of the button that the user selected if he pressed ok. 
     * 
     * @return ButtonID of selected button.
     */
    public String getSelectedButton() {
        return selectedButton;
    }
    
    public TCItemHelper getResultItem() {
     return resultItem;
    }
 
 
    @Override
    protected Control createDialogArea(Composite parent) {
        Composite area = (Composite) super.createDialogArea(parent);
        Composite container = new Composite(area, SWT.NONE);
        container.setLayoutData(new GridData(GridData.FILL_BOTH));
        GridLayout layout = new GridLayout(2, false);
        container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        container.setLayout(layout);
        
        Label label = new Label(container, 0);
        label.setText(this.bodyMsg);
        label = new Label(container, 0);
        label.setText("");
        label = new Label(container, 0);
        
        label.setText("Идентификатор:");
        textId = new Text(container, 0);
        textId.setSize(40,15);
        label = new Label(container, 0);
        label.setText("Наименование:");       
        textName = new Text(container, 0);
        label = new Label(container, 0);
        label.setText("Ревизия:");
        textRev = new Text(container, 0);
        label = new Label(container, 0);
        label.setText("Тип объекта:");
        
        // типы Item
        comboType = new Combo(container, 0);
        comboType.add("Complect");
        comboType.add("Detal");
        comboType.add("Document");
        comboType.add("Material");
        comboType.add("Prochee");
        if (m_item != null) {
         textId.setText(m_item.getId());
         textRev.setText(m_item.getRev());
         textName.setText(m_item.getName());
        }        
        return area;
    }
 
    // save content of the Text fields because they get disposed
    // as soon as the Dialog closes
    protected void saveInput() {
     resultItem = new TCItemHelper(textId.getText()  , textRev.getText(), comboType.getText(), textName.getText());
        
    }
 
    /** Called when the ok button is pressed */
    @Override
    protected void okPressed() {
        saveInput(); // save input.
        super.okPressed(); // close dialogue
    }
 
}

 
Ну и реализация обработчика нажатия кнопки  на тулбаре (как сделать кнопу есть в Client Customization Programmer's Guid). Импорт надо почистить, так как пробывал разные варианты, накопилось много лишнего.

 
import java.awt.Frame;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import java.util.Map.Entry;
 
import javax.swing.SwingUtilities;
 
import ru.cccp3d.components.*;
import ru.cccp3d.helpers.*;
 
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import com.teamcenter.rac.aif.AIFClipboard;
import com.teamcenter.rac.aif.AIFPortal;
import com.teamcenter.rac.aif.AIFTransferable;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.Transferable;
 
import java.util.AbstractMap.SimpleEntry;
 
 
import com.teamcenter.rac.aif.AbstractAIFUIApplication;
import com.teamcenter.rac.aif.kernel.AIFComponentContext;
import com.teamcenter.rac.aif.kernel.AbstractAIFSession;
import com.teamcenter.rac.aif.kernel.InterfaceAIFComponent;
import com.teamcenter.rac.aifrcp.AIFUtility;
import com.teamcenter.rac.kernel.*;
import com.teamcenter.rac.util.MessageBox;
import com.teamcenter.rac.util.Registry;
import com.teamcenter.rac.util.Utilities;
import com.teamcenter.rac.classification.*;
import com.teamcenter.rac.classification.common.*;
import com.teamcenter.rac.classification.common.operations.G4MOpenOperation;
 
 
public class SampleHandler extends AbstractHandler implements ClipboardOwner {
/**
* The constructor.
*/
public SampleHandler() {
}
 
/**
* the command has been executed, so extract extract the needed information
* from the application context.
*/
public Object execute(ExecutionEvent event) throws ExecutionException {
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
        //--- Set Dialogue options.
        String title = "Создание записи в классификаторе совместно с классифицированным объектом";
        String body = " Текст пояснения \n"
                + "Ещё текст пояснения.";
             
        int msgType = IMessageProvider.INFORMATION;  //Can be one of: NONE ERROR INFORMATION WARNING
        //--- Instantiate & open the dialogue.
        NewItemDialog myDialog =
                new NewItemDialog(window.getShell(), title, body, null, msgType);
        int retVal = myDialog.open();
 
        //Handle dialogue outcome.
        switch (retVal) {
        case Window.OK:  //Avoid using generic '1' and '0' as it's confusing. Use defined constants as shown.
         // Нажато Ok - создаем и классифициурем объект
         TCItemHelper itemInfo;
         itemInfo = myDialog.getResultItem();
         TCComponentItem item;
     try {
     item = TCComponentsHelper.createItem(itemInfo.getId(),itemInfo.getRev(),itemInfo.getType(),itemInfo.getName());
     
     /*
      * Скопируем созданный компонент в буфер
      */
 
     //Vector localVector = new Vector();
     //localVector.addElement(item);
     AIFClipboard localAIFClipboard = AIFPortal.getClipboard();
     AbstractAIFUIApplication currentApplication = AIFUtility.getCurrentApplication();
     Registry m_reg = currentApplication.getRegistry();
     AbstractG4MContext m_context = ((AbstractG4MApplication)currentApplication).getG4MContext();
     //AbstractAIFSession localAbstractAIFSession = currentApplication.getSession();
     //AIFTransferable localAIFTransferable = new AIFTransferable(localVector);
     AIFTransferable localAIFTransferable = new AIFTransferable(item);
     localAIFClipboard.setContents(localAIFTransferable, this); //??? можно вместо this поставить null !!!
     
     /*
      * Теперь надо выполнить вставку
      */
     currentApplication.getSession().setStatus("Paste Tc Component from Clipbord");
     
     try {
     Object localObject3;
         localObject3 = new G4MOpenOperation(m_context, m_reg.getString("g4mOpenOperation.MESSAGE"));
                    ((G4MOpenOperation)localObject3).setComponent((InterfaceAIFComponent)item);
                    ((G4MOpenOperation)localObject3).executeOperation();
 
} catch (Exception e) {
MessageBox.post(e);
}
currentApplication.getSession().setReadyStatus();
 
     } catch (TCException e) {
     MessageDialog.openInformation(
     window.getShell(),
     "Ошибка при создании объекта Item типа " + itemInfo.getType(),
     e.getError());
     }
         
         
            //System.out.println("You selected option: " +  myDialog.getResultItem().getName());
            break;
        case Window.CANCEL:
            //System.out.println("You clicked cancle");
            break;
        default:
            System.out.println("Unexpected closure of dialogue.");
            break;
        }
 
return null;
}
 
/*
* (non-Javadoc)
* @see java.awt.datatransfer.ClipboardOwner#lostOwnership(java.awt.datatransfer.Clipboard, java.awt.datatransfer.Transferable)
*/
public void lostOwnership(Clipboard paramClipboard, Transferable paramTransferable) {}
 
}

Ну и в конце, повторю то с чего начал, Java начал изучать с начала января, так что прошу сильно строго не судить.

Изменено пользователем asterixik
Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.




  • Сообщения

    • pashist
      Здравствуйте, Вам желательно потратить 30 минут на разрисовку схемы, так будет понятнее.  А так, похоже (на вид) на AO6414. :)
    • Ander
      https://modmash.ru/product/sistema-chpu-fms-3200/ может, это
    • Guhl
      Сказал чувак, которого тут на хyй разве что ленивый не послал. Лемоша, у тебя вообще критика отсутствует? Тебе реально лечиться надо
    • lem_on
      Как и в реальной жизни есть люди-гондоны. В реальности они получают по морде, а в интернете у них раздолье, вот и тешат свое маленькое эго, суя его во все щели.  В Перми так то ходит, помалкивает. 
    • clavr
      пользуюсь SWPlus. Копирую проект с его переименованием. теперь чтобы внести изменения в свойствах файлов, нужно открывать каждую делатель, каждую конфигурацию, и запускать макрос Mpop. есть ли возможность это упростить? выбирать сборку или вообще папку с проектом указывать, чтобы автоматом запустить MProp для все файлов
    • Herr Kaputt
      Вот оно, слово Истины, будто Солнце из-за туч! Пришел и решил проблему!
    • Борман
      На трубе стоит регулятор расхода. В его конструкции есть шток, который внутри регулятора двигает рабочий орган. Этот шток может занимать положение в диапазоне от 0 до 1.0 и им можно управлять. Типа выставить на 0,8 и т.п. При этом рабочий орган меняет пропускную способность регулятора от 0 до Кмах нелинейно в зависимости от положения штока.    Как трактовать фразу "при 80% степени открытия клапана" ? По штоку ? Или как 0,8*Кмах ?
    • AlexArt
      Я мож какие-то подводные камни не учитываю, но это надо решать в статике. Хотя если там существенные деформации идут, тогда да, нужно в тразиете.
    • Kelny
      Вероятно стоит посмотреть в сторону DriveWorks.   Тут главное внимательно смотреть за функциями VBA, т.к. в последних версиях как-то поломали этот функционал и некоторые функции не всегда корректно работают - резултат может оказаться не предсказуеммым (ищите темы по ключевому слову ОКРУГЛЕНИЕ), пример некорректностей в последних версиях (в старых версиях работало корректно): https://cccp3d.ru/topic/134714-округление-функции-до-большего-значения/?do=findComment&comment=1303934     https://cccp3d.ru/topic/134714-округление-функции-до-большего-значения/?do=findComment&comment=1304146    
    • AlexKaz
      Скачайте мою методичку в подписи. В ней на последних страницах есть примеры. Среди них есть пример с пружинкой. В настройках потребуется по аналогии задать подходящие свойства, imho,  нужно добавить жёсткость на кручение. Не смотрел, поэтому можете проверить сами.
×
×
  • Создать...