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

Помогите сделать Check in


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

Помогите сделать Check in :surrender:

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

Check out и undoCheck out получилось. Правда данные методы помещают объект в системную рабочую область, пока как это изменить не знаю. Вот исходник класса:

public class TestWindchill {

public static synchronized void CheckoutDocument(HTTPRequest req, HTTPResponse resp) throws WTException {

Properties properties = HTTPRequest.splitQueryString(req.getProperty("cgi.query_string"));

String docNumber = properties.getProperty("docnumber");

if (docNumber == null || docNumber.length() < 1) throw new WTException("Error, Документа не найдено");

QuerySpec qs = new QuerySpec(EPMDocumentMaster.class);

qs.appendSearchCondition(new SearchCondition(EPMDocumentMaster.class,EPMDocumentMaster.NUMBER,SearchCondition.EQUAL,docNumber) );

final QueryResult docMasters = PersistenceHelper.manager.find(qs);

if (docMasters.size() == 0) throw new WTException("Document not found .");

else if (docMasters.size() > 1)

throw new WTException("Error! ");

EPMDocumentMaster documentMaster = (EPMDocumentMaster) docMasters.nextElement();

QueryResult documents = VersionControlHelper.service.allIterationsOf(documentMaster);

if (documents.size() < 1) throw new WTException("Error! 0 iteration.");

EPMDocument document = (EPMDocument) documents.nextElement();

Folder folder = WorkInProgressHelper.service.getCheckoutFolder();

try {

WorkInProgressHelper.service.checkout(document, folder, "Chеck out");

} catch (WTPropertyVetoException e) {

throw new WTException("Check in fail " + document.getNumber());

}

}

public static synchronized void undoCheckoutDocument(HTTPRequest req, HTTPResponse resp) throws WTException {

Properties properties = HTTPRequest.splitQueryString(req.getProperty("cgi.query_string"));

String docNumber = properties.getProperty("docnumber");

if (docNumber == null || docNumber.length() < 1) throw new WTException("Error");

QuerySpec qs = new QuerySpec(EPMDocumentMaster.class);

qs.appendSearchCondition(new SearchCondition(EPMDocumentMaster.class,EPMDocumentMaster.NUMBER,SearchCondition.EQUAL,docNumber) );

final QueryResult docMasters = PersistenceHelper.manager.find(qs);

if (docMasters.size() == 0) throw new WTException("Error");

else if (docMasters.size() > 1)

throw new WTException("Error!");

EPMDocumentMaster documentMaster = (EPMDocumentMaster) docMasters.nextElement();

QueryResult documents = VersionControlHelper.service.allIterationsOf(documentMaster);

if (documents.size() < 1) throw new WTException("Error! 0 iteration.");

EPMDocument document = (EPMDocument) documents.nextElement();

try {

WorkInProgressHelper.service.undoCheckout(document);

} catch (WTPropertyVetoException e) {

throw new WTException("Check in fail " + document.getNumber());

}

}

}

А когда пытаюсь выполнить тоже самое для

WorkInProgressHelper.service.checkin(document, "Chеck in",folder);

то при компиляции класса получаю ошибку в методе checkin.

Я так подозреваю что чего то не хватает, так как команда check in гораздо сложнее, чем две предыдущие.

Люди помогите. :helpsmilie:

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


Выложите stack trace получаемый в результате попытки скомпилировать ваш класс. По нему можно понять в чём заключается ошибка.

Скорее всего нужно будет добавить в CLASS_PATH не достающие jar-файлы, в которых есть классы используемые методом checkin().

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

Ну вот к примеру класс. Делаю все как в предыдущих методах, которые работают

import wt.doc.WTDocument;

import wt.doc.WTDocumentMaster;

import wt.epm.EPMDocumentMaster;

import wt.epm.EPMDocument;

import wt.query.ClassTableExpression;

import wt.fc.PersistenceHelper;

import wt.fc.QueryResult;

import wt.folder.Folder;

import wt.httpgw.HTTPRequest;

import wt.httpgw.HTTPResponse;

import wt.query.QuerySpec;

import wt.query.SearchCondition;

import wt.util.WTException;

import wt.util.WTPropertyVetoException;

import wt.vc.VersionControlHelper;

import wt.vc.wip.WorkInProgressHelper;

import java.util.Properties;

public class TestWindchill {

public static synchronized void CheckinDocument(HTTPRequest req, HTTPResponse resp) throws WTException {

Properties properties = HTTPRequest.splitQueryString(req.getProperty("cgi.query_string"));

String docNumber = properties.getProperty("docnumber");

if (docNumber == null || docNumber.length() < 1) throw new WTException("Error");

QuerySpec qs = new QuerySpec(EPMDocumentMaster.class);

qs.appendSearchCondition(new SearchCondition(EPMDocumentMaster.class,EPMDocumentMaster.NUMBER,SearchCondition.EQUAL,docNumber) );

final QueryResult docMasters = PersistenceHelper.manager.find(qs);

if (docMasters.size() == 0) throw new WTException("Document not found .");

else if (docMasters.size() > 1)

throw new WTException("Error! Find several document.");

EPMDocumentMaster documentMaster = (EPMDocumentMaster) docMasters.nextElement();

QueryResult documents = VersionControlHelper.service.allIterationsOf(documentMaster);

if (documents.size() < 1) throw new WTException("Error! 0 iteration.");

EPMDocument document = (EPMDocument) documents.nextElement();

Folder folder = WorkInProgressHelper.service.getCheckoutFolder();

try {

WorkInProgressHelper.service.checkin(document, "Chеck in", folder);

} catch (WTPropertyVetoException e) {

throw new WTException("Check in fail " + document.getNumber());

}

}

}

Метод check in происходит из класса WorkInProgressHelper, который у меня импортирован.

При компиляции получаю:

cannot resolve symbol

symbol : method checkin (wt.epm.EPMDocument,java.lang.String,wt.folder.Folder)

location: interface wt.vc.wip.WorkInProgressService

WorkInProgressHelper.service.checkin(document, "Check in", folder);

^

Я понимаю, что делаю это не правильно, но незнаю как сделать чтобы работало. Я впервые пытаюсь написать что- то свое, используя классы и методы, встроенные в Виндчил.

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

AnexiB, у интерфейса WorkInProgressService нет перегруженного метода checkin() принимающего в качестве параметров переменные типов EPMDocument, String, Folder. Поэтому компилятор ругается при вызове этого метода.

Вот такая запись должна работать: WorkInProgressHelper.service.checkin(document, "Chеck in");

По тому что у WorkInProgressService есть метод checkin(Workable object, String note). Где Workable - это интерфейс, одной из реализаций которого является класс EPMDocument.

Для быстрого получения списка поддерживаемых интерфейсом или классом методов можно пользоваться средами разработки, например Eclipse. Или смотреть в API: <Windchill>/codebase/wt/clients/library/api/index.html

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

AnexiB, у интерфейса WorkInProgressService нет перегруженного метода checkin() принимающего в качестве параметров переменные типов EPMDocument, String, Folder. Поэтому компилятор ругается при вызове этого метода.

Вот такая запись должна работать: WorkInProgressHelper.service.checkin(document, "Chеck in");

По тому что у WorkInProgressService есть метод checkin(Workable object, String note). Где Workable - это интерфейс, одной из реализаций которого является класс EPMDocument.

Для быстрого получения списка поддерживаемых интерфейсом или классом методов можно пользоваться средами разработки, например Eclipse. Или смотреть в API: <Windchill>/codebase/wt/clients/library/api/index.html

Спасибо за ответ. Все получилось.

Правда я как раз и брала первый метод checkin(WTCollection objects, String note, Folder folder) из API из ...ptc\Windchill8\codebase\wt\clients\library\api\index.html, там есть список где имеется метод

checkin.TIF

Наверно чего то не дочитала.

Остается теперь вопрос как взять на изменение в определенную рабочую область? Так как данный код помещает документ в системную рабочую область System.

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

AnexiB, интерфейс WTCollection - это коллекция объектов. В качестве одной из реализаций этого интерфейса может выступать класс WTArrayList. Объект которого содержит ссылки на объекты (коллекцию объектов) классов Оbject (или классов расширяющих его :smile: ). Для того, что бы воспользоваться методом checkin(WTCollection objects, String note, Folder folder), можно создать объект WTCollection, а затем добавить к нему с помощью метода addElement() ваш EPMDocument.

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

1. Выполнить поиск доступных рабочих областей.

2. Выбрать из найденного списка ту, которая нужна.

3. Указать методу checkout(Workable object, Folder folder, String note). Это будет второй параметр, а именно folder.

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

AnexiB, интерфейс WTCollection - это коллекция объектов. В качестве одной из реализаций этого интерфейса может выступать класс WTArrayList. Объект которого содержит ссылки на объекты (коллекцию объектов) классов Оbject (или классов расширяющих его :smile: ). Для того, что бы воспользоваться методом checkin(WTCollection objects, String note, Folder folder), можно создать объект WTCollection, а затем добавить к нему с помощью метода addElement() ваш EPMDocument.

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

1. Выполнить поиск доступных рабочих областей.

2. Выбрать из найденного списка ту, которая нужна.

3. Указать методу checkout(Workable object, Folder folder, String note). Это будет второй параметр, а именно folder.

Спасибо большое за разъяснение. Буду пробывать дальше и изучать методы и коллекции объектов :).

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

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

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

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

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

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

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

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

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

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

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




×
×
  • Создать...