Wir freuen uns, die Version 1.0.2 des ecmind_blue_client freigeben zu dürfen.
Diese Release Notes beinhalten auch die Änderungen der Version 1.0.1.
ecmind_blue_client 1.0.2
Neu
update_os_event(is_js=...)wechselt die Skriptsprache eines bestehenden Events in beide
Richtungen. Die Dokumentation hat bisher angegeben, die Sprache sei nach dem Anlegen
unveränderlich (#16163, 1.0.2).calculate_digest()undobjects_by_digest()auf beiden DMS-Namespaces. Ersteres bildet
den enaio-Dokument-Digest lokal aus den Dateien, letzteres fragt über
dms.GetObjectsByDigest, welche archivierten Dokumente ihn tragen (#16111, 1.0.2a2).with_table_fields()auf allen vier Query-Buildern fordert die Tabellenfelder des Modells
mit der Trefferliste an, statt einen Job pro Objekt zu brauchen (#15926, 1.0.2a1).
Geändert
- Subscript-Zugriff auf Modelle verhält sich wie Attributzugriff, ein unbekannter Name wirft
KeyError(#15929, 1.0.2a1). in_()undnot_in()nehmen die Werte als ein Iterable entgegen (#15930, 1.0.2a1).- Alle ID-Parameter von
ecm.dmsakzeptieren einen numerischen String (#15931, 1.0.2a1). - LOL-Tabellenzeilen sind typisiert und tragen ihre
row_id(#15926, 1.0.2a1).
Entfernt
impersonate(user_id=...). Der Kontextwechsel über die numerische ID wurde von enaio 12.0
nie ausgewertet. Der Parameter kommt am Server an, der Job läuft aber ohne Fehler weiter
unter dem angemeldeten Benutzer, mit dessen Rechten und dessen GUID als Eigentümer neu
angelegter Objekte. Die Varianten über Name und GUID sind nicht betroffen. Aufrufe mit
user_idwerfen jetztTypeError(#16165, 1.0.2).
Behoben
- Angelegte Serverskript-Events wurden immer als VBScript gespeichert, weil die Bibliothek
den ParameterIsJSvondms.CreateOsEventnicht gesendet hat. Bei Event-Typen, die
immer JavaScript sind, also Webclient-Events und den Libraries 10005 und 10006, erschien
das Event in der Administration, kam ausget_os_events()zurück und löste nie aus. Neu
ist der Parameteris_jsaufcreate_os_event()(#16163, 1.0.2). - Konten, die enaio nach zu vielen Fehlanmeldungen gesperrt hat, wurden als nicht gesperrt
gemeldet. Das Serverattributlockedist dreiwertig: 0 nicht gesperrt, 1 administrativ
gesperrt, 2 nach Fehlanmeldungen gesperrt; geprüft wurde auf Gleichheit mit 1.locked
ist jetzt bei 1 und 2 wahr, das neuelocked_causemit dem EnumECMUserLockCausenennt
die Ursache.update_user()schreibt eine vorhandene Ursache unverändert zurück, statt
sie zu überschreiben (#16166, 1.0.2). refresh_server_events()schlug bei jedem Aufruf fehl, weiladm.ServerEventsRefresh
einen ParameterFlagsverlangt, den die Bibliothek nicht gesendet hat. Der Server
antwortete mit-1043332470. Betroffen war der Aufruf, der andere Event-Änderungen ohne
Serverneustart wirksam macht (#16164, 1.0.2).- TLS-Verbindungen scheiterten unter Python 3.12 mit
CERTIFICATE_VERIFY_FAILED, ab 3.13
nicht. Ursache war ein Stdlib-Default, den es erst ab 3.13 gibt. Der CI-Unittest-Job läuft
jetzt auf 3.12 (#16117, 1.0.2a2). file_cache_byte_limiterreicht die RPC-Schicht aus beiden Pool-Clients (#16019, 1.0.2a1).- Tabellenfelder mit abweichendem
internal_namebehalten ihre Zeilen (#16024, 1.0.2a1). stream_hol_objectsbindet nur an<Archive>-Elemente der obersten Ebene
(#16025, 1.0.2a1).- Der Workflow-Modellparser liest Variablen nur von der Prozessebene (#16026, 1.0.2a1).
- Direkt konstruierte Tabellenzeilen teilen sich kein gemeinsames Dict mehr
(#15927, 1.0.2a1). - Per Annotation deklarierte Modellfelder funktionieren unter Python 3.14 wieder
(#16014, 1.0.2a1). <Params>wird vor<Archive>geschrieben, parametrisierte Bedingungen greifen wieder
(#16010, 1.0.2a1).- Die mitgelieferten XSDs beschreiben, was der Server tatsächlich sendet (#16011, 1.0.2a1).
- Der Async-Pool erkennt einen Verbindungsverlust sofort (#15859, 1.0.2a1).
ecmind_blue_client 1.0.1
Der Changelog der 1.0.1 ist nicht nach Alphas aufgeteilt, deshalb steht hier durchgehend
1.0.1 und keine feinere Angabe.
Neu
- Namespace
ecm.portfoliofür enaio-Mappen:search(),get(),create(),delete(),
add_objects(),remove_objects(). Ersetzt das Zusatzpaket
ecmind-blue-client-portfolio. ecm.security.check_user_account()prüft überkrn.CheckUserAccount, ob ein Benutzer
sich anmelden kann,check_password_complexity()prüft ein Passwort gegen die
Serverregel.- Verbindungspool:
keepalive_intervalauf beiden Pool-Clients, dazuclose()bzw.
aclose()und Verwendung als Context-Manager. - Dokumentvarianten:
ecm.dms.set_active_variant(),variants(),active_variant(),
obj.system.active_variant. ecm.system.delete_user_data()undget_user_data_names()(#15865).result_as_file()auf den Query-Buildern sowie die Streaming-Parserstream_lol_rows
undstream_hol_objectsfür grosse Trefferlisten.
Geändert
ECMUserAttributes.last_modifiedheisstprofile_changedund ist einbool. Das
XML-Attributgeaendertist ein 0/1-Kennzeichen, kein Zeitstempel.ecm.dms.undo_checkout()sendetFlags=1als Default, hebt einen Checkout also auch von
einer anderen Station auf. Das alte Verhalten überallow_other_station=False.ecm.dms.upsert(): ein Tabellenfeld zu leeren verlangt.replace_table_fields(True)und
wirft sonstValueError.- Query-Bedingungen sind gegen den deklarierten Feldtyp typisiert (#15868).
- Zeitstempel hängen nicht mehr von der Zeitzone des Clients ab. Jede Epoch-Umrechnung läuft
über die Zeitzone der Installation, lesend wie schreibend.
Behoben
obj.system.rightsliefert die tatsächlichen Berechtigungen. Vorher wurden pauschal alle
Rechte gemeldet (#15860).and,orundnotauf einer Query-Bedingung werfen, statt einen Operanden still zu
verwerfen (#15868).ecm.dms.update()kann ein Tabellenfeld wieder leeren (#15826).- Ein abgebrochenes
NotificationSubscription.stop()schliesst den Callback-Kanal wieder
(#15827). ECMSystemRolebenennt acht bisher undokumentierte Systemrollen.dms.GetResultListunddms.GetObjectDetailswerden inline statt über eine Antwortdatei
aufgerufen, das Paging parst mititerparse. Spitzenspeicher beim Paging 222 MB auf
1,2 MB.
Umstieg
Wer impersonate(user_id=...) verwendet, muss auf impersonate(username=...) oder
impersonate(user_guid=...) wechseln.
Vollständiger Changelog und Migrationshinweise: https://ecmind-blue-client.docs.ecmind.ch