OPTIMA COM 2019.1.1

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, obiekty COM .NET

Moderator: mikey

kluchol
Posty: 11
Rejestracja: 28 lut 2019, 10:18
Rola: Inny
Wersja: 2019

OPTIMA COM 2019.1.1

Post autor: kluchol »

Witam,

pobieram sobie dokumenty w taki sposób:

Kod: Zaznacz cały

CDNHlmn.DokumentyHaMag Documents = (CDNHlmn.DokumentyHaMag)Session.CreateObject("CDN.DokumentyHaMag", null);
i potem pobieram sobie dane o dokumentach w pętli:

Kod: Zaznacz cały

foreach (CDNHlmn.IDokumentHaMag Document in Documents)
                { 
                .
                .
                .
                }
Czy istnieje możliwość na tym etapie:

Kod: Zaznacz cały

 CDNHlmn.DokumentyHaMag Documents = (CDNHlmn.DokumentyHaMag)Session.CreateObject("CDN.DokumentyHaMag", null);
Ograniczyć dokumenty np po dacie dodania?
Tak żebym nie musiał tego robić w pętli?

Pozdrawiam

taszek
Posty: 609
Rejestracja: 12 wrz 2012, 13:20
Rola: Administrator CDN XL
Wersja: 2016

Re: OPTIMA COM 2019.1.1

Post autor: taszek »

Ja tak pobieram po GIDNumerze, ale możesz pobierać również po dacie czy innym polu:

Kod: Zaznacz cały

CDNHlmn.DokumentyHaMag Documents = (CDNHlmn.DokumentyHaMag)Session.CreateObject( "CDN.DokumentyHaMag" ).Item("Trn_TrnID ="+ GID );
Pozdrawiam
Wojtek Cyrklewicz

abmelog
Posty: 1
Rejestracja: 14 maja 2019, 14:48
Rola: Inny
Wersja: 2016

Re: OPTIMA COM 2019.1.1

Post autor: abmelog »

Witam, podłączam się do tematu.
Korzystając z powyższego kodu natrafiłem na problem. Otóż chcę wyciągnąć sobie przez API Optimy listę wszystkich dokumentów MM.
Przy użyciu powyższego kodu i zmodyfikowaniu filtra otrzymuję poniższy błąd:
System.InvalidCastException: „Nie można rzutować obiektu modelu COM typu 'CDNHlmn.DokumentHaMagClass' na typ interfejsu 'CDNHlmn.DokumentyHaMag'. Ta operacja nie powiodła się, ponieważ wywołanie metody QueryInterface dla składnika modelu COM w celu uzyskania interfejsu o identyfikatorze IID '{9CED41D8-0453-49AD-AEA2-A8F8FAEB9325}' nie powiodło się z powodu następującego błędu: Taki interfejs nie jest obsługiwany. (Wyjątek od HRESULT: 0x80004002 (E_NOINTERFACE)).”
Poniżej fragment kodu:

Kod: Zaznacz cały

AdoSession Sesja = Login.CreateSession();
CDNHlmn.DokumentyHaMag Dokumenty = (CDNHlmn.DokumentyHaMag)Sesja.CreateObject("CDN.DokumentyHaMag").Item( "TrN_TypDokumentu=312");
Czy pomoże ktoś uporać się z tym problemem?

kluchol
Posty: 11
Rejestracja: 28 lut 2019, 10:18
Rola: Inny
Wersja: 2019

Re: OPTIMA COM 2019.1.1

Post autor: kluchol »

Cześć,

rozwiązałem sobie ten problem w trochę sposób inny ale działa, tzn.

W pierwszej kolejności pobieram listę dokumentów sql-em, a potem dla konkretnego Id pobieram sobie już z obiektów com, wycinek kodu tutaj:

Kod: Zaznacz cały

 log.Info("Integration found! Id: " + message.data.integration);
                CDNBase.AdoSession Session = Login.CreateSession();
                CDNHlmn.DokumentyHaMag Documents = (CDNHlmn.DokumentyHaMag)Session.CreateObject("CDN.DokumentyHaMag", null);
                string connectionString = Session.Connection.ConnectionString;
                dynamic test = Documents.Filter.Length;
                DateTime endDate = DateTime.Now.AddDays(-5);
                string endDateString = endDate.ToString("yyyy-MM-dd");
                int i = 0;            
                object recs;
                var connection = Session.Connection;
                string bufor = "";
                if (configOptima.import_document_only_in_bufor )
                {
                    bufor = "AND TrN_Bufor = 1";
                }
                log.Info(bufor);
                log.Info(connectionString);
                string query = "Select TrN_TrNID FROM CDN.TraNag Where TrN_TypDokumentu = " + configOptima.document_import_type + " " + bufor + " AND TrN_DataDok >= DATEADD(DAY, -5, GETDATE())";
                log.Info(query);
                var Execute = connection.Execute(query, out recs);
                log.Info("Orders Found: " + Execute.RecordCount);
                for (int j = 0; j < Execute.RecordCount; j++)
                   {
                    log.Info("Dokument found, (step1) dokid: " + Execute.Fields[0].Value);
                    CDNHlmn.IDokumentHaMag Document = (CDNHlmn.IDokumentHaMag)Documents["TrN_TrNID=" + Execute.Fields[0].Value]; 
                    log.Info("Dokument found, dokid: " + Execute.Fields[0].Value);
                    log.Info("Connection sgtring: " + connection.ConnectionString);
                    if (Document.TypDokumentu == configOptima.document_import_type && Document.DataDok >= endDate.Date)
                    {
Jak co to dopytuj.

ODPOWIEDZ