Jump to content

Wagner Landgraf

Members
  • Content Count

    92
  • Joined

  • Last visited

Everything posted by Wagner Landgraf

  1. Wagner Landgraf

    simple cloud storage options

    You can check myCloudData (https://www.myclouddata.net) from TMS Software.
  2. In the case of TMS Aurelius Nullable type, specifically, there are helper methods for you to use that do the job for you. It's TMappingExplorer.GetMemberValue and SetMemberValue. Here is some info: https://support.tmssoftware.com/t/how-to-get-a-property-by-its-name/7777/2 But in general, you do what @Attila Kovacs mentioned: get the whole record, modify its fields via RTTI, and then set the record back to the field/property. That's what Aurelius does.
  3. Wagner Landgraf

    How create a website whit Delhpi

    Excellent! I'm always pleased with people that see the positive side of things.
  4. Wagner Landgraf

    How create a website whit Delhpi

    Frontend: TMS Web Core (https://tmssoftware.com/web) Backend: TMS XData (https://tmssoftware.com/biz)
  5. Wagner Landgraf

    auto-generated REST APIs?

    I will not get into an architectural discussion or in a feature discussion, it's out of the scope of the topic. It's a tool that anyone can use if they want. It's not SQL SELECT, there is no injection, it's more secure. Yes, you can do complex authorization mechanisms. Finally, that is not "XData", but one of XData tools. If user wants, he can simply choose not to use it, and do a 15-tiered application without any client-side logic. I'm just answering the OP question.
  6. Wagner Landgraf

    Delphi and Parallels for Mac

    Hi, is there anyone here using Delphi with Mac using Parallels virtual machines? I've recently migrated from VMWare to Parallels - and very happy for it, it's noticeable faster. However, I'm having a small but annoying issue that didn't happen in VMWare: whenever I try to scroll the source code using the mouse scroll (trackpad, in this case), it goes too fast. It's interesting to note that when scrolling up, it works fine. When scrolling down, it goes too fast. That only happens in this virtual machine, only with Parallels, and only with Delphi - no other Windows applications behave like that. I have also know another person who uses it like that, and he has the exactly same problem. From some Parallels forum posts, it looks like it happens to other as well. Thus, I believe this happens to everyone using Delphi with Parallels, and I believe given the number of Delphi users here, some DelphiPraxis forum members might also be in the same situation. So I wonder, does it happen to you as well? If yes, have you found a workaround, or have you just accepted it as a fact of life? Some references: https://forum.parallels.com/threads/smooth-scrolling.346361/ https://forum.parallels.com/threads/trackpad-scrolling-is-too-fast-and-frequently-uncontrollable.346338/page-2 https://stackoverflow.com/questions/59163058/how-to-make-delphis-ide-scroll-correctly
  7. Wagner Landgraf

    Delphi and Parallels for Mac

    No luck here. Big Sur, Parallels 16.1.1, using external trackpad (or MacBook trackpad, doesn't matter), changed mouse and keyboard settings to auto-detect, or gaming, or no gaming, everything is always the same.
  8. Wagner Landgraf

    auto-generated REST APIs?

    TMS XData does that. These three videos show it in details: https://www.youtube.com/watch?v=AZs9e2DNXdI https://www.youtube.com/watch?v=e31Co9Fv3YY https://www.youtube.com/watch?v=QvgS8pjpfkk This has nothing to do with executing arbitrary SQL statements. It's regular REST endpoints. Regarding being 1:1 with underlying db system, in my opinion it depends. As someone mentioned here, you might need an "inner" use in which this is not a problem. Or, you might use it for simple entities like a list of countries or something like that. So for example use it for simple or non-critical entities, and then implement DTOs and specific business logic for more complex or critical business operations. Like anything, it's just a nice tool which is available. Use if it's helpful for you.
  9. Wagner Landgraf

    DPM Package Manager - Progress update

    Hi Vincent, That's excellent. I just could not find enough time to keep contributing as I'd wish, but I'm still interested in your project. Design-time packages is a must for me though, since almost all my libraries install design-time tools in the IDE. Looking forward to how DPM will solve it.
  10. Wagner Landgraf

    Records, Generics and RTTI meets FireDAC

    Until you start using it. You are actually adding one right now.
  11. Wagner Landgraf

    TestInsight 1.1.9.0 released

    Great, now tests are uniquely identified! Thank you, I guess I'm on the right path. Congrats for the great tool.
  12. Wagner Landgraf

    TestInsight 1.1.9.0 released

    Ok. Reading the code I think TI is just not prepared for it. In many places you consider the test name to be ClassName + TestName, as in: function GetFullQualifiedName(const test: ITest): string; begin Result := (test as TObject).ClassName + '.' + test.Name; end; Also, TTestInsightListener.StartSuite and EndSuite are not implemented, and I believe that's what would allow a tree-like structure in the IDE plugin. I also don't know how the plugin handles the information sent to it, but from what is available in TTestInsightResult and no StartSuite/EndSuite information I believe it's not trivial to show the results reflecting the original tree structure. Thanks for your help!
  13. Wagner Landgraf

    TestInsight 1.1.9.0 released

    I tried it again, I must be doing something wrong. This is what I get when I run it for the first time. Some warnings: And then remaining tests passed. The tests that are not replicated and grouped by database: And the tests that are supposed to be replicated and grouped by database: If I click "group by type" it doesn't help much: Finally, I must say that all tests were run in the first place. Note that what I do is to run the application with Ctrl+Shift+F9.
  14. Wagner Landgraf

    TestInsight 1.1.9.0 released

    The tests are organized more or less this way (never mind some unfriendly names): As you can see, there are several setups (NativeSQLite, FireDacMSSQL, etc.). For each of then, there is a test suite named "TTestBasicCriteria" for example, with several test methods. This is all setup dynamically by a code like this, which gathers all registered "Aurelius tests" and then create the proper DUnit tests based on it: // Wrap all registered tests into a single test setup for initial set up and final tear down } for Setup in AureliusDBSetups do begin testconfig := TTestConfig.Create(Setup); DBTest := CreateSuiteFromConfig(testConfig, Setup.Name); RegisterTest(DBTest); if Setup.RemoteDB then begin testConfig := TRemoteDBTestConfig.Create(Setup); DBTest := CreateSuiteFromConfig(testConfig, Setup.Name + ' - Remote'); RegisterTest(DBTest); end; if Setup.GenericDB then begin testConfig := TGenericDBTestConfig.Create(Setup); DBTest := CreateSuiteFromConfig(testConfig, Setup.Name + ' - Generic'); RegisterTest(DBTest); end; end; You can also see some of the test cases are not replicated among all databases, because it doesn't make sense - like TTestMemoryDataset, for example.
  15. Wagner Landgraf

    TestInsight 1.1.9.0 released

    Of course no one is forcing me! 🙂 It's just it's a nice tool with several benefits that I'd love to use. I will see what I will do. My case is different, I also use test inheritance when applicable but as I said, in my case I have hundreds of tests, spread over different TTestCase objects because it makes sense - logical grouping, different setup and teardown mechanisms, etc. Then all of those tests are grouped by decorators to work with different "Setups" - different databases, for example. So they are actually the same test, even double clicking won't solve because they will all point to the same source code.
  16. Wagner Landgraf

    TestInsight 1.1.9.0 released

    1. This is (almost) a showstopper for me, unless I'm not fully understanding or building my tests wrongly. The thing is TMS Aurelius for example has thousands and thousands of tests. Reason is tests are replicated in several scenarios: for MySQL, for SQL Server, for Oracle, using RemoteDB, not using RemoteDB, etc.. Thus information about hierarchy is a must to understand which tests failed in which situation (the test was a "SaveBlob", but was it with SQL Server or Firebird? Using RemoteDB? Etc.) Not sure if there is an alternative way to do so or TI was not built for such scenario? 2. Ok, I will check it again with more attention. 3. Ok, I will check it also, thanks a lot.
  17. Wagner Landgraf

    TestInsight 1.1.9.0 released

    Thanks @Stefan Glienke. I'm not sure if you prefer I open an issue, but I consider this more a discussion, so will ask it here first. I'm trying to use Test Insight with my tests as-is, but I'm having some issues which relates to my understanding of how it works. For example: 1. Hierarchy My tests have some hierarchical structure that are displayed in the DUnit GUI test runner. I manually use several test decorators to organize it, and sometimes I register test with dots in names to organize it. When using TestInsight, the results are not displayed in the same structure, but all test results are displayed in a "flat" layout. Is this known, intentional, or there is something I could do to improve it? 2. Loop I understand the tests keep running in a loop? Or at least I can't finalize the test application, which seems to keep running in background. Is this also the normal behavior? 3. Test selection I understand that I can select the tests to be executed, but only after one initial execution of all tests are performed. My tests take a lot of time to execute, so that's not a viable option. Is there a workaround to be able to select the tests to be executed before they are actually first executed? Thanks!
  18. Share here what you liked the most about 10.4 Sydney, be it new features or bug fixes you were waiting for. For issues and complains, use this topic: https://en.delphipraxis.net/topic/2885-your-rad-studio-104-sydney-issues/
  19. Wagner Landgraf

    Your RAD Studio 10.4 Sydney issues

    There you go: https://en.delphipraxis.net/topic/2887-you-rad-studio-104-sydney-appreciated-features-and-bug-fixes/
  20. Wagner Landgraf

    Your RAD Studio 10.4 Sydney issues

    Will there also be a topic for 10.4 Sydney appreciated new features and bugs fixed?
  21. Hi all, I'm having a hard type with RTTI info using runtime packages. It looks only related to TBytes type, but I'm not sure. In summary, I do a test like this: if TypeInfo1 = TypeInfo2 then Both TypeInfo1 and TypeInfo2 are PTypeInfo values. TypeInfo2 is retrieved from a TBytes variable declared in Unit1 which is included in Package1. TypeInfo2 is retrieved from a TBytes variable declared in Unit2 which is included in Package2. The test above returns false. I know this situation is typical and requires some checks to be sure it works. But I've been through all that I know, which are: 1. Make sure your application (exe) is compiled with "runtime packages" option checked. 2. Make sure Package1 and Package2 are included in the list of runtime packages of the application. 3. Make sure the type being tested is declared in a common package which is required (shared) by both Package1 and Package2. Since the type here is TBytes, there is no need for a shared/common package, and both Package1 and Package2 simply require rtl, which I believe is enough. Am I missing something obvious here? Does anyone have any hint which I might be looking for? This is Delphi 10.1. Berlin. Thanks in advance.
  22. Wagner Landgraf

    RTTI info for TBytes using runtime packages

    Indeed. Thanks all for your help!
  23. Wagner Landgraf

    RTTI info for TBytes using runtime packages

    Yes, I'm saying that I had it working considering both type info were equal. Same situation as this. The code in point here is JSON serialization. User pass one generic TValue (or an object with lots of properties) and I check the type of the TValue (or property) and serialize it accordingly. So I check if a type is TBytes and serialize it as base64-encoded. As far as I know, this works find with an app using runtime packages and TBytes, just in this application it doesn't. I guess. So as I said, instead of checking if the value being serialized has the same type info as TBytes, I would have to check if the type name is "TArray<System.byte>" or maybe check if it's an array of type byte. It's a valid solution, although still makes me uncomfortable that such issues might happen with other types.
  24. Wagner Landgraf

    RTTI info for TBytes using runtime packages

    Thanks @Stefan Glienke. That makes sense, even though I'm (almost) sure I had this working in other applications built with runtime (i.e., having TBytes being recognized as the same type from two different packages). The difference here is that this is an application from a customer and is a huge one - it's an ERP composed of hundreds of packages. If that's the case, I suppose there is no workaround using Delphi builtin types, and I would have to create my own type in my library. Or check for the type name instead of type info (which would be slower). In summary, a kludge...
  25. Wagner Landgraf

    RTTI info for TBytes using runtime packages

    @David Heffernan, thanks, I'm aware of that. The key here is that I don't know what else I'm supposed to do tomake sure that both modules are linking to rtl, as I checked everything I know of (listed above). @Remy Lebeau, I don't see any option "Enable with runtime packages" for packages. I believe it's implicit? I have added "rtl" to the package requires list, and also to the packages needed by the application. I believe this is enough, but obviously something else is missing.
×