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
Post
autor: kluchol » 28 lut 2019, 14:10
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
Post
autor: taszek » 04 mar 2019, 19:30
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
Post
autor: abmelog » 15 maja 2019, 08:41
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
Post
autor: kluchol » 15 maja 2019, 12:30
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.