{"id":7118,"date":"2020-05-08T14:19:06","date_gmt":"2020-05-08T14:19:06","guid":{"rendered":"https:\/\/www.barnsten.com\/?p=7118"},"modified":"2020-05-08T14:24:27","modified_gmt":"2020-05-08T14:24:27","slug":"benutzerdefinierte-verwaltete-datensatze-in-delphi-10-4","status":"publish","type":"post","link":"https:\/\/www.barnsten.com\/de\/custom-managed-records-coming-to-delphi-10-4\/","title":{"rendered":"Benutzerdefinierte verwaltete Datens\u00e4tze in Delphi 10.4"},"content":{"rendered":"<h6 class=\"post-title\">Blog post by Marco Cant\u00f9<\/h6>\n<p class=\"post-subtitle\">The coming 10.4 version of RAD Studio including an exciting new feature for the Delphi language, the ability to have records with custom initialization, finalization and assignment code.<\/p>\n<hr \/>\n<div class=\"post-content\">\n<p>&nbsp;<\/p>\n<h3>What is a Managed Record in Delphi?<\/h3>\n<p>Records in Delphi can have fields of any data type. When a record has plain (non-managed) fields, like numeric or other enumerated values there isn\u2019t much to do for the compiler. Creating and disposing the record consists of allocating memory or getting rid of the memory location. (Notice that by default Delphi does not zero-initialize records.)<\/p>\n<p>If a record has a field of a type managed by the compiler (like a string or an interface), the compiler needs to inject extra code to manage the initialization or finalization. A string, for example, is reference counted so when the record goes out of scope the string inside the record needs to have its reference count decreased, which might lead to de-allocating the memory for the string. Therefore, when you are using such a managed record in a section of the code, the compiler automatically adds a try-finally block around that code, and makes sure the data is cleared even in case of an exception. This has been the case for a long time. In other words, managed records have been part of the Delphi language.<\/p>\n<h3>Records with Initialize and Finalize Operators<\/h3>\n<p>Now in 10.4 the Delphi record type supports custom initialization and finalization, beyond the default operations the compiler does for managed records. You can declare a record with custom initialization and finalization code regardless of the data type of its fields, and you can write such custom initialization and finalization code. This is achieved by adding specific, new operators to the record type (you can have one without the other if you want).<br \/>\nBelow is a simple code snippet:<\/p>\n<pre>type\r\n  TMyRecord = record\r\n    Value: Integer;\r\n    class operator Initialize (out Dest: TMyRecord);\r\n    class operator Finalize(var Dest: TMyRecord);\r\n  end;<\/pre>\n<p>You need to write the code for the two class methods, of course, for example logging their execution or initializing the record value &#8212; here we are also logging a reference to memory location, to see which record is performing each individual operation:<\/p>\n<pre>class operator TMyRecord.Initialize (out Dest: TMyRecord);\r\nbegin\r\n  Dest.Value := 10;\r\n  Log('created' + IntToHex (Integer(Pointer(@Dest)))));\r\nend;\r\n\r\nclass operator TMyRecord.Finalize(var Dest: TMyRecord);\r\nbegin\r\n  Log('destroyed' + IntToHex (Integer(Pointer(@Dest)))));\r\nend;<\/pre>\n<p>The huge difference between this construction mechanism and what was previously available for records is the automatic invocation. If you write something like the code below, you can invoke both the initializer and the finalizer, and end up with a try-finally block generated by the compiler for your managed record instance.<\/p>\n<pre>procedure LocalVarTest;\r\nvar\r\n  my1: TMyRecord;\r\nbegin\r\n  Log (my1.Value.ToString);\r\nend;<\/pre>\n<p>With this code you\u2019ll get a log like:<\/p>\n<pre>created 0019F2A8\r\n10\r\ndestroyed 0019F2A8<\/pre>\n<p>Another scenario is the use of inline variables, like in:<\/p>\n<pre>begin\r\n  var t: TMyRecord;\r\n  Log(t.Value.ToString);<\/pre>\n<p>which gets you the same sequence in the log.<\/p>\n<h3>The Assign Operator<\/h3>\n<p>The := assignment flatly copies all of the data of the record fields. While this is a reasonable default, when you have custom data fields and custom initialization you might want to change this behavior. This is why for Custom Managed Records you can also define an assignment operator. The new operator is invoked with the := syntax, but defined as Assign:<\/p>\n<pre>  class operator Assign (var Dest: TMyRecord; const [ref] Src: TMyRecord);<\/pre>\n<p>The operator definition must follow very precise rules, including having the first parameter as a reference parameter, and the second as a const passed by reference. If you fail to do so, the compiler issues error messages like the following:<\/p>\n<pre>[dcc32 Error] E2617 First parameter of Assign operator must be a var parameter of the container type\r\n[dcc32 Hint] H2618 Second parameter of Assign operator must be a const[Ref] or var parameter of the container type<\/pre>\n<p>There is a sample case invoking the Assign operator:<\/p>\n<pre>var\r\n  my1, my2: TMyRecord;\r\nbegin\r\n  my1.Value := 22;\r\n  my2 := my1;\r\n<\/pre>\n<p>produces this log (in which we also add a sequence number to the record):<\/p>\n<pre>created 5 0019F2A0\r\ncreated 6 0019F298\r\n5 copied to 6\r\ndestroyed 6 0019F298\r\ndestroyed 50019F2A0<\/pre>\n<p>Notice that the sequence of destruction is reversed from the sequence of construction.<\/p>\n<h3>Passing Managed Records as Parameters<\/h3>\n<p>Managed records can work differently from regular records also when passed as parameters or returned by a function. Here are several routines showing the various scenarios:<\/p>\n<pre>procedure ParByValue (rec: TMyRecord);\r\nprocedure ParByConstValue (const rec: TMyRecord);\r\nprocedure ParByRef (var rec: TMyRecord);\r\nprocedure ParByConstRef (const [ref] rec: TMyRecord);\r\nfunction ParReturned: TMyRecord;<\/pre>\n<p>Now without going over each log one by one, this is the summary of the information:<\/p>\n<ul>\n<li>ParByValue creates a new record and calls the assignment operator (if available) to copy the data, destroying the temporary copy when exiting the procedure<\/li>\n<li>ParByConstValue makes no copy, and no call at all<\/li>\n<li>ParByRef makes no copy, no call<\/li>\n<li>ParByConstRef makes no copy, no call<\/li>\n<li>ParReturned creates a new record (via Initialize) and on return it calls the Assign operator, if the call is like the following, and deletes the temporary record once assigned back like in:\u00a0<em>my1 := ParReturned;<\/em><\/li>\n<\/ul>\n<h3>Exceptions and Managed Records<\/h3>\n<p>When an exception is raised, records in general are cleared even when no explicit try, finally block is present, unlike objects. This is a fundamental difference and key to the real usefulness of managed records.<\/p>\n<pre>procedure ExceptionTest;\r\nbegin\r\n  var a: TMRE;\r\n  var b: TMRE;\r\n  raise Exception.Create('Error Message');\r\nend;<\/pre>\n<p>Within this procedure, there are two constructor calls and two destructor calls. Again, this is a fundamental difference and a key feature of managed records. See the later section on a simple smart pointer based on managed records.<\/p>\n<h3>Arrays of Managed Records<\/h3>\n<p>If you define a static array of managed records, there are initialized calling the Initialize operator at the point declaration:<\/p>\n<pre>var\r\n  a1: array [1..5] of TMyRecord; \/\/ call here\r\nbegin\r\n  Log ('ArrOfRec');<\/pre>\n<p>They are all destroyed when they get out of scope. If you define dynamic array of managed records, the initialization code is called with the array is sized (with SetLength):<\/p>\n<pre>var\r\n  a2: array of TMyRecord;\r\nbegin\r\n  Log ('ArrOfDyn');  \r\n  SetLength(a2, 5); \/\/ call here\r\n<\/pre>\n<h3>Conclusion<\/h3>\n<p>This is just a relatively short introduction of a great new feature Embarcadero is adding to the Delphi language for the coming 10.4 release. Managed records work for generic records for example and in many other scenarios not covered here. And while this is the top new language feature, there are others coming like the new unified memory management across all platforms. Stay tuned!<\/p>\n<p><em>If you have update subscription, one of the perks is accessing beta builds of upcoming releases. There\u2019s still time to join our beta program for 10.4!<\/em><\/p>\n<p><em>This is a preview of an upcoming release of RAD Studio. There can always be last-minute bugs or changes. Nothing here is final until the release is officially made available.<\/em><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Blog-Beitrag von Marco Cant\u00f9 Die kommende Version 10.4 von RAD Studio enth\u00e4lt eine aufregende neue Funktion f\u00fcr die Sprache Delphi, n\u00e4mlich die M\u00f6glichkeit,...<\/p>","protected":false},"author":7,"featured_media":7119,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[130],"tags":[],"class_list":["post-7118","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-products"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Custom Managed Records Coming to Delphi 10.4 - Barnsten.com<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.barnsten.com\/de\/benutzerdefinierte-verwaltete-datensatze-in-delphi-10-4\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Custom Managed Records Coming to Delphi 10.4 - Barnsten.com\" \/>\n<meta property=\"og:description\" content=\"Blog post by Marco Cant\u00f9 The coming 10.4 version of RAD Studio including an exciting new feature for the Delphi language, the ability to have...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.barnsten.com\/de\/benutzerdefinierte-verwaltete-datensatze-in-delphi-10-4\/\" \/>\n<meta property=\"og:site_name\" content=\"Barnsten.com\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-08T14:19:06+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-05-08T14:24:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.barnsten.com\/wp-content\/uploads\/2020\/05\/01_Coming-Soon_Get-Excited_600x200.png-1200x400-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"600\" \/>\n\t<meta property=\"og:image:height\" content=\"200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Margreet van Muyden\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschrieben von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Margreet van Muyden\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/\"},\"author\":{\"name\":\"Margreet van Muyden\",\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/#\\\/schema\\\/person\\\/7b5b9f84835f241d5ed9c9b0425cc414\"},\"headline\":\"Custom Managed Records Coming to Delphi 10.4\",\"datePublished\":\"2020-05-08T14:19:06+00:00\",\"dateModified\":\"2020-05-08T14:24:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/\"},\"wordCount\":953,\"publisher\":{\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.barnsten.com\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/01_Coming-Soon_Get-Excited_600x200.png-1200x400-2.png\",\"articleSection\":[\"Products\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/\",\"url\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/\",\"name\":\"Custom Managed Records Coming to Delphi 10.4 - Barnsten.com\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.barnsten.com\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/01_Coming-Soon_Get-Excited_600x200.png-1200x400-2.png\",\"datePublished\":\"2020-05-08T14:19:06+00:00\",\"dateModified\":\"2020-05-08T14:24:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.barnsten.com\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/01_Coming-Soon_Get-Excited_600x200.png-1200x400-2.png\",\"contentUrl\":\"https:\\\/\\\/www.barnsten.com\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/01_Coming-Soon_Get-Excited_600x200.png-1200x400-2.png\",\"width\":600,\"height\":200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/custom-managed-records-coming-to-delphi-10-4\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.barnsten.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Custom Managed Records Coming to Delphi 10.4\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/#website\",\"url\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/\",\"name\":\"Barnsten.com\",\"description\":\"Development Software &amp; Database tools\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/#organization\",\"name\":\"Barnsten B.V.\",\"url\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.barnsten.com\\\/wp-content\\\/uploads\\\/2019\\\/04\\\/Barnsten-logo-oranje@3x.png\",\"contentUrl\":\"https:\\\/\\\/www.barnsten.com\\\/wp-content\\\/uploads\\\/2019\\\/04\\\/Barnsten-logo-oranje@3x.png\",\"width\":406,\"height\":150,\"caption\":\"Barnsten B.V.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.barnsten.com\\\/nl\\\/#\\\/schema\\\/person\\\/7b5b9f84835f241d5ed9c9b0425cc414\",\"name\":\"Margreet van Muyden\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b6cb2b1994a759ceea85e5bcb172de4dc431649686257679ce7eb46fb4bde80d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b6cb2b1994a759ceea85e5bcb172de4dc431649686257679ce7eb46fb4bde80d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b6cb2b1994a759ceea85e5bcb172de4dc431649686257679ce7eb46fb4bde80d?s=96&d=mm&r=g\",\"caption\":\"Margreet van Muyden\"},\"url\":\"https:\\\/\\\/www.barnsten.com\\\/de\\\/author\\\/margreet\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Benutzerdefinierte verwaltete Datens\u00e4tze in Delphi 10.4 - Barnsten.com","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.barnsten.com\/de\/benutzerdefinierte-verwaltete-datensatze-in-delphi-10-4\/","og_locale":"de_DE","og_type":"article","og_title":"Custom Managed Records Coming to Delphi 10.4 - Barnsten.com","og_description":"Blog post by Marco Cant\u00f9 The coming 10.4 version of RAD Studio including an exciting new feature for the Delphi language, the ability to have...","og_url":"https:\/\/www.barnsten.com\/de\/benutzerdefinierte-verwaltete-datensatze-in-delphi-10-4\/","og_site_name":"Barnsten.com","article_published_time":"2020-05-08T14:19:06+00:00","article_modified_time":"2020-05-08T14:24:27+00:00","og_image":[{"width":600,"height":200,"url":"https:\/\/www.barnsten.com\/wp-content\/uploads\/2020\/05\/01_Coming-Soon_Get-Excited_600x200.png-1200x400-2.png","type":"image\/png"}],"author":"Margreet van Muyden","twitter_card":"summary_large_image","twitter_misc":{"Geschrieben von":"Margreet van Muyden","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/#article","isPartOf":{"@id":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/"},"author":{"name":"Margreet van Muyden","@id":"https:\/\/www.barnsten.com\/nl\/#\/schema\/person\/7b5b9f84835f241d5ed9c9b0425cc414"},"headline":"Custom Managed Records Coming to Delphi 10.4","datePublished":"2020-05-08T14:19:06+00:00","dateModified":"2020-05-08T14:24:27+00:00","mainEntityOfPage":{"@id":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/"},"wordCount":953,"publisher":{"@id":"https:\/\/www.barnsten.com\/nl\/#organization"},"image":{"@id":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/#primaryimage"},"thumbnailUrl":"https:\/\/www.barnsten.com\/wp-content\/uploads\/2020\/05\/01_Coming-Soon_Get-Excited_600x200.png-1200x400-2.png","articleSection":["Products"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/","url":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/","name":"Benutzerdefinierte verwaltete Datens\u00e4tze in Delphi 10.4 - Barnsten.com","isPartOf":{"@id":"https:\/\/www.barnsten.com\/nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/#primaryimage"},"image":{"@id":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/#primaryimage"},"thumbnailUrl":"https:\/\/www.barnsten.com\/wp-content\/uploads\/2020\/05\/01_Coming-Soon_Get-Excited_600x200.png-1200x400-2.png","datePublished":"2020-05-08T14:19:06+00:00","dateModified":"2020-05-08T14:24:27+00:00","breadcrumb":{"@id":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/#primaryimage","url":"https:\/\/www.barnsten.com\/wp-content\/uploads\/2020\/05\/01_Coming-Soon_Get-Excited_600x200.png-1200x400-2.png","contentUrl":"https:\/\/www.barnsten.com\/wp-content\/uploads\/2020\/05\/01_Coming-Soon_Get-Excited_600x200.png-1200x400-2.png","width":600,"height":200},{"@type":"BreadcrumbList","@id":"https:\/\/www.barnsten.com\/custom-managed-records-coming-to-delphi-10-4\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.barnsten.com\/"},{"@type":"ListItem","position":2,"name":"Custom Managed Records Coming to Delphi 10.4"}]},{"@type":"WebSite","@id":"https:\/\/www.barnsten.com\/nl\/#website","url":"https:\/\/www.barnsten.com\/nl\/","name":"Barnsten.com","description":"Entwicklung Software &amp; Datenbank-Tools","publisher":{"@id":"https:\/\/www.barnsten.com\/nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.barnsten.com\/nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.barnsten.com\/nl\/#organization","name":"Barnsten B.V.","url":"https:\/\/www.barnsten.com\/nl\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.barnsten.com\/nl\/#\/schema\/logo\/image\/","url":"https:\/\/www.barnsten.com\/wp-content\/uploads\/2019\/04\/Barnsten-logo-oranje@3x.png","contentUrl":"https:\/\/www.barnsten.com\/wp-content\/uploads\/2019\/04\/Barnsten-logo-oranje@3x.png","width":406,"height":150,"caption":"Barnsten B.V."},"image":{"@id":"https:\/\/www.barnsten.com\/nl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.barnsten.com\/nl\/#\/schema\/person\/7b5b9f84835f241d5ed9c9b0425cc414","name":"Margreet van Muyden","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/b6cb2b1994a759ceea85e5bcb172de4dc431649686257679ce7eb46fb4bde80d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b6cb2b1994a759ceea85e5bcb172de4dc431649686257679ce7eb46fb4bde80d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b6cb2b1994a759ceea85e5bcb172de4dc431649686257679ce7eb46fb4bde80d?s=96&d=mm&r=g","caption":"Margreet van Muyden"},"url":"https:\/\/www.barnsten.com\/de\/author\/margreet\/"}]}},"_links":{"self":[{"href":"https:\/\/www.barnsten.com\/de\/wp-json\/wp\/v2\/posts\/7118","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.barnsten.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.barnsten.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.barnsten.com\/de\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.barnsten.com\/de\/wp-json\/wp\/v2\/comments?post=7118"}],"version-history":[{"count":0,"href":"https:\/\/www.barnsten.com\/de\/wp-json\/wp\/v2\/posts\/7118\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.barnsten.com\/de\/wp-json\/wp\/v2\/media\/7119"}],"wp:attachment":[{"href":"https:\/\/www.barnsten.com\/de\/wp-json\/wp\/v2\/media?parent=7118"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.barnsten.com\/de\/wp-json\/wp\/v2\/categories?post=7118"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.barnsten.com\/de\/wp-json\/wp\/v2\/tags?post=7118"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}