{"id":2025,"date":"2017-09-21T16:42:01","date_gmt":"2017-09-21T16:42:01","guid":{"rendered":"http:\/\/zappysys.com\/blog\/?p=2025"},"modified":"2025-11-21T03:37:45","modified_gmt":"2025-11-21T03:37:45","slug":"how-to-use-biml-script-to-create-biml-custom-task-or-component","status":"publish","type":"post","link":"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/","title":{"rendered":"How to create BIML custom task or component"},"content":{"rendered":"<h2>Introduction<\/h2>\n<p><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2031 alignleft\" src=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png\" alt=\"\" width=\"90\" height=\"90\" srcset=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png 160w, https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys-150x150.png 150w\" sizes=\"(max-width: 90px) 100vw, 90px\" \/><\/a><span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\">BIML, or\u00a0<em>Business Intelligence Markup Language,<\/em> is a nice technology that lets you generate SSIS packages using a bit of scripting and parameters.<\/span>\u00a0\u00a0Check for more info if you are new to it:<\/p>\n<ul style=\"list-style-position: inside;\">\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Business_Intelligence_Markup_Language\" target=\"_blank\" rel=\"noopener\">https:\/\/en.wikipedia.org\/wiki\/Business_Intelligence_Markup_Language<\/a><\/li>\n<li><a href=\"http:\/\/bimlscript.com\/\" target=\"_blank\" rel=\"noopener\">http:\/\/bimlscript.com\/<\/a><\/li>\n<\/ul>\n<p>In this article, we will cover how to create a BIML custom task or component. For this purpose, we will use the <a href=\"\/\/zappysys.com\/products\/ssis-powerpack\/\" target=\"_blank\" rel=\"noopener\">ZappySys PowerPack<\/a> Task or Data Flow component as an example. At the end of this article you will find <a href=\"\/\/zappysys.com\/blog\/how-to-use-biml-to-generate-powerpack-ssis-connectors\/#Download_sample_BIMLs\">sample BIML files<\/a>\u00a0you can download and fiddle around.<\/p>\n<h2>Use BIML to create SSIS packages that use PowerPack tasks or components<\/h2>\n<h3>BIML Elements<\/h3>\n<p>BIML uses <span class=\"lang:default highlight:0 decode:true crayon-inline\">CustomTask<\/span>, <span class=\"lang:default highlight:0 decode:true crayon-inline\">CustomComponent<\/span>, and <span class=\"lang:default highlight:0 decode:true crayon-inline\">CustomSsisConnection<\/span> elements to create custom SSIS connectors. In each of them, you will need to specify <span class=\"lang:default highlight:0 decode:true crayon-inline \">CreationName<\/span> or a similar attribute\/element, which defines what kind of component you want to create. E.g., for <em>LoggingTask<\/em> it would look like this:<\/p>\n<pre class=\"lang:xhtml decode:true\">ZappySys.PowerPack.Task.LoggingTask.LoggingTask, ZappySys.PowerPack120, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502<\/pre>\n<p>You will find the connector name in DTSX. For Tasks, you have to specify the CreationName attribute; for components, it is UserComponentTypeName. For the\u00a0<em>Rest API Task, <\/em>it looks similar to this:<\/p>\n<pre class=\"lang:xhtml decode:true\">&lt;DTS:Executable\r\n DTS:refId=\"Package\\Sequence Container\\ZS REST API Task 1.EventHandlers[OnError]\\ZS REST API Task\"\r\n DTS:CreationName=\"ZappySys.PowerPack.Task.RestApiTask.RestApiTask, ZappySys.PowerPack110, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502\"<\/pre>\n<div class=\"su-note\"  style=\"border-color:#e5dd9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#FFF7B7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><strong>NOTE<\/strong>: If your SSIS package is of a higher version than SQL Server 2012, convert it to SQL Server 2012 first.<\/div><\/div>\n<p>For a different SQL Server SSIS package version, you will need to use a different DLL name, e.g.:<\/p>\n<ul>\n<li><strong>SQL Server 2008<\/strong>: ZappySys.PowerPack100<\/li>\n<li><strong>SQL Server 2012<\/strong>: ZappySys.PowerPack110<\/li>\n<li><strong>SQL Server 2014<\/strong>: ZappySys.PowerPack120<\/li>\n<li><strong>SQL Server 2016<\/strong>: ZappySys.PowerPack130<\/li>\n<li><strong>SQL Server 2017<\/strong>: ZappySys.PowerPack140<\/li>\n<\/ul>\n<p>So, to generate<strong> a SQL Server 2017<\/strong> SSIS package, the custom connector creation name becomes like this:<\/p>\n<pre class=\"lang:xhtml decode:true\">ZappySys.PowerPack.Task.LoggingTask.LoggingTask, ZappySys.PowerPack140, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502<\/pre>\n<h3>Create a BIML custom task with CustomTask<\/h3>\n<p>You will need to use the <span class=\"lang:default highlight:0 decode:true crayon-inline\">CustomTask<\/span>\u00a0element to create PowerPack Tasks in your Control Flow.\u00a0So open your DTSX where you use a PowerPack Task, find out the <span class=\"lang:default highlight:0 decode:true crayon-inline\">CreationName<\/span>\u00a0and then copy child element in <span class=\"lang:default highlight:0 decode:true crayon-inline\">&lt;DTS:ObjectData&gt;<\/span> element. (e.g., LoggingTask). You will need to escape it and use it in your BIML as well.<\/p>\n<h4>DTSX snippet<\/h4>\n<pre class=\"lang:xhtml decode:true\">... \r\n&lt;DTS:Executable\r\n    DTS:refId=\"Package\\ZS Logging Task\"\r\n    DTS:CreationName=\"ZappySys.PowerPack.Task.LoggingTask.LoggingTask, ZappySys.PowerPack110, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502\"\r\n    ...\r\n    &lt;DTS:Variables \/&gt;\r\n    &lt;DTS:ObjectData&gt;\r\n    &lt;LoggingTask\r\n        Message=\"Hello from {{System::PackageName}}. I started on {{System::StartTime,yyy-MM-dd hh:mm:ss tt}}\"\r\n        LogVariableName=\"\"\r\n        MessageType=\"Information\"\r\n        LogMode=\"ExecutionLog\"\r\n        LogFilePath=\"\"\r\n        LogFileAppend=\"True\"\r\n        LogDateTime=\"True\"\r\n        DateTimeFormat=\"HH:mm:ss\"\r\n        LogLevel=\"Normal\"\r\n        PrefixTimestamp=\"False\" \/&gt;\r\n    &lt;\/DTS:ObjectData&gt;\r\n&lt;\/DTS:Executable&gt;\r\n...<\/pre>\n<h4>BIML snippet<\/h4>\n<p>A Logging Task under the Tasks element will look like this:<\/p>\n<pre class=\"lang:xhtml decode:true\">...\r\n&lt;CustomTask Name=\"Logging Task\" CreationName=\"ZappySys.PowerPack.Task.LoggingTask.LoggingTask, ZappySys.PowerPack120, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502\" TaskContact=\"ZappySys\"&gt;\r\n    &lt;ObjectData&gt;\r\n        &amp;lt;LoggingTask\r\n        Message=\"Hello from {{System::PackageName}}. I started on {{System::StartTime,yyy-MM-dd hh:mm:ss tt}}\"\r\n        LogVariableName=\"\"\r\n        MessageType=\"Information\"\r\n        LogMode=\"ExecutionLog\"\r\n        LogFilePath=\"\"\r\n        LogFileAppend=\"True\"\r\n        LogDateTime=\"True\"\r\n        DateTimeFormat=\"HH:mm:ss\"\r\n        LogLevel=\"Normal\"\r\n        PrefixTimestamp=\"False\" \/&amp;gt;\r\n &lt;\/ObjectData&gt;\r\n&lt;\/CustomTask&gt;\r\n...<\/pre>\n<div class=\"su-note\"  style=\"border-color:#e5dd9d;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><div class=\"su-note-inner su-u-clearfix su-u-trim\" style=\"background-color:#FFF7B7;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;\"><strong>NOTE:<\/strong> Notice the escaped <span class=\"lang:default highlight:0 decode:true crayon-inline\">&lt;LoggingTask&gt;<\/span>\u00a0XML element under <span class=\"lang:default highlight:0 decode:true crayon-inline \">&lt;ObjectData&gt;<\/span>\u00a0element.<\/div><\/div>\n<h3>Create BIML custom components using CustomComponent<\/h3>\n<p>Use the <span class=\"lang:default highlight:0 decode:true crayon-inline \">CustomComponent<\/span>\u00a0BIML element to generate these components in DataFlow:<\/p>\n<ul>\n<li>Sources<\/li>\n<li>Transformations<\/li>\n<li>Destinations<\/li>\n<\/ul>\n<p>If you need a connection, then use the CustomSsisConnection element.<\/p>\n<p>Again, you will have to copy the <span class=\"lang:default highlight:0 decode:true crayon-inline\">UserComponentTypeName<\/span> property value and use it in BIML to initialize a component. For a custom connection, it is a bit different: just use the CreationName attribute value from DTSX in the BIML element.\u00a0Also, don&#8217;t forget to copy property values from DTSX and mirror them in BIML.<\/p>\n<p><span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\">Below are DTSX and BIML snippets showing a Data Flow that contains a JSON Source using\u00a0an\u00a0<a target=\"_blank\" rel=\"noopener\">HTTP Connection<\/a>\u00a0and is connected to a\u00a0<a target=\"_blank\" rel=\"noopener\">Trash Destination<\/a>.<\/span><\/p>\n<h4>DTSX snippet<\/h4>\n<pre class=\"lang:xhtml decode:true\">...\r\n&lt;DTS:ConnectionManagers&gt;\r\n    &lt;DTS:ConnectionManager DTS:refId=\"Package.ConnectionManagers[ZS-HTTP Connection]\" DTS:CreationName=\"ZS-HTTP\" DTS:DTSID=\"{E57D23E9-E50A-4C4A-BB19-B91E776887CF}\" DTS:ObjectName=\"ZS-HTTP Connection\"&gt;\r\n        &lt;DTS:ObjectData&gt;\r\n            &lt;ConnectionManager ConnectionString=\"Url=https:\/\/httpbin.org\/anything;CredentialType=Notset;UserName=;Timeout=100000;UseProxy=False;ProxyUrl=;UseProxyCreds=False;ProxyUserName=;DoNotUseDefaultProxy=False;UseClientCertificate=False;CertificatePath=;CertificateStorageType=CurrentUser;CertificateStoreName=My;CertificateThumbprint=;RetryMode=None;RetryCountMax=3;RetryWaitTimeMs=2000;RetryMultiplyWaitTime=False;RetryMessageList=;RetryStatusCodeList=\" \/&gt;\r\n...\r\n&lt;DTS:Executable DTS:refId=\"Package\\Dataflow\" DTS:CreationName=\"SSIS.Pipeline.3\" DTS:DTSID=\"{C59866C4-9732-4B3A-8F80-7784E52C63F5}\" DTS:ExecutableType=\"SSIS.Pipeline.3\" DTS:LocaleID=\"-1\" DTS:ObjectName=\"Dataflow\" DTS:TaskContact=\"Performs high-performance data extraction, transformation and loading;Microsoft Corporation; Microsoft SQL Server v10; (C) 2007 Microsoft Corporation; All Rights Reserved;http:\/\/www.microsoft.com\/sql\/support\/default.asp;1\"&gt;\r\n    &lt;DTS:ObjectData&gt;\r\n    &lt;pipeline BLOBTempStoragePath=\"\" bufferTempStoragePath=\"\" version=\"1\"&gt;\r\n    &lt;components&gt;\r\n    &lt;component refId=\"Package\\Dataflow\\JsonSource\" componentClassID=\"DTS.ManagedComponentWrapper.3\" name=\"JsonSource\" usesDispositions=\"true\" version=\"25\"&gt;\r\n        &lt;properties&gt;\r\n            &lt;property dataType=\"System.Int32\" name=\"AccessMode\" typeConverter=\"ZappySys.Common.Ssis.FileValueAccessMode, ZappySys.Common, Version=1.0.2017.10830, Culture=neutral, PublicKeyToken=1903265a93eae502\"&gt;2&lt;\/property&gt;\r\n            &lt;property dataType=\"System.Boolean\" name=\"UseConnection\"&gt;true&lt;\/property&gt;\r\n            &lt;property dataType=\"System.String\" name=\"UserComponentTypeName\"&gt;ZappySys.PowerPack.Adapter.JsonSource.JsonSource, ZappySys.PowerPack110, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502&lt;\/property&gt;\r\n            ...\r\n        &lt;\/properties&gt;\r\n        &lt;connections&gt;\r\n            &lt;connection refId=\"Package\\Dataflow\\JsonSource.Connections[HTTP 1]\" connectionManagerID=\"Package.ConnectionManagers[ZS-HTTP Connection]\" connectionManagerRefId=\"Package.ConnectionManagers[ZS-HTTP Connection]\" name=\"HTTP 1\" \/&gt;\r\n        &lt;\/connections&gt;\r\n        &lt;outputs&gt;\r\n            &lt;output refId=\"Package\\Dataflow\\JsonSource.Outputs[JsonSourceOutput]\" errorRowDisposition=\"FailComponent\" name=\"JsonSourceOutput\" truncationRowDisposition=\"FailComponent\"&gt;\r\n                &lt;outputColumns&gt;\r\n                    &lt;outputColumn refId=\"Package\\Dataflow\\JsonSource.Outputs[JsonSourceOutput].Columns[Url]\" dataType=\"wstr\" externalMetadataColumnId=\"Package\\Dataflow\\JsonSource.Outputs[JsonSourceOutput].ExternalColumns[url]\" length=\"50\" lineageId=\"Package\\Dataflow\\JsonSource.Outputs[JsonSourceOutput].Columns[Url]\" name=\"Url\" \/&gt;\r\n                &lt;\/outputColumns&gt;\r\n                &lt;externalMetadataColumns isUsed=\"True\"&gt;\r\n                    &lt;externalMetadataColumn refId=\"Package\\Dataflow\\JsonSource.Outputs[JsonSourceOutput].ExternalColumns[url]\" dataType=\"wstr\" length=\"50\" name=\"url\" \/&gt;\r\n                &lt;\/externalMetadataColumns&gt;\r\n            &lt;\/output&gt;\r\n            ...\r\n        &lt;\/outputs&gt;\r\n    &lt;\/component&gt;\r\n    &lt;component refId=\"Package\\Dataflow\\TrashDestination\" componentClassID=\"DTS.ManagedComponentWrapper.3\" name=\"TrashDestination\" version=\"2\"&gt;\r\n        &lt;properties&gt;\r\n            &lt;property dataType=\"System.String\" name=\"UserComponentTypeName\"&gt;ZappySys.PowerPack.Adapter.TrashDestination.TrashDestination, ZappySys.PowerPack110, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502&lt;\/property&gt;\r\n            ...\r\n        &lt;\/properties&gt;\r\n        &lt;inputs&gt;\r\n            &lt;input refId=\"Package\\Dataflow\\TrashDestination.Inputs[TrashInput]\" name=\"TrashInput\"&gt;\r\n                &lt;externalMetadataColumns \/&gt;\r\n            &lt;\/input&gt;\r\n        &lt;\/inputs&gt;\r\n    &lt;\/component&gt;\r\n    &lt;\/components&gt;\r\n    &lt;paths&gt;\r\n        &lt;path refId=\"Package\\Dataflow.Paths[TrashInput]\" endId=\"Package\\Dataflow\\TrashDestination.Inputs[TrashInput]\" name=\"TrashInput\" startId=\"Package\\Dataflow\\JsonSource.Outputs[JsonSourceOutput]\" \/&gt;\r\n    &lt;\/paths&gt;\r\n...<\/pre>\n<h4>BIML snippet<\/h4>\n<pre class=\"lang:xhtml decode:true\">...\r\n&lt;Connections&gt;\r\n    &lt;CustomSsisConnection Name=\"ZS-HTTP Connection\" CreationName=\"ZS-HTTP\" ObjectData=\"&amp;lt;ConnectionManager ConnectionString=&amp;quot;Url=https:&amp;#x2F;&amp;#x2F;httpbin.org&amp;#x2F;anything;CredentialType=Notset;UserName=;Timeout=100000;UseProxy=False;ProxyUrl=;UseProxyCreds=False;ProxyUserName=;DoNotUseDefaultProxy=False;UseClientCertificate=False;CertificatePath=;CertificateStorageType=CurrentUser;CertificateStoreName=My;CertificateThumbprint=;RetryMode=None;RetryCountMax=3;RetryWaitTimeMs=2000;RetryMultiplyWaitTime=False;RetryMessageList=;RetryStatusCodeList=&amp;quot; &amp;#x2F;&amp;gt;\"\/&gt;\r\n&lt;\/Connections&gt;\r\n&lt;Packages&gt;\r\n&lt;Package Name=\"DataFlow with Connection Sample\" ConstraintMode=\"Linear\"&gt;\r\n&lt;Tasks&gt;\r\n    &lt;Dataflow Name=\"Dataflow\"&gt;\r\n    &lt;Transformations&gt;\r\n    &lt;CustomComponent Name=\"JsonSource\" UsesDispositions=\"true\" ComponentTypeName=\"ZappySys.PowerPack.Adapter.JsonSource.JsonSource, ZappySys.PowerPack130, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502\"&gt;\r\n        &lt;CustomProperties&gt;\r\n            &lt;CustomProperty Name=\"AccessMode\" DataType=\"Int32\"&gt;2&lt;\/CustomProperty&gt;                              \r\n            &lt;CustomProperty Name=\"UseConnection\" DataType=\"Boolean\"&gt;true&lt;\/CustomProperty&gt;\r\n        &lt;\/CustomProperties&gt;\r\n        &lt;OutputPaths&gt;\r\n            &lt;OutputPath Name=\"JsonSourceOutput\" ErrorRowDisposition=\"FailComponent\" TruncationRowDisposition=\"FailComponent\"&gt;\r\n                &lt;ExternalColumns&gt;\r\n                    &lt;ExternalColumn Name=\"url\" DataType=\"String\" Length=\"50\" \/&gt;\r\n                &lt;\/ExternalColumns&gt;                                  \r\n                &lt;OutputColumns&gt;\r\n                    &lt;OutputColumn Name=\"Url\" ExternalMetadataColumnName=\"url\" DataType=\"String\" Length=\"50\" \/&gt;\r\n                &lt;\/OutputColumns&gt;\r\n            &lt;\/OutputPath&gt;\r\n            &lt;OutputPath Name=\"Json Error Output\" IsErrorOutput=\"true\"&gt;\r\n            &lt;OutputColumns&gt;\r\n                &lt;OutputColumn Name=\"Url\" \/&gt;\r\n            &lt;\/OutputColumns&gt;\r\n            &lt;\/OutputPath&gt;                                  \r\n        &lt;\/OutputPaths&gt;\r\n        &lt;Connections&gt;\r\n        &lt;Connection Name=\"HTTP 1\" ConnectionName=\"ZS-HTTP Connection\" \/&gt;\r\n        &lt;\/Connections&gt;                             \r\n    &lt;\/CustomComponent&gt;\r\n    &lt;CustomComponent Name=\"TrashDestination\" ComponentTypeName=\"ZappySys.PowerPack.Adapter.TrashDestination.TrashDestination, ZappySys.PowerPack130, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1903265a93eae502\"&gt;\r\n        &lt;InputPaths&gt;\r\n            &lt;InputPath OutputPathName=\"JsonSource.JsonSourceOutput\" Identifier=\"TrashInput\" SsisName=\"TrashInput\"\/&gt;\r\n        &lt;\/InputPaths&gt;\r\n    &lt;\/CustomComponent&gt;\r\n    &lt;\/Transformations&gt;\r\n...<\/pre>\n<h2>Resources<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.varigence.com\/Documentation\" target=\"_blank\" rel=\"noopener\">BIML documentation<\/a><\/li>\n<li><a href=\"https:\/\/www.varigence.com\/Documentation\/Language\/Element\/AstCustomTaskNode\" target=\"_blank\" rel=\"noopener\">CustomTask documentation<\/a><\/li>\n<li><a href=\"https:\/\/schemas.varigence.com\/Documentation\/Language\/Element\/AstCustomComponentNode\" target=\"_blank\" rel=\"noopener\">CustomComponent documentation<\/a><\/li>\n<li><a href=\"https:\/\/www.varigence.com\/Documentation\/Language\/Element\/AstCustomSsisConnectionNode\" target=\"_blank\" rel=\"noopener\">CustomSsisConnection documentation<\/a><\/li>\n<\/ul>\n<h2>Download sample BIMLs<\/h2>\n<ul>\n<li><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/Sample-BIML-with-PowerPack-components-inside-DataFlow.zip\" target=\"_blank\" rel=\"noopener\">Sample BIML with PowerPack DataFlow Components<\/a><\/li>\n<li><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/Sample-BIML-with-PowerPack-components-inside-DataFlow-with-connection.zip\" target=\"_blank\" rel=\"noopener\">Sample BIML with PowerPack DataFlow Components with Connection<\/a><\/li>\n<li><a href=\"\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/Sample-BIML-with-PowerPack-Task.zip\" target=\"_blank\" rel=\"noopener\">Sample BIML with PowerPack Task<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Introduction BIML, or\u00a0Business Intelligence Markup Language, is a nice technology that lets you generate SSIS packages using a bit of scripting and parameters.\u00a0\u00a0Check for more info if you are new to it: https:\/\/en.wikipedia.org\/wiki\/Business_Intelligence_Markup_Language http:\/\/bimlscript.com\/ In this article, we will cover how to create a BIML custom task or component. For this purpose, we will use [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2031,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,8,11],"tags":[246,13,207,226,245],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\r\n<title>How to create BIML custom task or component | ZappySys Blog<\/title>\r\n<meta name=\"description\" content=\"Learn how to use BIML script to create BIML custom task or component with ZappySys PowerPack.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/\" \/>\r\n<meta property=\"og:locale\" content=\"en_US\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"How to create BIML custom task or component | ZappySys Blog\" \/>\r\n<meta property=\"og:description\" content=\"Learn how to use BIML script to create BIML custom task or component with ZappySys PowerPack.\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/\" \/>\r\n<meta property=\"og:site_name\" content=\"ZappySys Blog\" \/>\r\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/ZappySys\/\" \/>\r\n<meta property=\"article:published_time\" content=\"2017-09-21T16:42:01+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2025-11-21T03:37:45+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png\" \/>\r\n\t<meta property=\"og:image:width\" content=\"160\" \/>\r\n\t<meta property=\"og:image:height\" content=\"160\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\r\n<meta name=\"author\" content=\"ZappySys\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:creator\" content=\"@https:\/\/twitter.com\/zappysys\/\" \/>\r\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"ZappySys\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/\",\"url\":\"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/\",\"name\":\"How to create BIML custom task or component | ZappySys Blog\",\"isPartOf\":{\"@id\":\"https:\/\/zappysys.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png\",\"datePublished\":\"2017-09-21T16:42:01+00:00\",\"dateModified\":\"2025-11-21T03:37:45+00:00\",\"author\":{\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82\"},\"description\":\"Learn how to use BIML script to create BIML custom task or component with ZappySys PowerPack.\",\"breadcrumb\":{\"@id\":\"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/#primaryimage\",\"url\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png\",\"contentUrl\":\"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png\",\"width\":160,\"height\":160},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/zappysys.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to create BIML custom task or component\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/zappysys.com\/blog\/#website\",\"url\":\"https:\/\/zappysys.com\/blog\/\",\"name\":\"ZappySys Blog\",\"description\":\"SSIS \/ ODBC Drivers \/ API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/zappysys.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82\",\"name\":\"ZappySys\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/zappysys.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g\",\"caption\":\"ZappySys\"},\"sameAs\":[\"http:\/\/www.zappysys.com\/\",\"https:\/\/www.facebook.com\/ZappySys\/\",\"https:\/\/twitter.com\/https:\/\/twitter.com\/zappysys\/\"],\"url\":\"https:\/\/zappysys.com\/blog\/author\/admin\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to create BIML custom task or component | ZappySys Blog","description":"Learn how to use BIML script to create BIML custom task or component with ZappySys PowerPack.","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:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/","og_locale":"en_US","og_type":"article","og_title":"How to create BIML custom task or component | ZappySys Blog","og_description":"Learn how to use BIML script to create BIML custom task or component with ZappySys PowerPack.","og_url":"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/","og_site_name":"ZappySys Blog","article_author":"https:\/\/www.facebook.com\/ZappySys\/","article_published_time":"2017-09-21T16:42:01+00:00","article_modified_time":"2025-11-21T03:37:45+00:00","og_image":[{"width":160,"height":160,"url":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png","type":"image\/png"}],"author":"ZappySys","twitter_card":"summary_large_image","twitter_creator":"@https:\/\/twitter.com\/zappysys\/","twitter_misc":{"Written by":"ZappySys","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/","url":"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/","name":"How to create BIML custom task or component | ZappySys Blog","isPartOf":{"@id":"https:\/\/zappysys.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/#primaryimage"},"image":{"@id":"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/#primaryimage"},"thumbnailUrl":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png","datePublished":"2017-09-21T16:42:01+00:00","dateModified":"2025-11-21T03:37:45+00:00","author":{"@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82"},"description":"Learn how to use BIML script to create BIML custom task or component with ZappySys PowerPack.","breadcrumb":{"@id":"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/#primaryimage","url":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png","contentUrl":"https:\/\/zappysys.com\/blog\/wp-content\/uploads\/2017\/09\/ssis-biml-powerpack-zappysys.png","width":160,"height":160},{"@type":"BreadcrumbList","@id":"https:\/\/zappysys.com\/blog\/how-to-use-biml-script-to-create-biml-custom-task-or-component\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/zappysys.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to create BIML custom task or component"}]},{"@type":"WebSite","@id":"https:\/\/zappysys.com\/blog\/#website","url":"https:\/\/zappysys.com\/blog\/","name":"ZappySys Blog","description":"SSIS \/ ODBC Drivers \/ API Connectors for JSON, XML, Azure, Amazon AWS, Salesforce, MongoDB and more","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/zappysys.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/2756c237457fbc95d82cb38962f81f82","name":"ZappySys","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/zappysys.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5c9be148088ba9b8af8e955c5f7c22b5?s=96&d=mm&r=g","caption":"ZappySys"},"sameAs":["http:\/\/www.zappysys.com\/","https:\/\/www.facebook.com\/ZappySys\/","https:\/\/twitter.com\/https:\/\/twitter.com\/zappysys\/"],"url":"https:\/\/zappysys.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/2025"}],"collection":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/comments?post=2025"}],"version-history":[{"count":33,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/2025\/revisions"}],"predecessor-version":[{"id":11649,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/posts\/2025\/revisions\/11649"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/media\/2031"}],"wp:attachment":[{"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/media?parent=2025"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/categories?post=2025"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zappysys.com\/blog\/wp-json\/wp\/v2\/tags?post=2025"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}