konto usunięte

Temat: JAVA i COM

Czy może, ktoś posiada doświadczenie w pobieraniu danych z systemu Subiekt GT Sfera. Lub może ma ktoś doświadczenie w pobieraniu danych z obiektów OLE.

Ostatnio pracuje nad pobieraniem danych z programu Subiekt GT Sfera do aplikacji napisanej w javie. System Subiekt udostępnia dane za pomocą obiektów OLE Automation.

Z tego co szukałem w sieci to konieczne jest wykorzystanie JAVA-COM Bridge, aby dostać się do obiektów OLE.

Proszę o podpowiedź co najlepiej wykorzystać do pobierania danych z obiektów OLE Automation.

Temat: JAVA i COM

Swego czasu do łączenia z Subiektem wykorzystałem Jawin - jednak z tego co widzę, projekt ten nie jest już rozwijany. Generator stubów trochę kulał, także ostatecznie ręcznie wklepałem wszystkie stuby z potrzebnymi mi metodami. Niemniej jednak program działał, i z tego co wiem, działa nadal do dziś.

Możesz też spróbować z JACOB - Java COM Bridge. Ja z jakiegoś powodu nie użyłem tej biblioteki, niestety nie pamiętam już z jakiego. W odróżnieniu od Jawin, JACOB jest jednak ciągle rozwijany, możliwe więc, że teraz bez problemu ruszy z Subiektem.

Przykładowy stub w Jawinie wygląda tak:
public class SuDokument extends DispatchPtr {

public static final String componentName = "InsERT.SuDokument";

public SuDokument() throws COMException {
super(componentName);
}

public SuDokument(String compName) throws COMException {
super(compName);
}

public SuDokument(DispatchPtr ptr) throws COMException {
super(ptr);
}

public void zapisz() throws COMException {
invoke("Zapisz");
}

public int getKontrahentId() throws COMException {
return ((Integer) get("KontrahentId")).intValue();
}

public void setKontrahentId(int id) throws COMException {
this.put("KontrahentId", id);
}
}


Pytaj śmiało, postaram się pomóc.Karol Sarnacki edytował(a) ten post dnia 20.10.09 o godzinie 11:41

konto usunięte

Temat: JAVA i COM

Do łączenia planowałem wykorzystać JACOB-a. Jeżeli ktoś ma jakieś doświadczenie z wykorzystaniem JACOB-a to chętnie wysłucham.

Oczywiście sprawdzę też jak wygląda sprawa z Jawin.

Wszelkie sugestie czego lepiej użyć są mile widziane.
Tomasz B.

Tomasz B. Senior Software
Engineer

Temat: JAVA i COM

Hej

Tworzyłem kiedyś Applet wykorzystujący COM. Ja osobiście wykorzystałem w tym bibliotekę COM- Bridge firmy teamdev http://www.teamdev.com/comfyj dosyć dobra biblioteka, trochę miałem problemy ze zwalnianiem zasobów. Biblioteka zawiera sporą dokumentację i przykłady. Poza tym dobry support był ze strony producenta tej biblioteki, jaki miałem większy problem to bardzo szybko uzyskiwałem pomoc. W razie jakiś problemów służę pomocą.
Pozdrawiam.

konto usunięte

Temat: JAVA i COM

Dziękuję za informację.
Jak będę miał jakieś bardziej szczegółowe pytania to napiszę.
Pozdrawiam.
Adrian Lapierre

Adrian Lapierre CEO/Founder,
SoftProject Systemy
Informatyczne sp. z
o.o.

Temat: JAVA i COM

Próbuję połączyć się z Subiektem przy pomocy JACOB-a, jednak ciągle dostaję błąd "Can't get object clsid from progid" pierwszej w linii kodu, która wygląda tak:

Dispatch oGT = new Dispatch("InsERT.GT");

czy ktoś pomoże?
Tomasz B.

Tomasz B. Senior Software
Engineer

Temat: JAVA i COM

Witam

Już dawno nie siedziałem w tej technologi ale może spróbuj się na początku odwołać do Insert Gt poprzez CLSID, zakładam że odwołujesz się do konta za pomocą konta administratora systemu. Sprawdził bym rejest czy progid istnieje z tego co pamiętam w progid nieraz jest doklejana wersja np Inser.gt.v01
Pozdrawiam
Adrian Lapierre

Adrian Lapierre CEO/Founder,
SoftProject Systemy
Informatyczne sp. z
o.o.

Temat: JAVA i COM

Dzięki za odpowiedź. Pomogło wywołanie ComThread.InitSTA() na początku programu. Nie wiem dokładnie co to powoduje, ale znalazłem taką instrukcję w przykładach do JACOB-a dotyczących MS Accessa. Teraz kod działa, a gdyby ktoś potrzebował to poniżej wklejam testowy fragment:

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import com.jacob.com.ComThread;

/**
*
*
*/
public class App {

public static void main(String[] args) {

ActiveXComponent oGT;
ActiveXComponent oSubiekt;

ComThread.InitSTA();
oGT = new ActiveXComponent("InsERT.GT");

oGT.setProperty("Produkt", 1);

oGT.setProperty("Serwer", "**********");
oGT.setProperty("Uzytkownik", "sa");
oGT.setProperty("UzytkownikHaslo", "**********");
oGT.setProperty("Baza", "softproject");
oGT.setProperty("Operator", "Szef");
oGT.setProperty("OperatorHaslo", "");

oSubiekt = oGT.invokeGetComponent("Uruchom", new Variant(0), new Variant(0));

ActiveXComponent oKontrachenci = oSubiekt.invokeGetComponent("Kontrahenci");


ActiveXComponent oKontrachent = oKontrachenci.invokeGetComponent("Wczytaj", new Variant("873-521-22-43"));

//oKontrachent.invoke("Wyswietl");

System.out.println("nazwa " + oKontrachent.getPropertyAsString("Nazwa"));

}
}
Piotr G.

Piotr G. Programista Java

Temat: JAVA i COM

Witam,
połączyłem się z subiektem GT przy pomocy JACOBa - Java COM Bridge.
Do utworzonego wcześniej dokumentu próbuję dodać flagę własną przy pomocy metody "UstawFlageWlasna":

oSubiekt.invokeGetComponent("UstawFlageWlasna", new Variant(9), new Variant(12533),
new Variant("Orders"), new Variant("komentarz"));

Co prawda ustawia mi tą flagę zgodnie z oczekiwaniami, ale zaraz po tym program wysypuje mi się:

Exception in thread "main" com.jacob.com.ComFailException: VariantChangeType failed
at com.jacob.com.Variant.toVariantDispatch(Native Method)
at com.jacob.com.Variant.toDispatch(Variant.java:2003)
at com.jacob.activeX.ActiveXComponent.invokeGetComponent(ActiveXComponent.java:391)
at createOrdToSuppl.App.main(App.java:42)

Bez wywoływania tej metody program działa bez problemu. Próbowałem użyć googli ale nic nie znalazłem - ogólnie mało jest info na ten temat.
Poniżej metoda, o której piszę:

Metoda UstawFlageWlasna
Umożliwia ustawienie flagi własnej dla dowolnego obiektu.

Składnia:
wyrazenie.UstawFlageWlasna(lGrupaFlagId , lObiektId , bstrFlaga , bstrKomentarz )

Wyrażenie
Wymagane wyrażenie, które zwraca obiekt Subiekt lub obiekt Rewizor lub obiekt Gratyfikant lub obiekt Gestor

Parametry
lGrupaFlagId
Long. Identyfikator grupy flag własnych. Stanowi odwołanie do pola flp_Id tabeli fl_Grupy
lObiektId
Long. Identyfikator obiektu
bstrFlaga
String. Nazwa flagi własnej
bstrKomentarz
String. Komentarz przypisywany do flagi własnej

Czy ktoś orientuje się o co kaman?

Pzdr,
Piotrek
Piotr G.

Piotr G. Programista Java

Temat: JAVA i COM

Powróciłem do tematu, po kilku tygodniach - bo przecież tak tego nie zostawię - no i namierzyłem przyczynę.

Aby ustawianie flagi własnej w Subiekcie, w dokumencie "zamówienie do dostawcy" (za pomocą javy i JACOB-a) zadziałało, to zamiast metody:
"oSubiekt.invokeGetComponent("UstawFlageWlasna", new Variant(9), new Variant(12533),
new Variant("Orders"), new Variant("komentarz"));"

należało użyć:
"oSubiekt.invoke("UstawFlageWlasna", new Variant(9), new Variant(12533),
new Variant("Orders"), new Variant("komentarz"));"

i po kłopocie;)
Tomasz B.

Tomasz B. Senior Software
Engineer

Temat: JAVA i COM

Gratuluję rozwiązania problemu. Informatyk to uparta bestia ;)

konto usunięte

Temat: JAVA i COM

Przyszla i spamuje, wtf ...
Łukasz G.

Łukasz G. programista

Temat: JAVA i COM

Hej
Na przykładzie pobierania zaznaczonych towarów używając Jacoba:

ActiveXComponent oTowary = oSubiekt.invokeGetComponent("Towary");
ActiveXComponent oTowaryWybierz = oTowary.invokeGetComponent("Wybierz");
oTowaryWybierz.setProperty("MultiSelekcja", true);
oTowaryWybierz.invoke("Wyswietl");
ActiveXComponent zaznaczone = oTowaryWybierz.invokeGetComponent("ZaznaczoneTowary");
System.out.println("ilosc elementów: " + zaznaczone.getPropertyAsInt("LiczbaElementow"));
Ktoś wie jak te produkty przeiterować?
Piotr G.

Piotr G. Programista Java

Temat: JAVA i COM

Cześć,
spróbuj ten sposób:

...
ActiveXComponent oTowary = getOSubiekt().invokeGetComponent("Towary");
ActiveXComponent oTowaryLista = oTowary.invokeGetComponent("Wybierz");
oTowaryLista.setProperty("MultiSelekcja", true);
oTowaryLista.invoke("Wyswietl");
ActiveXComponent zaznaczone = oTowaryLista.invokeGetComponent("ZaznaczoneTowary");
System.out.println("Liczba elementów: " + zaznaczone.getPropertyAsInt("LiczbaElementow"));
Variant v = oTowaryLista.invoke("ZaznaczoneId");
ActiveXComponent oTowar;
for (int i = 0; i < zaznaczone.getPropertyAsInt("LiczbaElementow"); i++) {
Variant a = v.toEnumVariant().nextElement();
System.out.println("a: " + a);
oTowar = oTowary.invokeGetComponent("Wczytaj", a);
System.out.println("Symbol Towaru: " + oTowar.getProperty("Symbol"));
System.out.println("Nazwa Towaru: " + oTowar.getProperty("Nazwa"));
}
...

Pzdr,
Piotr
Łukasz G.

Łukasz G. programista

Temat: JAVA i COM

Wielkie dzięki.
Leszek Majda

Leszek Majda Specjalista Branży
IT / Team Leader /
Programista

Temat: JAVA i COM

Hej - wątek trąci myszką ale może jeszcze ktoś z was żyje i coś pamięta.

Szukam jakiejś opcji na zapis nowego kontrahenta przy użyciu mostka Jacob. Od 3 dni szukamy sposobu na zapis tych danych ale niestety bezskutecznie.

Pomożecie?
Piotr G.

Piotr G. Programista Java

Temat: JAVA i COM

Leszek M.:
Hej - wątek trąci myszką ale może jeszcze ktoś z was żyje i coś pamięta.

Szukam jakiejś opcji na zapis nowego kontrahenta przy użyciu mostka Jacob. Od 3 dni szukamy sposobu na zapis tych danych ale niestety bezskutecznie.

Pomożecie?

/*metoda getOSubiekt pobiera wcześniej utworzony obiekt Subiektu*/
ActiveXComponent oKontrahenci = getOSubiekt().invokeGetComponent("Kontrahenci");
ActiveXComponent oKontrahent = oKontrahenci.invokeGetComponent("Dodaj");

/*metodą setProperty można dodać np. nazwę - atrybut "Nazwa" z listy "Składowe obiektu Kontrahent"*/
oKontrahent.setProperty("Nazwa", "nazwa kontrahenta");
oKontrahent.invoke("Zapisz");

/*podgląd zapisanego kontrahenta*/
oKontrahent.invoke("Wyswietl");
Leszek Majda

Leszek Majda Specjalista Branży
IT / Team Leader /
Programista

Temat: JAVA i COM

Hej Piotr!

Dozgonnie wdzięczny za pomoc! Nie zauważyłem, że metoda dodaj zwraca ten obiekt - to to co mi umknelo.

Bardzo interesujaca ta technologia COM. Przy próbie zapisu kontrahenta bez symbolu - w kokumentacji czytam, że powinien sam go wygenerować tymczasem powoduje to wyjątek serwera sql z kodem gdzie Microsoft twierdzi, że jest to błąd konfiguracji serwera :)

Po dodaniu Symbolu z ręki wszystko wraca do normy.

Kiedyś to programiści mieli ciężko - teraz w zasadzie wszystko wydaje się pracą ekskluzywną :)

Niebawem dojdę do części gdzie będę musiał złożyć zamówienie od klienta przy użyciu SKU produktu. Spodziewam się niekończących przygód. Jakieś rady jak nie dać się tym COMem zabić ?

Pozdrawiam
Leszek Majda

Leszek Majda Specjalista Branży
IT / Team Leader /
Programista

Temat: JAVA i COM

Hej Piotr,

nie wiesz może jak spowodować żeby uniknąć wielkorotnych uruchomień Subiekta? Zasadniczo nie ma znaczenia co zaznacze w trybie dopasowania. Subiekt otwiera się za kazdym razem jako nowa instancja.

Pozdrawiam
Łukasz G.

Łukasz G. programista

Temat: JAVA i COM

spróbuj:
oSubiekt = oGT.invokeGetComponent("Uruchom", new Variant(2), new Variant(4));

2 - gtaUruchomDopasujOperatora: Oznacza dopasowanie pierwszej znalezionej aplikacji zadanego typu, która jest podłączona do wskazanego serwera, bazy danych oraz zalogowana na podanego użytkownika InsERT GT (operatora).

4 - gtaUruchomWTle: Oznacza uruchomienie/podłączenie do zadanej aplikacji bez wykorzystywania interfejsu użytkownika. Aplikacja podłączona w ten sposób działa w tle - nie otwiera się jej okno.Ten post został edytowany przez Autora dnia 01.10.16 o godzinie 15:43

Następna dyskusja:

Programista JAVA pilnie pos...




Wyślij zaproszenie do