Skocz do zawartości

Jerzy Dudra

InsERT
  • Liczba zawartości

    302
  • Rejestracja

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Zawartość dodana przez Jerzy Dudra

  1. Jeżeli podmiot ma 'własne binaria' (znacznik w kolumnie binaria w programie serwisowym), to znaczy, że podmiot ma zmodyfikowany model danych (własna wersja dll'ki InsERT.Moria.ModelDanych.dll). Taka modyfikacja powstaje, gdy w podmiocie zdefiniowano pola własne w wersji 1. W rozwiązaniach korzystających z takiej bazy należy 'referencjonować' się do dll'ki InsERT.Moria.ModelDanych.dll z tego podmiotu, a nie tej z SDK.
  2. W SDK w dokumencie InsERT.nexo.Sfera.chm w Zarządzanie rozwiązaniem | Instalacja opisano jak wgrywać pakiety z rozwiązaniem własnym. Tworzenie pakietu własnego opisano w SDK, w dokumecie Wdrazamy_rozwiazanie_dla_nexo_PRO_wykorzystujace_Sfere_nexo.pdf (rozdział 1). Dokument ten bazuje na treści dokumentu Tworzymy_nowe_rozwiazanie_dla_Sfery_nexo_w_MS_Visual_Studio_2017.pdf, w którym opisano ciekawy sposób tworzenia rozwiązania własnego.
  3. Teoretycznie metoda DanePolaczenia.Jawnie(..) nie zwraca nulla. Powinna zwrócić obiekt DanePolaczenia lub rzucić wyjątkiem. Czy mógłby Pan napisać na jakich systemach operacyjnych, wersjach serwera sql problem występuje? Czy serwer sql wskazany w parametrach wywołania metody jest na tej samej maszynie czy na innej?
  4. Czy na "problematycznych" komputerach zarejestrował Pan wyjątki przy wywołaniu metody DanePolaczenia.Jawne() ? Czy na komputerach, z którymi jest problem, zainstalowano nexo? Jeżeli tak, to czy nexo łączy się z bazą wskazaną w wywołaniu powyższej metody?
  5. Czy Pani program często tworzy uchwyty do sfery? Czy ten błąd pojawia się przy pierwszym wykonaniu kodu, który Pani pokazała, czy raczej przy kolejnych? Której wersji nexo Pani używa?
  6. Problem taki pojawia się, gdy w lokalizacji rozwiązania sferycznego nie ma pliku xsd.pak. Do tego pliku nie ma bezpośredniego odwołania (referencja) w bibliotekach nexo i kompilator nie kopiuje go do folderu wynikowego. Można skopiować ten plik (i jeszcze parę innych) z folderu bin (z SDK) do folderu, do którego kompilowane jest Pani rozwiązanie. W dokumentacji SDK (w Tworzymy_nowe_rozwiazanie_dla_Sfery_nexo_w_MS_Visual_Studio_2017.pdf Krok 5. Budowanie i uruchamianie (sprytnie)) opisano, jak można obejść tę niedogodność, zmieniając katalog, do którego kompilowane jest rozwiązanie sferyczne).
  7. Wyłączenie FS jest trochę bardziej kłopotliwe niż włączanie. Udało mi się usunąć wykonując czynność analogiczne jak przy dodawaniu, tylko w odwrotnej kolejności Jeżeli FS dodawano wg instrukcji z SDK to odwrotną procedurę można przeprowadzić poniższym skryptem. Należy pamiętać o przetestowaniu tego na kopii roboczej Należy skorygować nazwy tabel i baz danych I jeszcze raz pamiętać o archiwum przed wykonaniem operacji na bazie docelowej /* Odkręcanie FS na poziomie tabeli */ -- -- tutaj przykład dla tabeli [ModelDanychContainer].[ZawartosciDokumentow] -- baza danych nazywa się Nexo_ECP -- jest to o tle istotne, że nazwa ta pojawia się przy usuwaniu grup -- filesreamowych i przy "porządkowaniu" tablei -- grupa filesteramowa nazywa się [nexo_ECP.fst] -- /* Backup (stare pole z FS)*/ EXEC sp_rename '[ModelDanychContainer].[ZawartosciDokumentow].[Dane]', 'DaneBak', 'COLUMN'; GO /* Nowe pole (bez FS)*/ ALTER TABLE [ModelDanychContainer].[ZawartosciDokumentow] ADD [Dane] [varbinary](max) NULL GO /* Przepisanie wartości do „nowej” struktury (bez FS)*/ UPDATE ModelDanychContainer.ZawartosciDokumentow SET Dane = DaneBak GO /* usunięcie „niepotrzebnej” już kolumny */ ALTER TABLE [ModelDanychContainer].[ZawartosciDokumentow] DROP COLUMN DaneBak GO /* poniższy zabieg ma na celu usuniecie powiązań z grupą FS, bo dodawanie FS dodaje takowe */ /* usunięcie i utworzenie PK_ZawartosciDokumentow*/ ALTER TABLE [ModelDanychContainer].[ZawartosciDokumentow] DROP CONSTRAINT [PK_ZawartosciDokumentow] WITH ( ONLINE = OFF ) GO ALTER TABLE [ModelDanychContainer].[ZawartosciDokumentow] ADD CONSTRAINT [PK_ZawartosciDokumentow] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] GO ALTER TABLE [ModelDanychContainer].[ZawartosciDokumentow] SET (FILESTREAM_ON = "NULL") ALTER DATABASE [Nexo_ECP] REMOVE FILE [nexo_ECP.fst] GO ALTER DATABASE [Nexo_ECP] REMOVE FILEGROUP [FileStreamGroup] GO /* porządkowanie */ DBCC CLEANTABLE (Nexo_ECP,'[ModelDanychContainer].[ZawartosciDokumentow]', 512) GO /* Odbudowa indeksów */ ALTER INDEX ALL ON [ModelDanychContainer].[ZawartosciDokumentow] REBUILD; GO
  8. Faktycznie jest problem z dynamicznymi sql'ami, gdy dynamicznie generowana jest struktura wyniku zapytania. Wynika to z tego, że na potrzeby generowania kolumn, wykonywane jest zapytanie zwracające strukturę, które może zachowywać się inaczej niż "pełne zapytanie". Podyktowane to było względami wydajnościowymi. W poniższym przykładzie widać, że instrukcja IF działa w trybie "pytania o strukturę" inaczej niż instrukcja CASE. DECLARE @sql NVARCHAR(max) DECLARE @lineFromIF NVARCHAR(500) DECLARE @lineFromCASE NVARCHAR(500) DECLARE @wajcha INT = 1 IF @wajcha=1 BEGIN set @lineFromIF = N', ''IF pierwsza'' as [IF Pierwsza]' END ELSE IF @wajcha=2 BEGIN set @lineFromIF = N', ''IF druga'' as [IF Druga]' END ELSE BEGIN set @lineFromIF = N', ''IF trzecia'' as [IF Trzecia]' END set @lineFromCASE = N', ' + CASE WHEN @wajcha = 1 THEN N'''CASE Pierwsza'' as [CASE Pierwsza]' WHEN @wajcha = 2 THEN N'''CASE Druga'' as [CASE Druga]' ELSE N'''CASE Trzecia'' as [CASE Trzecia]' END set @sql = N'SELECT Id,Symbol, Nazwa ' + @lineFromIF + @lineFromCASE + N' FROM ModelDanychContainer.Asortymenty' PRINT @sql EXEC sp_executesql @sql; Postaramy się jakoś zaadresować ten problem, ale na teraz nie widzę eleganckiego rozwiązania tego problemu.
  9. W Raporcie własnym Linq można użyć funkcji: System.Data.Entity.DbFunctions.DiffDays(..) w treści zapytania wygląda to np. tak: source .Select((Rozrachunek r) => new Wynik { Id = r.Id, DataUtworzenia= r.DataPowstania, Dni = System.Data.Entity.DbFunctions.DiffDays(DateTime.Today,r.DataPowstania), });
  10. Delphi potrafi skorzystać z komponentów COM. Można zrobić rozwiązanie pomostowe, udostępniające potrzebne w Deplhi funkcje jako elementy COM. Taki "pomost" to biblioteka .net z flagą COM-Visible (VisualStudio | Ustawienia projektu | Application | Assemby information | COM-Visible). W rozwiązaniu należy zdefiniować interface, którym będziemy się posługiwać "COMowo" z zewnątrz (np. z Delphi) Po stronie .net mogłoby to być coś takiego: namespace nexoAPI { public interface IAkcjaNexo { void DodajKlienta(string symbol, string nazwa, string nip); } public class AkcjaNexo : IAkcjaNexo { public void DodajKlienta(string symbol, string nazwa, string nip) { var fabryka = FabrykaUchwytow.UtworzFabryke(); using (Uchwyt u = fabryka.Utworz()) { // akcja na sferze } } } } Rozwiązanie takie należy zarejestrować (polecenie regasm.exe); Wtedy w językach skryptowych można utworzyć obiekt klasy AkcjaNexo i używać metod z interfejsu IAkcjaNexo.
  11. Jak pisałem wcześniej, nowe API do dodawania zdjęć pojawi się w jednej z najbliższych wersji. Rozwiązanie opisane tutaj: również powinno zadziałać. using InsERT.Mox.BibliotekaDokumentow.ObiektyBiznesowe; ... public void DodajZdjecie(IAsortyment towar, string nazwa, string typ, byte[] content) { var mediaDokumenty = towar.MediaDokumenty(); _ = mediaDokumenty.ImportujMediaDokument(content, nazwa, typ); return towar; }
  12. Zdjęcia asortymentu (zawartość) są przechowywane w tabeli ModelDanychContainer.ZawartosciDokumentow Tabela ta zawiera kolumnę Dane typu varbinary(max), i tam właśnie zapisywana jest zawartość obrazka. Brak tej kolumny może oznaczać uszkodzenie bazy danych.
  13. Problem prawdopodobnie wynika z tego (wnioskuje z tego co Pan napisał), że aplikacja, która korzysta z okienek nexo ConnectionManager.DostepDoUI = True musi spełniać pewne wymaganie. Tutaj prawdopodobnie chodzi o to, że klasa aplikacji nie dziedziczy po AplikacjaWpf W dokumentacji jest to opisane np. tutaj:
  14. API do biblioteki załączników jest i można go użyć do dodania dowolnych plików np. obrazków. to towarów. Gdy pojawi się API do zdjęć, będzie można napisać rozwiązanie, które "przepisze" obrazki z biblioteki załączników do zdjęć towarów. Być może biblioteka załączników okaże się wystarczająco dobra dla Pana wdrożenia.
  15. Obecnie nie ma wsparcia dla "masowego upload'u" zdjęć. Pracujemy nad nim, jak już wcześniej wspominałem. Odczyt jest dostępny od początku bo potrzebny był w nexo.
  16. Niestety dostęp sferyczny do zdjęć nie jest obecnie obsługiwany. Taka możliwość pojawi się w jednej z najbliższych wersji.
  17. Opisana przez Pana procedura wygląda prawidłowo. Jeżeli kopiował Pan pliki z folderu, którego używa nexo (tak jak Pan to opisał) to plik InsERT.Moria.Security.Core.dll raczej jest tam gdzie trzeba. Plik InsERT.Moria.Security.Core.dll powinien być tam gdzie binaria nexo (nie w folderze x86). Czy rozważał Pan wdrożenie rozwiązania poprzez pakiet. Takie rozwiązanie umieszcza aplikację w folderze z binariami nexo. W SDK opisano jak utworzyć i wdrożyć pakiet z rozwiązaniem własnym (Wdrazamy_rozwiazanie_dla_nexo_PRO_wykorzystujace_Sfere_nexo.pdf, Tworzymy_nowe_rozwiazanie_dla_Sfery_nexo_w_MS_Visual_Studio_2017.pdf )
  18. Jeżeli rozwiązanie jest wdrażane przez kopiowanie binariów z SDK, to plik InsERT.Moria.Security.Core.dl (z podkatalogu x86) powinien być skopiowany do katalogu z binariami SDK.
  19. Problem który występuje w Pana rozwiązaniu, postaramy się rozwiązać. Nie mogę jednak obiecać, że do najbliższej wersji.
  20. Potwierdzam problem. Doraźnie można zastąpić tabelę tymczasową "zwykłą" tabelą, którą w treści raportu przed wyliczeniem można czyścić, np. jakoś tak: Tworzenie tabeli roboczej (np. w Management Studio) CREATE TABLE dbo.RoboczaTabelaRaportu ( ID INT NOT NULL, Tekst NVARCHAR(50), ) i w raporcie: -- "Czyszczenie" tabeli roboczej TRUNCATE TABLE dbo.RoboczaTabelaRaportu -- Wypełnianie INSERT INTO RoboczaTabelaRaportu VALUES(1, 'A') INSERT INTO RoboczaTabelaRaportu VALUES(2, 'B') INSERT INTO RoboczaTabelaRaportu VALUES(3, 'C') -- Zapytanie SELECT * FROM dbo.RoboczaTabelaRaportu Problem z tabelą tymczasową wynika z tego, że raport SQL przed uruchomieniem sprawdza strukturę zapytania, bez wykonywania go (używa flagi SET FMTONLY ON), co powoduje, że tabela tymczasowa nie powstaje. Stąd komunikat błędu. Można rozważyć również zastąpienie tabeli tymczasowej zmienną tabelaryczną. Zapytanie w raporcie mogło by wyglądać tak: DECLARE @MyT TABLE ( ID INT NOT NULL, Tekst NVARCHAR(50) ) ; INSERT INTO @MyT VALUES(1, 'A') INSERT INTO @MyT VALUES(2, 'B') INSERT INTO @MyT VALUES(3, 'C') SELECT * FROM @MyT
  21. Zanotowałem sugestię, postaramy się coś z tym zrobić..
  22. Sfera nie udostępnia takiej funkcjonalności (dostęp do danych z GUS). Obecnie nie jest planowane dodanie do Sfery takiej funkcjonalności. W chwili obecnej jedynym rozwiązaniem jest samodzielne skorzystanie z serwisu GUS. Dokumentację na ten temat można znaleźć np. tutaj: https://dane.gov.pl/dataset/544,dostep-do-danych-rejestrowych-regon-poprzez-usuge-sieciowa-interfejsy-api/resource/16458/table
  23. Przepraszam za zwłoką (nie zauważyłem tego posta). Prawdopodobnie Sfera nie może znaleźć pliku xsd.pak, który jest w SDK.
×
×
  • Dodaj nową pozycję...