Skip to main content

Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings

Product Ideas

Shape the future of FME with your ideas

Open ideas have been reviewed by our Customer Success team and are open for commenting and voting.

  • Open
_fabian_
Contributor
_fabian_Contributor

Add Support for OData Version 4.01Open

The OData Reader currently fails with the error “The version '4.01' is not valid.” when you try to retrieve data from an OData Version 4.01 Endpoint. Full Log: Creating reader for format: ODataTrying to find a PYTHON plugin for reader named `ODATA'The workspace does not contain user Python. FME will attempt to use a Python 3.13+ interpreterUsing Python interpreter from `C:\Program Files\FME\fmepython313\python313.dll' with PYTHONHOME `C:\Program Files\FME\fmepython313'Python version 3.13 loaded successfullyLoaded Python module `odata' from file `C:\Program Files\FME\python\fme-plugins-py313.zip\odata\__init__.pyc'DEBUG: Configured logging for ODataReaderDEBUG: ODataCommon __init__()DEBUG: Inspecting mapping fileDEBUG: Feature Geometry Priority: 'none'DEBUG: Feature Type(s): 'ProductDescription,Product'OData Reader: Performing client-side pagination with 1000 features per requestDEBUG: DEF line: ODATA_2_DEF ProductDescription odata_type odata_none FILTER_QUERY Language eq 'DE' ORDER_BY_QUERY EXPAND_QUERY fme_attribute_reading defined Product string ProductDescription stringDEBUG: Attributes: Product ProductDescriptionDEBUG: Options: odata_type FILTER_QUERY ORDER_BY_QUERY EXPAND_QUERY fme_attribute_readingDEBUG: DEF line: ODATA_2_DEF Product odata_type odata_none FILTER_QUERY ProductGroup eq 'ZS03' and IsMarkedForDeletion eq false ORDER_BY_QUERY EXPAND_QUERY fme_attribute_reading defined Product stringDEBUG: Attributes: ProductDEBUG: Options: odata_type FILTER_QUERY ORDER_BY_QUERY EXPAND_QUERY fme_attribute_readingRetrieving connection 'SAP S4 Test'Retrieving connection 'SAP S4 Test'Retrieving web service 'HTTP Authentication'ODATA reader: Creating bulk features from individual featuresUsing MultiWriter with keyword `PRIMARY_DEST' to output data (ID_ATTRIBUTE is `multi_writer_id')Writer output will be ordered by value of multi_writer_idLoaded module 'LogCount_func' from file 'C:\Program Files\FME\plugins\LogCount_func.dll'FME API version of module 'LogCount_func' matches current internal version (4.0 20240722)DEBUG: urllib3.connectionpool Starting new HTTPS connection (1): my123486.s4hana.cloud.sap:443DEBUG: http.client send: b'GET /sap/opu/odata4/sap/api_product/srvd_a2x/sap/product/0002/ HTTP/1.1\r\nHost: my123486.s4hana.cloud.sap\r\nUser-Agent: FME/2025.7.52.25241 python-requests/2.32.3\r\nAccept-Encoding: gzip, deflate\r\nAccept: application/xml,application/json\r\nConnection: keep-alive\r\nOData-MaxVersion: 4.0\r\nAuthorization: Basic XXX\r\n\r\n'DEBUG: http.client reply: 'HTTP/1.1 200 OK\r\n'DEBUG: http.client header: set-cookie: sap-usercontext=sap-client=100; path=/DEBUG: http.client header: set-cookie: SAP_SESSIONID_Z5R_100=XXX%3d; path=/; secure; HttpOnlyDEBUG: http.client header: content-type: application/json;odata.metadata=minimal;charset=utf-8DEBUG: http.client header: content-length: 488DEBUG: http.client header: sap-authenticated: trueDEBUG: http.client header: odata-version: 4.0DEBUG: http.client header: cache-control: max-age=0DEBUG: http.client header: sap-server: trueDEBUG: http.client header: sap-perf-fesrec: 59482.000000DEBUG: http.client header: content-encoding: gzipDEBUG: http.client header: x-content-type-options: nosniffDEBUG: http.client header: strict-transport-security: max-age=31536000; includeSubDomainsDEBUG: http.client header: x-xss-protection: 1; mode=blockDEBUG: http.client header: sap-passport-component: noneDEBUG: urllib3.connectionpool https://my123486.s4hana.cloud.sap:443 "GET /sap/opu/odata4/sap/api_product/srvd_a2x/sap/product/0002/ HTTP/1.1" 200 488DEBUG: URL with appended params: https://my123486.s4hana.cloud.sap/sap/opu/odata4/sap/api_product/srvd_a2x/sap/product/0002/DEBUG: http.client send: b'GET /sap/opu/odata4/sap/api_product/srvd_a2x/sap/product/0002/$metadata HTTP/1.1\r\nHost: my123486.s4hana.cloud.sap\r\nUser-Agent: FME/2025.7.52.25241 python-requests/2.32.3\r\nAccept-Encoding: gzip, deflate\r\nAccept: */*\r\nConnection: keep-alive\r\nOData-MaxVersion: 4.0\r\nCookie: sap-usercontext=sap-client=100; SAP_SESSIONID_Z5R_100=XXX%3d\r\nAuthorization: Basic XXX\r\n\r\n'DEBUG: http.client reply: 'HTTP/1.1 400 Bad Request\r\n'DEBUG: http.client header: content-type: application/json;odata.metadata=minimal;charset=utf-8DEBUG: http.client header: content-length: 775DEBUG: http.client header: sap-authenticated: trueDEBUG: http.client header: odata-version: 4.0DEBUG: http.client header: etag: W/"20250720003254"DEBUG: http.client header: cache-control: max-age=0DEBUG: http.client header: content-language: enDEBUG: http.client header: sap-server: trueDEBUG: http.client header: sap-perf-fesrec: 198967.000000DEBUG: http.client header: x-content-type-options: nosniffDEBUG: http.client header: strict-transport-security: max-age=31536000; includeSubDomainsDEBUG: http.client header: x-xss-protection: 1; mode=blockDEBUG: http.client header: sap-passport-component: noneDEBUG: urllib3.connectionpool https://my123486.s4hana.cloud.sap:443 "GET /sap/opu/odata4/sap/api_product/srvd_a2x/sap/product/0002/$metadata HTTP/1.1" 400 775DEBUG: URL with appended params: https://my123486.s4hana.cloud.sap/sap/opu/odata4/sap/api_product/srvd_a2x/sap/product/0002/$metadataOData Reader: Client error was received: '400'. The error message was: 'The version '4.01' is not valid.'(D:\code\fme\source\engine\plugins\python\fme-odata\src\odata\ODataCommon.py:77) doRequest(C:\Program Files\FME\python\requests\models.py:1024) raise_for_status raise HTTPError(http_error_msg, response=self)(D:\code\fme\source\engine\plugins\python\fme-odata\src\odata\ODataReader.py:534) read(D:\code\fme\source\engine\plugins\python\fme-odata\src\odata\ODataReader.py:541) _readFeatureGenerator(D:\code\fme\source\engine\plugins\python\fme-odata\src\odata\ODataReader.py:361) _fetchMetadataForSchema(D:\code\fme\source\engine\plugins\python\fme-odata\src\odata\ODataCommon.py:129) doRequestPython Exception <ODataReaderException>: FMEException: 929906: OData Reader: Client error was received: '400'. The error message was: 'The version '4.01' is not valid.'An error has occurred. Check the logfile above for details(D:\code\fme\source\engine\core\engine\readrimp.cpp:1102) class StatusInfo __cdecl STFReaderImp::getNextFeaturesFromReader(bool)(D:\code\fme\source\engine\core\engine\readrimp.cpp:1034) class StatusInfo __cdecl STFReaderImp::getTaggedFeature(class STFFeature *&)(D:\code\fme\source\engine\core\engine\readrimp.cpp:1116) class StatusInfo __cdecl STFReaderImp::getNextFeaturesFromReader(bool)(D:\code\fme\source\engine\core\engine\readrimp.cpp:1034) class StatusInfo __cdecl STFReaderImp::getTaggedFeature(class STFFeature *&)(D:\code\fme\source\engine\core\kernel\simptran.cpp:664) class StatusInfo __cdecl STFSimpleTranslator::convert(void)(D:\code\fme\source\engine\core\engine\stftrans.cpp:128) class StatusInfo __cdecl STFTranslator::translate(void)Translation FAILED with 2 error(s) and 59 warning(s) (0 feature(s) output)FME Session Duration: 1.5 seconds. (CPU: 0.6s user, 0.4s system)END - ProcessID: 27860, peak process memory usage: 90180 kB, current process memory usage: 72884 kBERROR : An error has occurred. Check the logfile above for detailsERROR : (D:\code\fme\source\engine\core\engine\readrimp.cpp:1102) class StatusInfo __cdecl STFReaderImp::getNextFeaturesFromReader(bool)ERROR : (D:\code\fme\source\engine\core\engine\readrimp.cpp:1034) class StatusInfo __cdecl STFReaderImp::getTaggedFeature(class STFFeature *&)ERROR : (D:\code\fme\source\engine\core\engine\readrimp.cpp:1116) class StatusInfo __cdecl STFReaderImp::getNextFeaturesFromReader(bool)ERROR : (D:\code\fme\source\engine\core\engine\readrimp.cpp:1034) class StatusInfo __cdecl STFReaderImp::getTaggedFeature(class STFFeature *&)ERROR : (D:\code\fme\source\engine\core\kernel\simptran.cpp:664) class StatusInfo __cdecl STFSimpleTranslator::convert(void)ERROR : (D:\code\fme\source\engine\core\engine\stftrans.cpp:128) class StatusInfo __cdecl STFTranslator::translate(void)ERROR : (D:\code\fme\source\engine\core\kernel\fmetran.cpp:934) class StatusInfo __cdecl FMETranslator::translate(class stk::ex::UStringArray<0>,bool &,bool,const class std::function<bool __cdecl(class ObsoleteString &)> &,bool) It would be great, if the OData Reader would add support for OData 4.01 in the future.

jeroen
Contributor
jeroenContributor

Allow multiple transformer parameter dialogs to be open simultaneously within the same workspace.New

This would significantly improve productivity and reduce error rates in (complex) workflows. For exaple; I am working on a large project with many Tester transformers that need to be consolidated into central TestFilter logic, reused in multiple places. Right now, I have to open and close each Tester one at a time just to transfer conditions. This is a repetitive and error prone process that interrupts focus and introduces copy paste mistakes. Side by side comparison simply is not possible withing just one workspace. Being able to open two or more parameter windows at once would make this deterministic and efficient. It would also help with verifying consistency across transformers, refactoring expressions, and migrating logic in large scale workspaces. These are not edge cases. Any user working with complex conditionals or multi stage filtering encounters this problem. Yes, I can open a second Workbench and load a copy of the workspace. But that is just a workaround, not a solution. It increases memory usage, risks of editing the wrong file, need to make a copy and introduces friction into something that should be trivial. I found this older idea: It was merged into: But that is a different use case. Batch editing is about applying the same change across multiple components. This request is about opening different transformers side by side for comparison, manual transfer, and accuracy. It is not about replication. It is about visibility, context and (quality) control. Other complex tools such as ETL platforms and IDEs already support multi dialog workflows. FME's single dialog model limits advanced users. This feature would benefit anyone working with layered logic, often copies settings/logic/stuff around and would reduce load caused by user errors from repeated manual operations. Something like this: If there are technical limitations, the second window could be read or copy only. That would still address the core problem: parallel access to parameters, logic, code and more within the same workspace. Ideally, two-way copy should be supported, but even limited access would help. Alternatively, allow the Parameter Editor panel and the double-click transformer dialog to show different transformers at the same time, so they can be used in parallel instead of always showing the same selection. Even if this feature were only available for a handful of transformers or limited to opening multiple instances of the same transformer group type, it would still be a meaningful improvement. Or allowing just two dialogs or a master follower model where the second window depends on the first so that closing the first (typically the one you intend to edit) also closes the second (used for reference) would already provide significant value.