{"id":64,"date":"2013-02-12T10:00:46","date_gmt":"2013-02-12T09:00:46","guid":{"rendered":"http:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?p=64"},"modified":"2013-07-16T10:09:06","modified_gmt":"2013-07-16T09:09:06","slug":"sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/","title":{"rendered":"[SharePoint2013] Extendiendo capacidades a las utilidades \u00abbase\u00bb de SharePoint"},"content":{"rendered":"<p>Siempre he considerado que SharePoint es una gran herramienta para desarrollar y que hay muchas cosas que nos pueden valer para nuestros desarrollos, pero naturalmente como en todo en esta vida hay cosas que se pueden mejorar y son cosas que son peque\u00f1os detalles. Estos detalles que son los m\u00e1s peque\u00f1os son lo que hacen que se gane una mala reputaci\u00f3n.<br \/>\nPor ejemplo una de estas cosas que m\u00e1s chocan vienen con esta\u00a0librer\u00eda\u00a0SPUtility esta librer\u00eda propia de SharePoint nos proporciona una serie de funciones\/procedimientos que son muy validas para nuestros desarrollos a diarios pero algo que\u00a0pod\u00eda\u00a0ser o considerarse brillante no es mas que algo que esta bien y en parte la tienen en casos como la siguiente funci\u00f3n \u00a0SendMail.<\/p>\n<p><!--more-->Esta funci\u00f3n como su nombre indica esta funci\u00f3n\u00a0env\u00eda\u00a0mails en base a una serie de\u00a0par\u00e1metros. Pero tiene varios inconvenients la primera y grande es que no permite enviar ficheros adjuntos y la segunda es que esta limitada el n\u00famero de caracteres que podemos enviar en cada correo. Mi opini\u00f3n es que esta funci\u00f3n esta heredada desde el 2003 y nadie de Microsoft se ha sentado y ha pensado en como mejorarla y adaptarla a los circunstancias actuales.<\/p>\n<p>Pero como por suerte o por desgracia (seg\u00fan con la persona que hables para mi suerte) SharePoint puede extender capacidades que hay en ASP.NET pues utilizando el servidor SMTP que hay en SharePoint podemos crearnos una funci\u00f3n en la que implementemos un\u00a0envi\u00f3\u00a0de mails pero que podamos hacer lo mismo que en cualquier servidor SMTP. El c\u00f3digo no tiene mucho misterio y seria el siguiente :<\/p>\n<blockquote>\n<pre> public static ResponseWCF SendMail(string sender, List&lt;string&gt; recipients, List&lt;string&gt; cc, string subject, string body, List&lt;FileAtachmenet&gt; atachment)            \r\n        {\r\n            ResponseWCF result = new ResponseWCF();\r\n\r\n            if (recipients == null)\r\n            {\r\n                result.code = 2;\r\n                return result;\r\n            }\r\n            if (cc == null) cc = new List&lt;string&gt;();\r\n            if (atachment == null) atachment = new List&lt;FileAtachmenet&gt;();\r\n            try\r\n            {                                \r\n                string smtpServer = SPAdministrationWebApplication.Local.OutboundMailServiceInstance.Server.Address;                \r\n                string smtpFrom = string.IsNullOrEmpty(sender) ? SPAdministrationWebApplication.Local.OutboundMailSenderAddress : sender;\r\n                MailAddressCollection toCollecion = new MailAddressCollection();\r\n                foreach (string elemento in recipients)\r\n                {\r\n                    toCollecion.Add(new MailAddress(elemento));\r\n                }\r\n                MailAddressCollection ccColection = new MailAddressCollection();\r\n                foreach (string elemento in cc)\r\n                {\r\n                    ccColection.Add(new MailAddress(elemento));\r\n                }\r\n                MailMessage mailMessage = new MailMessage(smtpFrom,toCollecion.ToString());\r\n                if (cc.Count &gt; 0)\r\n                {\r\n                    mailMessage.CC.Add(ccColection.ToString());\r\n                }\r\n                mailMessage.Subject = subject;\r\n                mailMessage.Body = body;\r\n                mailMessage.IsBodyHtml = true;\r\n\r\n                    if (atachment.Count &gt; 0)\r\n                    {\r\n                        foreach (FileAtachmenet elemento in atachment)\r\n                        {\r\n                            Stream stream = new MemoryStream(elemento.atachment);\r\n                            Attachment atach = new Attachment(stream, elemento.name);\r\n                            mailMessage.Attachments.Add(atach);\r\n                        }\r\n                    }                                                \r\n                SmtpClient smtpClient = new SmtpClient(smtpServer);\r\n                smtpClient.Send(mailMessage);\r\n                result.code = 0;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                log.Error(ex.ToString());\r\n                result.code = 1;\r\n                result.exception += ex.ToString();\r\n            }\r\n            return result;\r\n        }<\/pre>\n<\/blockquote>\n<p>Lo que tiene de interesante es que este c\u00f3digo lo podemos utilizar dentro de una de nuestras librer\u00edas propias y utilizarlo en todos los proyectos, con lo que estar\u00edamos reutilizando una funci\u00f3n muy interesante. Pero todav\u00eda le podemos dar un toque mucho mejor y ese no es otro es que todas las aplicaciones de nuestra empresa\/organizaci\u00f3n utilicen esta funci\u00f3n independiente de la tecnolog\u00eda con la que est\u00e1n implantado. A que mola? Pues para ello no har\u00eda falta nada m\u00e1s que crearnos un servicio WCF dentro de nuestro SharePoint en el que tuvi\u00e9ramos alojado esta funcionalidad y ya tendr\u00edamos algo centralizado, reutilizado y de calidad. Para que os hagais una idea esta servicio lo tenenmos en funcionamiento en un cliente con una arquitectura SOA con muchas aplicaciones JAVA y se utiliza SharePoint como Gestor documental y para elementos de colaboraci\u00f3n, es decir SharePoint no es un solar y puede estar muy presente en cualquier organizaci\u00f3n.<br \/>\nMuchas veces buscamos soluciones m\u00e1s complicadas y m\u00e1s populares para dar soluciones a problemas que nosotros mismos nos buscamos. Hay que quitar el mito de que desarrollar en SharePoint va contra los desarrolladores y que no se pueden dar soluciones de calidad, escalabes y reutilizables para muestra este bot\u00f3n.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>Siempre he considerado que SharePoint es una gran herramienta para desarrollar y que hay muchas cosas que nos pueden valer para nuestros desarrollos, pero naturalmente como en todo en esta vida hay cosas que se pueden mejorar y son cosas &hellip; <a href=\"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,11],"tags":[25,151,27,29],"class_list":["post-64","post","type-post","status-publish","format-standard","hentry","category-buenas-practicas","category-sharepoint-2013","tag-sendmail","tag-sharepoint-2013","tag-sputility-buenas-practicas","tag-visual-studio-2012"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>[SharePoint2013] Extendiendo capacidades a las utilidades &quot;base&quot; de SharePoint - Desarrollando sobre SharePoint<\/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:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"[SharePoint2013] Extendiendo capacidades a las utilidades &quot;base&quot; de SharePoint - Desarrollando sobre SharePoint\" \/>\n<meta name=\"twitter:description\" content=\"Siempre he considerado que SharePoint es una gran herramienta para desarrollar y que hay muchas cosas que nos pueden valer para nuestros desarrollos, pero naturalmente como en todo en esta vida hay cosas que se pueden mejorar y son cosas &hellip; Continue reading &rarr;\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adri\u00e1n D\u00edaz\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\\\/\"},\"author\":{\"name\":\"Adri\u00e1n D\u00edaz\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"headline\":\"[SharePoint2013] Extendiendo capacidades a las utilidades \u00abbase\u00bb de SharePoint\",\"datePublished\":\"2013-02-12T09:00:46+00:00\",\"dateModified\":\"2013-07-16T09:09:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\\\/\"},\"wordCount\":519,\"commentCount\":0,\"keywords\":[\"sendmail\",\"sharepoint 2013\",\"sputility. buenas practicas\",\"visual studio 2012\"],\"articleSection\":[\"buenas practicas\",\"sharepoint 2013\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\\\/\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\\\/\",\"name\":\"[SharePoint2013] Extendiendo capacidades a las utilidades \\\"base\\\" de SharePoint - Desarrollando sobre SharePoint\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\"},\"datePublished\":\"2013-02-12T09:00:46+00:00\",\"dateModified\":\"2013-07-16T09:09:06+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\\\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/\",\"name\":\"Desarrollando sobre SharePoint\",\"description\":\"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/#\\\/schema\\\/person\\\/c9bfaede1bfba9564bb7f500788782bb\",\"name\":\"Adri\u00e1n D\u00edaz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g\",\"caption\":\"Adri\u00e1n D\u00edaz\"},\"description\":\"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/desarrollandosobresharepoint\\\/author\\\/desarrollandosobresharepoint\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"[SharePoint2013] Extendiendo capacidades a las utilidades \"base\" de SharePoint - Desarrollando sobre SharePoint","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:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/","twitter_card":"summary_large_image","twitter_title":"[SharePoint2013] Extendiendo capacidades a las utilidades \"base\" de SharePoint - Desarrollando sobre SharePoint","twitter_description":"Siempre he considerado que SharePoint es una gran herramienta para desarrollar y que hay muchas cosas que nos pueden valer para nuestros desarrollos, pero naturalmente como en todo en esta vida hay cosas que se pueden mejorar y son cosas &hellip; Continue reading &rarr;","twitter_misc":{"Escrito por":"Adri\u00e1n D\u00edaz","Tiempo de lectura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/#article","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/"},"author":{"name":"Adri\u00e1n D\u00edaz","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"headline":"[SharePoint2013] Extendiendo capacidades a las utilidades \u00abbase\u00bb de SharePoint","datePublished":"2013-02-12T09:00:46+00:00","dateModified":"2013-07-16T09:09:06+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/"},"wordCount":519,"commentCount":0,"keywords":["sendmail","sharepoint 2013","sputility. buenas practicas","visual studio 2012"],"articleSection":["buenas practicas","sharepoint 2013"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/","name":"[SharePoint2013] Extendiendo capacidades a las utilidades \"base\" de SharePoint - Desarrollando sobre SharePoint","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website"},"datePublished":"2013-02-12T09:00:46+00:00","dateModified":"2013-07-16T09:09:06+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/sharepoint2013-extendiendo-capacidades-a-las-utilidades-base-de-sharepoint\/"]}]},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#website","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/","name":"Desarrollando sobre SharePoint","description":"Arquitectura, buenas pr\u00e1cticas y desarrollo sobre la nueva herramienta de Microsoft SharePoint 2016","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/#\/schema\/person\/c9bfaede1bfba9564bb7f500788782bb","name":"Adri\u00e1n D\u00edaz","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fe10b9eaf8ce4565ec75fba5a0d121c16186696e515cad2bedd42f6cf54e2007?s=96&d=mm&r=g","caption":"Adri\u00e1n D\u00edaz"},"description":"Adri\u00e1n D\u00edaz es Ingeniero Inform\u00e1tico por la Universidad Polit\u00e9cnica de Valencia. Es MVP de Microsoft en la categor\u00eda Office Development desde 2014, MCPD de SharePoint 2010, Microsoft Active Profesional y Microsoft Comunity Contribuitor 2012. Cofundador del grupo de usuarios de SharePoint de Levante LevaPoint. Lleva desarrollando con tecnolog\u00edas Microsoft m\u00e1s de 10 a\u00f1os y desde hace 3 a\u00f1os est\u00e1 centrado en el desarrollo sobre SharePoint. Actualmente es Software &amp; Cloud Architect Lead en ENCAMINA.","url":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/author\/desarrollandosobresharepoint\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/64","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/comments?post=64"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/posts\/64\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/media?parent=64"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/categories?post=64"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/desarrollandosobresharepoint\/wp-json\/wp\/v2\/tags?post=64"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}