{"id":1329,"date":"2013-10-01T19:08:12","date_gmt":"2013-10-01T19:08:12","guid":{"rendered":"https:\/\/clarionsharp.com\/blog\/?p=1329"},"modified":"2013-10-01T19:08:12","modified_gmt":"2013-10-01T19:08:12","slug":"reports-in-the-new-rtl","status":"publish","type":"post","link":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/","title":{"rendered":"REPORTs in the new RTL"},"content":{"rendered":"<p>Clarion uses Windows metafiles to generate reports since the very first version of Clarion for Windows. A metafile is a sequence of records containing a list of GDI functions and parameters. Metafiles are created in memory and can be written to disk files. The RTL also uses metafiles to handle direct drawing operations like ARC() or PIE() in both WINDOWs and REPORTs. A metafile is a simple way to store drawing operations but there are several issues:<\/p>\n<ol>\n<li>Windows metafiles do not support all GDI functions used for drawing. For example, images with semi-transparent parts cannot be stored in Windows metafiles.<\/li>\n<li>Reports are sequences of bands and bands consist of controls and can be nested. Multiple drawing operations can be required to draw individual controls. For example, multiple lines and multiple strings must be drawn for LIST controls. Reports are best represented as a tree structure, and metafiles with their linear organization are not an easy\/adequate way to represent them.<\/li>\n<li>The RTL must carefully track images, pens and fonts used in metafiles to avoid leaking of resources.<\/li>\n<\/ol>\n<p>Problem (1) can be solved by use of Enhanced metafiles (EMF) instead of Windows metafiles (WMF). But other problems exist for both types of metafiles. The RTL must enumerate metafile records every time some delayed action needs to be executed, for example when processing widow\/orphan settings to find end of page. The RTL inserts additional records into metafiles to mark logically related records and assist in enumeration and parsing both during report generation and during conversion metafiles to text\/PDF\/XML\/HTML format.<\/p>\n<p><a href=\"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1330\" alt=\"ReportsTree\" src=\"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree.png\" width=\"885\" height=\"532\" srcset=\"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree.png 885w, https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree-300x180.png 300w\" sizes=\"auto, (max-width: 885px) 100vw, 885px\" \/><\/a><\/p>\n<p>The new RTL won\u2019t use metafiles for direct drawing operations or during report generation. Instead it will produce a dynamic tree structure matching the Report with a sequence of drawing operations. Every tree node is a class instance derived from the MetaNode class:<br \/>\nMetaNode\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0CLASS,TYPE<br \/>\nNext\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&amp;MetaNode<br \/>\nBounds\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0LIKE(RECT)<br \/>\nFlags\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0ULONG<br \/>\nCustom1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0LONG<br \/>\nCustom2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0LONG<br \/>\nDraw\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0PROCEDURE (LONG context),VIRTUAL<br \/>\nEND<\/p>\n<p>ContainerNode\u00a0 CLASS(MetaNode),TYPE<br \/>\nNested\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &amp;MetaNode<br \/>\nEND<\/p>\n<p>PageNode\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CLASS(ContainerNode),TYPE<br \/>\nPrint\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 PROCEDURE (HDC, ULONG skipmask)<br \/>\nEND<\/p>\n<p>IndirectNode\u00a0\u00a0 CLASS(MetaNode),TYPE<br \/>\nActual\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &amp;ContainerNode<br \/>\nEND<\/p>\n<p>There are 3 categories of nodes:<\/p>\n<ol>\n<li>Nodes with information to execute a direct draw operation or to draw a control. A Nodes\u2019 classes have fields for all values required to perform both drawing and post-processing: fonts, colors, pen style and width, value of the EXTEND attribute, etc.<\/li>\n<li>Container nodes used for referencing a list of nested nodes.<\/li>\n<li>Indirect nodes referencing some Container node.<\/li>\n<\/ol>\n<p>The container node class for a report page has a function to start drawing or printing. The call to this function initiates iteration of the page sub-tree and calls the Draw method for every node. This approach provides a very easy method to get a page in any required form:<\/p>\n<ul>\n<li>If the HDC parameter is a handle to a screen device context (DC), the page contents are drawn on screen.<\/li>\n<li>If the HDC parameter is a handle to a printer DC, the page contents are sent to the corresponding printer.<\/li>\n<li>If the HDC parameter is a handle to an Enhanced metafile DC, an .EMF file with the page\u2019s image is generated.<\/li>\n<li>If the HDC parameter is a handle to a Windows metafile DC, a .WMF file with the page\u2019s image is generated.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>The skipmask parameter of PageNode.Print function is used to filter which nodes to print\/draw. If the value of the expression<\/p>\n<p>BAND (node.Flags, skipmask)<\/p>\n<p>is <b>not<\/b> 0, the node (and all nested nodes for container) are not drawn.\u00a0 Filtering nodes can be used in multiple ways, for example to exclude some pages from printing, or to show the document form at preview time but not print it without needing to re-generate the report. The program can set its own flags in high WORD of the node\u2019s Flags field (low WORD is reserved for Clarion internal use). The program also can use node\u2019s Custom1 and Custom2 fields to store any useful data associated with that node.<\/p>\n<p>Position of nodes corresponding to bands (FORM, HEADER, FOOTER, DETAIL, BREAK) is calculated relative to the page origin. Position of controls is calculated relative to the origin of the band they belong to. This allows us to have \u201creferences to containers\u201d implemented by indirect nodes. Upon drawing\/printing an indirect node the RTL uses its position, flags, custom data and a list of nested nodes of the container it points to. Indirect nodes are used internally to handle the FORM band, which is shared by all report pages. But a program can use them in other ways, for example to merge several short reports to print them on the same page, or to print a number of copies of specific pages.<\/p>\n<p><a href=\"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1331\" alt=\"ReportsTree2\" src=\"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree2.png\" width=\"902\" height=\"294\" srcset=\"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree2.png 902w, https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree2-300x97.png 300w\" sizes=\"auto, (max-width: 902px) 100vw, 902px\" \/><\/a><\/p>\n<p><span style=\"color: #0000ff;\"><b>Benefits<\/b><\/span><\/p>\n<p>The new internal organization for Reports <b>retains complete backward compatibility<\/b> with the current and prior versions of the RTL because WMF files can be easily generated for every page. \u00a0But it opens the door to numerous potential enhancements:<\/p>\n<ol>\n<li>Faster report generation by eliminating the need for repeated re-scanning of metafiles to merge them or to find the point of a page break.<\/li>\n<li>Easier conversion of reports to formats other than WMF and EMF by elimination of the need to parse the WMF file to reconstruct the structure of the report in another format.<\/li>\n<li>Easier after-generation modification of reports, for example placing the correct total number of pages to \u201cPage n of N\u201d text.<\/li>\n<li>The possibility to have report pages with multi-layered contents and then selecting the desired layers at preview time.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Clarion uses Windows metafiles to generate reports since the very first version of Clarion for Windows. A metafile is a sequence of records containing a list of GDI functions and parameters. Metafiles are created in memory and can be written to disk files. The RTL also uses metafiles to handle direct drawing operations like ARC() &hellip; <a href=\"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">REPORTs in the new RTL<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31,5,6],"tags":[],"class_list":["post-1329","post","type-post","status-publish","format-standard","hentry","category-clarion9","category-clarionnews","category-clarion-win32"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>REPORTs in the new RTL - Clarion<\/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:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"REPORTs in the new RTL - Clarion\" \/>\n<meta property=\"og:description\" content=\"Clarion uses Windows metafiles to generate reports since the very first version of Clarion for Windows. A metafile is a sequence of records containing a list of GDI functions and parameters. Metafiles are created in memory and can be written to disk files. The RTL also uses metafiles to handle direct drawing operations like ARC() &hellip; Continue reading REPORTs in the new RTL &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/\" \/>\n<meta property=\"og:site_name\" content=\"Clarion\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/softvelocity\/\" \/>\n<meta property=\"article:published_time\" content=\"2013-10-01T19:08:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree.png\" \/>\n<meta name=\"author\" content=\"rzaunere\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"rzaunere\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/\"},\"author\":{\"name\":\"rzaunere\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/person\\\/b90e860529aea05ad064cf2687697ce3\"},\"headline\":\"REPORTs in the new RTL\",\"datePublished\":\"2013-10-01T19:08:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/\"},\"wordCount\":924,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/wp-content\\\/uploads\\\/2013\\\/10\\\/ReportsTree.png\",\"articleSection\":[\"Clarion 9\",\"Clarion News\",\"Clarion Win32\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/\",\"name\":\"REPORTs in the new RTL - Clarion\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/wp-content\\\/uploads\\\/2013\\\/10\\\/ReportsTree.png\",\"datePublished\":\"2013-10-01T19:08:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/#primaryimage\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/wp-content\\\/uploads\\\/2013\\\/10\\\/ReportsTree.png\",\"contentUrl\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/wp-content\\\/uploads\\\/2013\\\/10\\\/ReportsTree.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/reports-in-the-new-rtl\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"REPORTs in the new RTL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/\",\"name\":\"Clarion\",\"description\":\"Deliver your software on time, every time\",\"publisher\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#organization\",\"name\":\"SoftVelocity\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/svlogonew57.png\",\"contentUrl\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/03\\\/svlogonew57.png\",\"width\":221,\"height\":57,\"caption\":\"SoftVelocity\"},\"image\":{\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/softvelocity\\\/\",\"https:\\\/\\\/www.youtube.com\\\/user\\\/SoftVelocity\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/#\\\/schema\\\/person\\\/b90e860529aea05ad064cf2687697ce3\",\"name\":\"rzaunere\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g\",\"caption\":\"rzaunere\"},\"url\":\"https:\\\/\\\/clarionsharp.com\\\/blog\\\/author\\\/rzaunere\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"REPORTs in the new RTL - Clarion","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:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/","og_locale":"en_US","og_type":"article","og_title":"REPORTs in the new RTL - Clarion","og_description":"Clarion uses Windows metafiles to generate reports since the very first version of Clarion for Windows. A metafile is a sequence of records containing a list of GDI functions and parameters. Metafiles are created in memory and can be written to disk files. The RTL also uses metafiles to handle direct drawing operations like ARC() &hellip; Continue reading REPORTs in the new RTL &rarr;","og_url":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/","og_site_name":"Clarion","article_publisher":"https:\/\/www.facebook.com\/softvelocity\/","article_published_time":"2013-10-01T19:08:12+00:00","og_image":[{"url":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree.png","type":"","width":"","height":""}],"author":"rzaunere","twitter_card":"summary_large_image","twitter_misc":{"Written by":"rzaunere","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/#article","isPartOf":{"@id":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/"},"author":{"name":"rzaunere","@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/person\/b90e860529aea05ad064cf2687697ce3"},"headline":"REPORTs in the new RTL","datePublished":"2013-10-01T19:08:12+00:00","mainEntityOfPage":{"@id":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/"},"wordCount":924,"commentCount":0,"publisher":{"@id":"https:\/\/clarionsharp.com\/blog\/#organization"},"image":{"@id":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/#primaryimage"},"thumbnailUrl":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree.png","articleSection":["Clarion 9","Clarion News","Clarion Win32"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/","url":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/","name":"REPORTs in the new RTL - Clarion","isPartOf":{"@id":"https:\/\/clarionsharp.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/#primaryimage"},"image":{"@id":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/#primaryimage"},"thumbnailUrl":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree.png","datePublished":"2013-10-01T19:08:12+00:00","breadcrumb":{"@id":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/#primaryimage","url":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree.png","contentUrl":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2013\/10\/ReportsTree.png"},{"@type":"BreadcrumbList","@id":"https:\/\/clarionsharp.com\/blog\/reports-in-the-new-rtl\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/clarionsharp.com\/blog\/"},{"@type":"ListItem","position":2,"name":"REPORTs in the new RTL"}]},{"@type":"WebSite","@id":"https:\/\/clarionsharp.com\/blog\/#website","url":"https:\/\/clarionsharp.com\/blog\/","name":"Clarion","description":"Deliver your software on time, every time","publisher":{"@id":"https:\/\/clarionsharp.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/clarionsharp.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/clarionsharp.com\/blog\/#organization","name":"SoftVelocity","url":"https:\/\/clarionsharp.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2019\/03\/svlogonew57.png","contentUrl":"https:\/\/clarionsharp.com\/blog\/wp-content\/uploads\/2019\/03\/svlogonew57.png","width":221,"height":57,"caption":"SoftVelocity"},"image":{"@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/softvelocity\/","https:\/\/www.youtube.com\/user\/SoftVelocity"]},{"@type":"Person","@id":"https:\/\/clarionsharp.com\/blog\/#\/schema\/person\/b90e860529aea05ad064cf2687697ce3","name":"rzaunere","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/91d95e38759c411d27f646b60da7f4769ce91e87b484669af240e51c729b1e7c?s=96&d=mm&r=g","caption":"rzaunere"},"url":"https:\/\/clarionsharp.com\/blog\/author\/rzaunere\/"}]}},"_links":{"self":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/1329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/comments?post=1329"}],"version-history":[{"count":1,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/1329\/revisions"}],"predecessor-version":[{"id":1332,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/posts\/1329\/revisions\/1332"}],"wp:attachment":[{"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/media?parent=1329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/categories?post=1329"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/clarionsharp.com\/blog\/wp-json\/wp\/v2\/tags?post=1329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}