{"id":287,"date":"2019-03-25T17:30:08","date_gmt":"2019-03-25T20:30:08","guid":{"rendered":"http:\/\/xexeu.elipse.com.br\/pt\/desenvolvendo-bibliotecas-no-e3\/"},"modified":"2024-03-28T16:45:13","modified_gmt":"2024-03-28T19:45:13","slug":"desenvolvendo-bibliotecas-no-e3","status":"publish","type":"post","link":"https:\/\/kb.elipse.com.br\/en\/desenvolvendo-bibliotecas-no-e3\/","title":{"rendered":"Desenvolvendo bibliotecas no E3."},"content":{"rendered":"<div align=\"justify\">\n<p><u><b>1) INTRODU\u00c7\u00c3O<\/b><\/u><\/p>\n<p>O uso de bibliotecas no E3 \u00e9 altamente recomend\u00e1vel, pois elas representam um grande ganho de produtividade para a aplica\u00e7\u00e3o. Algumas das vantagens da utiliza\u00e7\u00e3o dos ElipseX s\u00e3o:<\/p>\n<ul>\n<li>Reutiliza\u00e7\u00e3o de c\u00f3digo.<\/li>\n<li>Minimiza\u00e7\u00e3o de testes durante o desenvolvimento.<\/li>\n<li>Cria\u00e7\u00e3o de interface padr\u00e3o para os objetos desenvolvidos.<\/li>\n<li>Diminui\u00e7\u00e3o do tempo de desenvolvimento de novos projetos.<\/li>\n<li>Prote\u00e7\u00e3o do conte\u00fado do projeto.<\/li>\n<\/ul>\n<p><u><b><br \/>\n2) QUANDO CRIAR UMA BIBLIOTECA DE OBJETOS<\/b><\/u><\/p>\n<p>O uso de biblioteca \u00e9 recomendado na maioria das aplica\u00e7\u00f5es. Entretanto, alguns crit\u00e9rios indicam a necessidade da constru\u00e7\u00e3o de objetos:<\/p>\n<ul>\n<li>Repeti\u00e7\u00e3o no uso: quando um mesmo equipamento ou processo ser\u00e1 utilizado mais de uma vez no mesmo projeto.<\/li>\n<li>Procedimentos do conhecimento do usu\u00e1rio: frequentemente, um processo criado por determinada empresa deve ser protegido de c\u00f3pia ou altera\u00e7\u00e3o. Isso \u00e9 comum no caso de integradores de servi\u00e7os ou fabricantes de m\u00e1quinas.<\/li>\n<li>Uso de controladores: um controlador de processo, cujo mapeamento de mem\u00f3ria \u00e9 fixo, pode ser implementado com todas as funcionalidades dispon\u00edveis. A flexibilidade dispon\u00edvel para a constru\u00e7\u00e3o e uso dos objetos no E3 permite que sejam utilizadas posteriormente apenas as vari\u00e1veis de interesse, desprezando-se as demais.<\/li>\n<\/ul>\n<p><u><b>3) ESTUDO DE CASO <\/b><\/u><\/p>\n<p>Para ilustrar o uso de bibliotecas no E3, criaremos o controle de um motor, cujos dados s\u00e3o:<\/p>\n<ul>\n<li>Um tag para temperatura de opera\u00e7\u00e3o.<\/li>\n<li>Um tag de emerg\u00eancia, para bloqueio do funcionamento do motor.<\/li>\n<li>Um tag de comando para ligar e desligar o motor.<\/li>\n<\/ul>\n<p>Tanto o comando quanto o status do motor devem ser mostrados atrav\u00e9s de displays e da mudan\u00e7a da cor do corpo. Al\u00e9m disso, os tags a serem utilizados para o comando do motor devem ser externos \u00e0 biblioteca.<\/p>\n<p><b>Criando o Projeto<\/b><\/p>\n<p>Primeiramente, crie um aplicativo padr\u00e3o atrav\u00e9s do <b>Assistente de Aplica\u00e7\u00f5es<\/b> do E3. Ao ser perguntado sobre drivers, armazenamento e alarmes, responda &#8220;n\u00e3o&#8221; em todos os casos.<\/p>\n<p><b>Criando um XObject<\/b><\/p>\n<p>A seguir, crie uma nova biblioteca de componentes chamada <b>Motores<\/b>, e insira um novo XObject chamado <b>LibMotorDados <\/b>nesta biblioteca. O XObject \u00e9 um objeto de dados e n\u00e3o possui interface, ou seja, ele n\u00e3o pode criar uma caixa de mensagens para algum evento, por exemplo. Para estabelecer a interface com o usu\u00e1rio, veja a cria\u00e7\u00e3o do XControl.<\/p>\n<p>Insira um servidor de dados no objeto <b>LibMotorDados<\/b>, e renomeie-o como <b>Dados<\/b>. Dentro dessa pasta, insira um tag do tipo Demo e edite os seguintes itens:<\/p>\n<ul>\n<li><i>Name<\/i>: TemperaturaMotor<\/li>\n<li><i>Type<\/i>: 0 &#8211; Aleat\u00f3rio<\/li>\n<li><i>Maximum<\/i>: 100<\/li>\n<li><i>Period<\/i>: 1000<\/li>\n<li><i>Scan<\/i>: 1000<\/li>\n<\/ul>\n<p>Esse tag retorna a temperatura de opera\u00e7\u00e3o do motor.<\/p>\n<p>A seguir, crie as seguintes propriedades, que ser\u00e3o utilizadas para comando e retorno de status do motor atrav\u00e9s de um duplo clique sobre o XObject:<\/p>\n<ul>\n<li><i>LigaDesliga <\/i>(Boolean)<\/li>\n<li><i>Estado <\/i>(InternalTag)<\/li>\n<li><i>Temperatura <\/i>(Integer)<\/li>\n<li><i>Emergencia <\/i>(InternalTag)<\/li>\n<\/ul>\n<p>Estas propriedades ser\u00e3o utilizadas para modificar o comportamento do motor quando o projeto estiver sendo executado.<\/p>\n<p>No tag <b>TemperaturaMotor<\/b>, crie uma associa\u00e7\u00e3o entre a propriedade <i>Value <\/i>e o item <b>LibMotorDados.Temperatura<\/b>.<\/p>\n<p>Sempre que determinado valor interno de um XObject precisar ser disponibilizado para ser acessado externamente, ser\u00e1 necess\u00e1rio criar uma associa\u00e7\u00e3o sobre o dado a ser disponibilizado com a propriedade criada para esse dado. Para isso, a associa\u00e7\u00e3o deve seguir o padr\u00e3o <b>NomeDoXObject.Propriedade<\/b>.<\/p>\n<p>Depois, configure a seguinte restri\u00e7\u00e3o ao funcionamento do motor: a propriedade <i>LigaDesliga <\/i>dever\u00e1 ser utilizada para comandar o ligamento ou desligamento do motor. Entretanto, o motor s\u00f3 poder\u00e1 ser ligado se o valor da propriedade <i>Emergencia <\/i>for &#8220;1&#8221;. Caso contr\u00e1rio, o motor n\u00e3o poder\u00e1 ser ligado.<\/p>\n<p>Para implementar essa restri\u00e7\u00e3o, clique com o bot\u00e3o direito sobre a propriedade <i>LigaDesliga <\/i>e acesse as outras propriedades. No evento <i>OnPropertyChanged<\/i>, crie o script mostrado abaixo:<\/p>\n<div align=\"left\"><span style=\"font-family: Courier New;\">\u00a0 IF LibMotorDados.LigaDesliga = true then<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0 IF LibMotorDados.Emergencia = 1 then<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0\u00a0\u00a0 LibMedidores.Estado.Value = 1<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0 End IF<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0 ELSE<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0 LibMedidores.Estado.Value = 0<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0 End IF<\/span><\/div>\n<p>Salve o objeto e registre a biblioteca com um clique com o bot\u00e3o direito. Para ilustrar o uso da biblioteca sem um XControl, vamos trabalhar sobre o projeto que j\u00e1 foi criado, acessando as propriedades atrav\u00e9s de bot\u00f5es e scripts. Em seguida, criaremos um objeto de controle para o motor que estamos desenvolvendo.<\/p>\n<p><b>Utilizando o XObject no projeto<\/b><\/p>\n<p>Para come\u00e7ar, insira uma pasta chamada <b>Motor1 <\/b>dentro da pasta <b>Dados <\/b>criada na aplica\u00e7\u00e3o-padr\u00e3o. Dentro dessa pasta, crie dois tags internos com o nome <b>EmergenciaMotor1 <\/b>e <b>EstadoMotor1<\/b>.<\/p>\n<p>A seguir, insira um objeto <b>LibMotorDados <\/b>no projeto. Fa\u00e7a associa\u00e7\u00f5es entre a propriedade <i>Emergencia <\/i>e o tag <b>EmergenciaMotor1 <\/b>e entre a propriedade <i>Estado <\/i>e o tag <b>EstadoMotor1<\/b>.<\/p>\n<p>Na <b>TelaInicial <\/b>criada no projeto, insira displays e um bot\u00e3o de comando.<\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID13\/Figura1.PNG\" alt=\"\" width=\"469\" height=\"130\" align=\"Baseline\" border=\"0\" \/><br \/>\n<span style=\"font-size: xx-small;\"><b>Figura 1<\/b>: Tela de controle do <b>Motor1<\/b><\/span><\/div>\n<p>Para as propriedades <i>Temperatura <\/i>e <i>Estado<\/i>, devem ser usados displays; j\u00e1 para <i>Emergencia<\/i>, utilize um setpoint.<\/p>\n<p>O display utilizado para a propriedade <i>Estado <\/i>deve ser associado \u00e0 express\u00e3o <b>LibMotorDados1.Estado.Value<\/b> (essa express\u00e3o ficar\u00e1 em vermelho quando mostrada na aba de conex\u00f5es). J\u00e1 o bot\u00e3o de comando <b>LigaDesliga <\/b>deve ter um script do tipo <b>Inverter Valor<\/b> que aponte para a propriedade <i>LigaDesliga<\/i>, e cujos valores sejam <i>False <\/i>e <i>True<\/i>.<\/p>\n<p>Os dois displays inferiores que indicam se o script est\u00e1 funcionando s\u00e3o auxiliares. Para isso, o primeiro display dever\u00e1 apontar para a express\u00e3o <b>Dados.LibMotorDados1.LigaDesliga<\/b>, e o segundo para a express\u00e3o <b>Dados.Motor1.EstadoMotor1.Value<\/b>. Estes displays n\u00e3o existem no objeto de controle definitivo.<\/p>\n<p>Para verificar a funcionalidade do objeto <b>LibMotorDados<\/b>, execute o projeto, modifique a vari\u00e1vel <i>Emergencia <\/i>entre 0 e 1, e tente ligar ou desligar o motor.<br \/>\n<b><br \/>\nCriando um XControl<\/b><\/p>\n<p>Como interface para o motor que est\u00e1 sendo desenvolvido, ser\u00e1 utilizado um item da aba biblioteca <b>Symbol Factory<\/b>, que est\u00e1 na pasta <b>Motors<\/b>. A figura a ser utilizada \u00e9 a <b>3DISAMotor1<\/b>, que \u00e9 a primeira figura da biblioteca. Isso permite que o exemplo aqui descrito seja desenvolvido mesmo com o E3Studio no modo Demo.<\/p>\n<div align=\"center\"><img loading=\"lazy\" title=\"\" src=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID13\/Figura2.PNG\" alt=\"\" width=\"447\" height=\"325\" align=\"Baseline\" border=\"0\" \/><br \/>\n<span style=\"font-size: xx-small;\"><b>Figura 2<\/b>: XControl LibMotor<\/span><\/div>\n<p>Para implementar associa\u00e7\u00f5es e a\u00e7\u00f5es, crie o esqueleto do objeto. Para definir a propriedade <i>Motor <\/i>desse XControl como sendo do tipo <b>LibMotorDados<\/b>, digite o nome completo do tipo, ou clique o bot\u00e3o direito para navegar entre os tipos dispon\u00edveis. Essa defini\u00e7\u00e3o de tipo \u00e9 importante, pois ser\u00e1 necess\u00e1rio utilizar todas as propriedades definidas para o objeto <b>LibMotorDados<\/b>, como por exemplo, a propriedade <i>Emergencia<\/i>.<\/p>\n<p>Para o motor <b>3DISAMotor1<\/b>, a propriedade <i>OverrideFillMode <\/i>deve ser ajustada como <b>2 &#8211; SolidFill<\/b>, e a cor de preenchimento ser verde, cujos valores s\u00e3o <b>87, 255, 87<\/b>.<\/p>\n<p>O valor do display deve ser associado \u00e0 express\u00e3o <b>LibMotor.motor.Temperatura<\/b>, onde:<\/p>\n<ul>\n<li><b>LibMotor<\/b>: nome do XControl.<\/li>\n<li><b>Motor<\/b>: propriedade que indica qual a fonte dos dados a serem mostrados.<\/li>\n<li><b>Temperatura<\/b>: caracter\u00edstica da propriedade Motor, que \u00e9 um dado do tipo <b>LibMotorDados<\/b>.<\/li>\n<\/ul>\n<p>Qualquer associa\u00e7\u00e3o ou script a ser criado em um XControl deve seguir o padr\u00e3o mostrado acima.<\/p>\n<p>O script do bot\u00e3o <b>Liga\/Desliga<\/b> deve ser o seguinte:<\/p>\n<div align=\"left\"><span style=\"font-family: Courier New;\">\u00a0 IF LibMotor.motor.Emergencia = 1 then<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0 LibMotor.motor.LigaDesliga = NOT LibMotor.motor.LigaDesliga<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0 IF LibMotor.motor.LigaDesliga = true then<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0\u00a0\u00a0 LibMotor.motor.Estado.Value = 1<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0 Else<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0\u00a0\u00a0 LibMotor.motor.Estado.Value = 0<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0\u00a0\u00a0 LibMotor.motor.LigaDesliga = false<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0 End IF<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0 Else<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0\u00a0\u00a0 MsgBox &#8220;Motor n\u00e3o pode ser acionado!! Verifique se existem defeitos!!&#8221;<\/span><br \/>\n<span style=\"font-family: Courier New;\">\u00a0 End IF<\/span><\/div>\n<p>A figura <b>3DISAMotor1 <\/b>deve ter associada a sua propriedade <i>OverrideFillColor <\/i>atrav\u00e9s de uma conex\u00e3o por tabela, a express\u00e3o <b>LibMotor.motor.Emergencia*2+LibMotor.motor.Estado.Value<\/b>, que dever\u00e1 ter as seguintes faixas de valores:<\/p>\n<ul>\n<li>Valor m\u00ednimo e m\u00e1ximo = 2 (cor verde)<\/li>\n<li>Valor m\u00ednimo e m\u00e1ximo = 3 (cor vermelha)<\/li>\n<li>Valor m\u00ednimo = 0 e m\u00e1ximo = 1 (cor amarela, piscando com azul)<\/li>\n<\/ul>\n<p>Esses s\u00e3o os poss\u00edveis resultados da express\u00e3o associada \u00e0 propriedade <i>OverrideFillColor<\/i>. Ent\u00e3o, salve a biblioteca e registre-a. Para visualizar o uso do XControl desenvolvido, v\u00e1 at\u00e9 o projeto criado anteriormente e, na <b>TelaInicial<\/b>, insira um objeto <b>LibMotor<\/b>. Na sua propriedade <i>Motor<\/i>, associe o XObject <b>LibMotorDados1<\/b>. Execute o projeto e verifique o resultado. Perceba que o setpoint para a vari\u00e1vel <i>Emergencia <\/i>deve ser mantido, visto que o tag n\u00e3o est\u00e1 dentro dos objetos desenvolvidos.<\/p>\n<p><u><b>4) CONSIDERA\u00c7\u00d5ES FINAIS<\/b><\/u><\/p>\n<p>O uso de tags dos tipos interno e demo auxiliam no entendimento do mecanismo para constru\u00e7\u00e3o dos objetos. Entretanto, \u00e9 poss\u00edvel usar qualquer tipo de tag (por exemplo, um tag PLC ou um tag OPC) para este mesmo prop\u00f3sito.<\/p>\n<p>Existem duas maneiras de adquirir ou controlar tags de equipamentos com os XObjects: colocar o driver de comunica\u00e7\u00e3o e todos os tags internamente ao objeto, ou criar os tags externamente e associar cada um deles a uma propriedade do XObject. O que vai definir a escolha entre essas possibilidades \u00e9 a quantidade de IODrivers dispon\u00edveis e o tipo de uso que se far\u00e1 do objeto.<\/p>\n<p>Por exemplo, para aquisi\u00e7\u00e3o de dados de um controlador de temperatura, pode-se usar o IODriver internamente ao XObject, pois todos os tags s\u00e3o relacionados ao pr\u00f3prio controlador. J\u00e1 para disjuntores de uma subesta\u00e7\u00e3o, \u00e9 prefer\u00edvel criar os tags externamente e ent\u00e3o criar links para os tags no XObject, pois normalmente os dados de uma remota (CLP para \u00e1rea el\u00e9trica) s\u00e3o agrupados em uma mesma sa\u00edda (rede Ethernet ou porta serial, por exemplo) e devem ser tratados separadamente. A mesma l\u00f3gica se aplica para f\u00f3rmulas ou hist\u00f3ricos, que dever\u00e3o ser mantidos em bancos de dados.<\/p>\n<p>Como visto nesse exemplo, um XObject pode servir como propriedade de um outro XObject ou mesmo de um XControl.<\/p>\n<p>\u00c9 importante evitar que uma biblioteca utilize recursos da aplica\u00e7\u00e3o, para que n\u00e3o seja necess\u00e1rio alterar a biblioteca quando for utilizar em outro projeto. Por exemplo, se a biblioteca utilizar um hist\u00f3rico, pode-se passar o banco de dados como par\u00e2metro, ou seja, o hist\u00f3rico pode ser salvo em qualquer banco de dados, desde que esse seja usado como par\u00e2metro na biblioteca.<\/p>\n<p>Outros exemplos de bibliotecas est\u00e3o dispon\u00edveis no projeto Demo que acompanha a instala\u00e7\u00e3o completa do Elipse E3.<\/p>\n<h3>Anexos:<\/h3>\n<p><a href=\"\/wp-content\/uploads\/2019\/03\/ExElipseX.zip\">ExElipseX<\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>O uso de bibliotecas no E3 \u00e9 altamente recomend\u00e1vel, pois elas representam um grande ganho de produtividade para a aplica\u00e7\u00e3o. Algumas &#8230;.<br \/>\nAutor<br \/>\nPaulo Henrique Soares Maciel<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0},"categories":[616],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Desenvolvendo bibliotecas no E3. - Elipse Knowledgebase<\/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:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Desenvolvendo bibliotecas no E3.\" \/>\n<meta property=\"og:description\" content=\"O uso de bibliotecas no E3 \u00e9 altamente recomend\u00e1vel, pois elas representam um grande ganho de produtividade para a aplica\u00e7\u00e3o. Algumas .... Autor Paulo Henrique Soares Maciel\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/\" \/>\n<meta property=\"og:site_name\" content=\"Elipse Knowledgebase\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/elipsesoftware\" \/>\n<meta property=\"article:published_time\" content=\"2019-03-25T20:30:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-03-28T19:45:13+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID13\/Figura1.PNG\" \/>\n<meta name=\"author\" content=\"Elipse Software\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Elipse Software\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/\"},\"author\":{\"name\":\"Elipse Software\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/person\/def69ea453ea60b250497b89225a9f87\"},\"headline\":\"Desenvolvendo bibliotecas no E3.\",\"datePublished\":\"2019-03-25T20:30:08+00:00\",\"dateModified\":\"2024-03-28T19:45:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/\"},\"wordCount\":1668,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#organization\"},\"articleSection\":[\"XControl \/ XObject \/ Lib\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/\",\"url\":\"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/\",\"name\":\"[:pt]Desenvolvendo bibliotecas no E3.[:] - Elipse Knowledgebase\",\"isPartOf\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#website\"},\"datePublished\":\"2019-03-25T20:30:08+00:00\",\"dateModified\":\"2024-03-28T19:45:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\/\/kb.elipse.com.br\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Desenvolvendo bibliotecas no E3.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kb.elipse.com.br\/#website\",\"url\":\"https:\/\/kb.elipse.com.br\/\",\"name\":\"Elipse Knowledgebase\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kb.elipse.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kb.elipse.com.br\/#organization\",\"name\":\"Elipse Software\",\"url\":\"https:\/\/kb.elipse.com.br\/\",\"sameAs\":[\"http:\/\/www.facebook.com\/elipsesoftware\"],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png\",\"contentUrl\":\"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png\",\"width\":161,\"height\":58,\"caption\":\"Elipse Software\"},\"image\":{\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/person\/def69ea453ea60b250497b89225a9f87\",\"name\":\"Elipse Software\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/kb.elipse.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ff1f7ec38f4687b06f6851d97b3cd2d0?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ff1f7ec38f4687b06f6851d97b3cd2d0?s=96&d=mm&r=g\",\"caption\":\"Elipse Software\"},\"url\":\"https:\/\/kb.elipse.com.br\/en\/author\/webmasterelipse-com-br\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Desenvolvendo bibliotecas no E3. - Elipse Knowledgebase","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:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/","og_locale":"en_US","og_type":"article","og_title":"[:pt]Desenvolvendo bibliotecas no E3.[:] - Elipse Knowledgebase","og_description":"[:pt]O uso de bibliotecas no E3 \u00e9 altamente recomend\u00e1vel, pois elas representam um grande ganho de produtividade para a aplica\u00e7\u00e3o. Algumas .... Autor Paulo Henrique Soares Maciel[:]","og_url":"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/","og_site_name":"Elipse Knowledgebase","article_publisher":"http:\/\/www.facebook.com\/elipsesoftware","article_published_time":"2019-03-25T20:30:08+00:00","article_modified_time":"2024-03-28T19:45:13+00:00","og_image":[{"url":"http:\/\/kb.elipse.com.br\/pt-br\/images\/ID13\/Figura1.PNG"}],"author":"Elipse Software","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Elipse Software","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/#article","isPartOf":{"@id":"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/"},"author":{"name":"Elipse Software","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/person\/def69ea453ea60b250497b89225a9f87"},"headline":"Desenvolvendo bibliotecas no E3.","datePublished":"2019-03-25T20:30:08+00:00","dateModified":"2024-03-28T19:45:13+00:00","mainEntityOfPage":{"@id":"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/"},"wordCount":1668,"commentCount":0,"publisher":{"@id":"https:\/\/kb.elipse.com.br\/#organization"},"articleSection":["XControl \/ XObject \/ Lib"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/","url":"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/","name":"[:pt]Desenvolvendo bibliotecas no E3.[:] - Elipse Knowledgebase","isPartOf":{"@id":"https:\/\/kb.elipse.com.br\/#website"},"datePublished":"2019-03-25T20:30:08+00:00","dateModified":"2024-03-28T19:45:13+00:00","breadcrumb":{"@id":"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/kb.elipse.com.br\/desenvolvendo-bibliotecas-no-e3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/kb.elipse.com.br\/en\/"},{"@type":"ListItem","position":2,"name":"Desenvolvendo bibliotecas no E3."}]},{"@type":"WebSite","@id":"https:\/\/kb.elipse.com.br\/#website","url":"https:\/\/kb.elipse.com.br\/","name":"Elipse Knowledgebase","description":"","publisher":{"@id":"https:\/\/kb.elipse.com.br\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kb.elipse.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/kb.elipse.com.br\/#organization","name":"Elipse Software","url":"https:\/\/kb.elipse.com.br\/","sameAs":["http:\/\/www.facebook.com\/elipsesoftware"],"logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/","url":"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png","contentUrl":"https:\/\/kb.elipse.com.br\/wp-content\/uploads\/2019\/05\/schererelipse-com-br\/logoElipse.png","width":161,"height":58,"caption":"Elipse Software"},"image":{"@id":"https:\/\/kb.elipse.com.br\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/person\/def69ea453ea60b250497b89225a9f87","name":"Elipse Software","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kb.elipse.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ff1f7ec38f4687b06f6851d97b3cd2d0?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ff1f7ec38f4687b06f6851d97b3cd2d0?s=96&d=mm&r=g","caption":"Elipse Software"},"url":"https:\/\/kb.elipse.com.br\/en\/author\/webmasterelipse-com-br\/"}]}},"_links":{"self":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts\/287"}],"collection":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/comments?post=287"}],"version-history":[{"count":7,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts\/287\/revisions"}],"predecessor-version":[{"id":16209,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/posts\/287\/revisions\/16209"}],"wp:attachment":[{"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/media?parent=287"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/categories?post=287"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kb.elipse.com.br\/en\/wp-json\/wp\/v2\/tags?post=287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}