Mostrando entradas con la etiqueta Freelance. Mostrar todas las entradas
Mostrando entradas con la etiqueta Freelance. Mostrar todas las entradas

miércoles, 5 de julio de 2017

Guia de Implementación de EXTENSIONES GENEXUS - PARTE 5

Crear Objetos GeneXus



  Para cumplir con los objetivos de la extensión en ocasiones se necesita crear objetos GeneXus mediante código fuente, en los siguientes ejemplos se muestran la creación de los objetos: folder, procedure, structured data type, dataprovider, dominio y external object.

Objeto Folder

  Referenciar las siguientes librerias:
Artech.Architecture.Common.Objects
Artech.Architecture.UI.Framework.Services
  Antes de crear cualquier objeto se necesita comprobar si la base de conocimientos está disponible, con el siguiente código:
 if(UIServices.KB != null && UIServices.KB.CurrentModel != null){}

Así se comprueba que la KB y el Modelo están disponibles, entonces puede recién crearse objetos.
  Para crear un folder en el árbol del Folder View de GeneXus:
Se comprueba si el nombre “iQueries” para el Folder existe:
Folder folder = folder = Folder.Get(UIServices.KB.CurrentModel, “iQueries”);
if (folder == null){}
 Entonces se pregunta si el folder (en éste caso “iQueries”) no existe, se procede a crear el folder:
 folder = new Folder(UIServices.KB.CurrentModel);
 folder.Parent = Folder.GetRoot(UIServices.KB.CurrentModel);
 folder.Name = “iQueries”;
 folder.Save();

Objeto Procedure
  Referenciar las siguientes librerias:
 Artech.Architecture.Common.Objects
Artech.Architecture.UI.Framework.Services
Artech.Genexus.Common.Objects
Artech.Genexus.Common

  En el paso anterior se creó el objeto folder, el siguiente procedure que será creado se colocará ahí:

 Recuperar el folder “iQueries”:
 Folder folder = Folder.Get(UIServices.KB.CurrentModel, “iQueries”);

 Comprobar que el procedure no existe:
 Procedure procedure = Procedure.Get(UIServices.KB.CurrentModel, “MiProcedimiento”);
if(procedure == null){}

Se crea y coloca el procedure en el Folder:
procedure = new Procedure(UIServices.KB.CurrentModel);
procedure.Name = “MiProcedimiento”;
procedure.Parent = folder;
procedure.Save();


  NOTA: Para que el objeto procedure aparezca directamente en el árbol de folder view de GeneXus Ev2, se establece la propiedad parent del procedure del siguiente modo:
 procedure.Parent = Folder.GetRoot(UIServices.KB.CurrentModel);
Variables

  Para agregar variables al objeto procedure anterior el siguiente código ayuda a hacerlo:

 Variable variable = new Variable(procedure.Variables);
variable.Name = “query”;
variable.Type = eDBType.VARCHAR; //definimos el tipo
variable.Length = 9999;          //definimos el tamaño                procedure.Variables.Add(var);
procedure.Save();
Source

  Para escribir directamente en el source del procedure, el siguiente código ayuda a hacerlo:

 Utilizando la variable anteriormente creada:

 string source = “&query = ‘Hola mundo con procedure’”;
procedure.ProcedurePart.Source = source;
procedure.Save();
Rules

  Para agregar las rules de in u out en un objeto procedure el siguiente código ejemplifica como hacerlo:

 procedure.Rules.Source = “parm(out:&variable);”;
procedure.Save();

  En la regla se establece a la variable anteriormente creada que será un parámetro out, en caso de querer que sea una rule de in solo se debe sustituir el out por el in.

Structured Data Type

  Referenciar las siguientes librerías:
 Artech.Architecture.Common.Objects
Artech.Architecture.UI.Framework.Services
Artech.Genexus.Common.Objects
Artech.Genexus.Common.Parts.SDT
 Recuperar el folder:
 Folder folder = Folder.Get(UIServices.KB.CurrentModel, “iQueries”);
 Comprobar si el objeto no existe:
 SDT miSdt = SDT.Get(UIServices.KB.CurrentModel, “miSdt”);
if(miSdt == null){}

 Crear y colocar el objeto en el folder:
 miSdt = new SDT(UIServices.KB.CurrentModel);
miSdt.Parent = folder;
miSdt.Name = “miSdt”;

  Agregar un nivel al objeto Structured Data Type y establecer la propiedad IsCollection a True:

 SDTLevel sdtLevel = miSdt.SDTStructure.Root;
sdtLevel.Name = “Item”;
sdtLevel.Items.Clear();
sdtLevel.IsCollection = true;
sdtLevel.CollectionItemName = “Item”;
 Crear y agregar items al level recién creado:
 SDTItem item = new SDTItem(sdtLevel.SDTStructure);
item.Name = “item1”;
item.Type = eDBType.VARCHAR; //definimos el tipo
item.Length = 9999;          //definimos el tamaño
item.IsCollection = false;
sdtLevel.AddItem(item);
miSdt.Save();

DataProvider

  Referenciar las siguientes librerias:
 Artech.Architecture.Common.Objects
Artech.Architecture.UI.Framework.Services
Artech.Genexus.Common.Objects
 Recupera el folder:
 Folder folder = Folder.Get(UIServices.KB.CurrentModel, “iQueries”);
 Comprobar si existe el DataProvider:
 DataProvider dataProvider = DataProvider.Get(UIServices.KB.CurrentModel, “MiDataProvider”);
 if(dataProvider == null){}
 Crear y colocar el DataProvider en el folder:
 dataProvider = new DataProvider(UIServices.KB.CurrentModel);
dataProvider.Name = “MiDataProvider”;
dataProvider.Parent = folder;
dataProvider.Save();

Source

  En éste ejemplo se debe suponer que se tiene el siguiente objeto structured data type como muestra la figura 7:





Figura 7. SDTEjemplo. Fuente. Elaboración propia.

  En la propiedad source del objeto dataprovider establecer la estructura del structured data type, de la siguiente forma:

 dataProvider.DataProviderSource.Source = “jqSelectData\r\n{ Item\r\n { \r\n Id = ‘1’\r\n Descr = ‘Opción 1’ \r\n Selected = False \r\n } \r\n }”;
dataProvider.Save();

Propiedades

  El objeto dataprovider cuenta con el método setpropertyvalue para establecer sus propiedades mediante código fuente, de la siguiente forma:

Propiedad: Expose as Web Service: dataProvider.SetPropertyValue(Properties.DPRV.ExposeAsWebService, true);
Propiedad: CollectioName: dataProvider.SetPropertyValue(Properties.DPRV.CollectionName, “jqSelectData”);

Propiedad: Output:
dataProvider.SetPropertyValue(Properties.DPRV.Output, new KBObjectReference(jqSelectData.Key));       
       
Dominio
  El siguiente código ayuda a crear dominios:
 Recuperar el folder:

 Folder folder = Folder.Get(UIServices.KB.CurrentModel, “iQueries”);
 Comprobar si existe el Dominio:
 Domain miDominio = Domain.Get(UIServices.KB.CurrentModel, “MiDominio”);
 if(miDominio == null){}

 Crear y colocar el Dominio en el folder:
 Domain miDominio = new Domain(UIServices.KB.CurrentModel);
miDominio.Name = “miDominio”;
miDominio.Parent = folder;
miDominio.Type = eDBType.VARCHAR;
miDominio.Length = 256;
miDominio.Save();

External Object

  El objeto External Object (EO) permite al desarrollador agregar funcionalidad a su aplicación. El EO debe tener asociado alguna librería que respalde su comportamiento, la librería debe ser realizada en el mismo lenguaje que la aplicación principal está siendo compilada por GeneXus Ev2.

  Por ejemplo para el caso que la aplicación esté siendo compilada en Java, entonces la librería debería ser un .jar. Del mismo modo para el caso que la aplicación esté siendo compilada en C#, la librería debe ser .dll. De éste modo no se producirá ningún conflicto al momento de compilar la aplicación completa.

  Para crear un external object se debe tener un proyecto que nos genere .dll o .jar según sea el caso.

  El siguiente ejemplo mostrará una clase llamada CLauncher, el cual está hecha en C#, y el nombre del ensamblado es iLauncher.

 namespace iLauncher
{
 public class CLauncher
 {
  public string server;
  public string dbname;
  public string dbmsport;
  public string user;
  public string password;
  public string trusted;
  public string parent;
  public string child;
  public string ns;
   private DataSet dataSet;
  private SqlDataAdapter dataAdapter;
  public CLauncher(){}
   public String ExecuteQueryToXml(string query){
    //Lógica del método
   }
 }
}

 En la lógica del método se puede definir el comportamiento del EO.
  Agregar la librería a GeneXus Ev2, ir al menú Tools, menú contextual Application Integration, el cual muestra las siguientes opciones:

 .Net Assembly Import
 Java Class Import
 WSDL Import
 XML Schema Import

  Para el ejemplo se elegirá la opción .Net Assembly Import, mostrará el siguiente cuadro de diálogo y buscar la ruta donde se encuentra la librería, como muestra la figura 8:



Figura 8. Importación de external object paso 1. Fuente: Elaboración propia.


Presionar Next y mostrará el siguiente cuadro de diálogo como se muestra en la figura 9:



Figura 9. Importación de external object paso 2. Fuente: Elaboración propia.

  No es necesario que se establezcan valores a los campos Prefix y Folder, presionar Next y se muestra el siguiente cuadro de diálogo como se ve en la figura 10:


Figura 10. Importación de external object paso 3. Fuente: Elaboración propia.

  En éste cuadro de diálogo muestra el contenido de la librería, se indica que la librería tiene tres clases definidas: CCondition, CLauncher y CMain. Puede elegirse cuál de ellos se importe en el external object, por cada clase se creará un external object, una vez elegido la clase puede elegirse los atributos y métodos a importar. Luego presionar Import.
  NOTA: Para que los atributos o métodos se muestren tienen que ser declarados como public en la librería, caso contrario se le declaran como private.

 La siguiente figura 11 muestra el external object creado de la clase CLauncher:



Figura 11. External object importado. Fuente: Elaboración propia.

 Note que por cada atributo en la clase se creó una propiedad en el external object y por cada método se creó uno. Observe que los siguientes atributos no se importaron en el external object:

 private DataSet dataSet;
 private SqlDataAdapter dataAdapter;
 Fíjese en la figura 12 las propiedades del external object, el Name, el Namespace y el AssemblyName son las mismas que la librería.



Figura 12: Propiedades del external object importado. Fuente: Elaboración propia.

  NOTA: Una vez agregado el external object es necesario que la librería (en éste caso iLauncher.dll) se copie a la carpeta bin del proyecto:

 Ejemplo: D:\Tesis\Proyecto\Rostros\CSharpModel\web\bin

 Donde:

D:\Tesis\Proyecto: Es el directorio donde está ubicado el proyecto.

Rostros: Nombre del proyecto.

  Luego de importar el external object es necesario que se haga un Rebuild All en el proyecto principal.

¿Cómo utilizamos el External Object?

  Se crea una variable del tipo de external object que se ah importado, en el objeto web panel, como se muestra en la figura 13:



Figura 13: Variable del external object en un web panel. Fuente: Elaboración propia.

En la parte Events del Web Panel:

Establecer valores para las propiedades de la nueva variable.
 &clauncher.parent = ‘SdtQueryRos’
&clauncher.child = ‘SdtQueryRos.Item’
&clauncher.ns = ‘Rostros’
&sqlQuery = ‘select * from ros’

Invocar al método de la variable.

 &sqlResult = &clauncher.ExecuteQueryToXml(&sqlQuery)

miércoles, 9 de noviembre de 2016

Guia de Implementación de EXTENSIONES GENEXUS - PARTE 1


En la presente publicación (y en las posteriores cinco) hablaremos sobre el desarrollo de extensiones para GeneXus. Para lo cual los temas o secciones que trataremos son los siguientes:
  • La sección uno trata del identificador único global que cada objeto en GeneXus debe tener para su respectiva identificación.
  • La sección dos describe los elementos que son creados al instalar la plataforma para el desarrollo de extensiones.
  • La sección tres trata sobre el inicio de proyectos de extensiones.
  • La sección cuatro se refiere al ejemplo de creación de extensión, en el cual se describe paso a paso como se debe de implementar.
  • La sección cinco toca el tema de creación de objetos GeneXus, mostrando ejemplos prácticos para su fácil compresión.
  • La última y no por eso menos importante sección seis muestra un ejemplo práctico como obtener las tablas y campos de la base de datos de la aplicación.


  1. Identificador único global.
El Identificador Único Global (GUID por sus siglas en inglés Globally Unique Identifier), es incorporado desde GeneXus X Ev1 donde todos los objetos tienen un GUID que es la clave única que identifica a cada uno de ellos (GuidGenerator, 2012).

¿Para qué sirve el identificador único global?

Por ejemplo si se quiere exportar objetos desde cierta base de conocimiento (KB por sus siglas en inglés Knowledge Base) a otra, la GUID ayuda a diferenciar objetos que tienen el mismo nombre, y posteriormente si se decide importar los objetos a la KB original los objetos podrán actualizarse identificándose por la GUID (Blog de Marcos Crispino, 2009).

Conseguir el identificar único global.

Hay dos formas de conseguir el identificador único global para objetos GeneXus, la primera es desde la IDE de Visual Studio: Menú Herramientas, Opción Crear GUID, la siguiente figura 1 muestra el cuadro de diálogo para obtener el identificador único global.
D:\Tesis\Imágenes\GUID2.jpg
Figura 1.  Creación del identificador único global con visual studio 2005. Fuente: Elaboración propia.

La segunda forma es mediante página web (https://guidgenerator.com, 2012), presionando el botón “Generate some GUIDs!”, como se muestra en la figura 2:

D:\Tesis\Imágenes\GUID.jpg
Figura 2. Creación del identificador único global desde página web. Fuente: Elaboración propia.


Por Ivan Gallegos

lunes, 22 de septiembre de 2014

Entrevista: Ventajas y Desventajas Migración Genexus 7.5 a Evolution 3 (Win)


En esta nota vamos a hablar con Adrián García de A3L, para que nos cuente sobre la experiencia de la migración de un sistema en plataforma win desarrollado originalmente en genexus 7.5 en Visual Basic con SQL Server.

"A3L es un grupo de profesionales independientes argentinos que han unido todos sus años de experiencia para lograr un grupo de programadores y trabajar en conjunto de manera freelance, enfocando la mayoría de sus proyectos con la herramienta Genexus."




"Los beneficios del lado del usuario, se van ganando a medida que el programador desarrolle funcionalidades adicionales, o depure el código viejo"


GxFreelance : Adrián,  cuéntanos un poco como surgió y porqué decidieron hacer una migración de genexus 7.5 a Evolution 3 (Win)

Adrián
Todo comenzó por un cliente nuestro que nos pidió si nos animábamos a hacer la migración de su sistema para aprovechar las bondades de genexus evo 3 y nos entusiasmamos enseguida, ya que por lo general el que no se anima a migrar, es el ciente. Además era un buen desafío ya que prácticamente nadie lo está haciendo y todo está enfocado en web.

GxFreelance:  Que complicaciones encontraron para hacer la migración ?

Adrián
Requiere bastante dedicación, y uno se encuentra con muchos ajustes para realizar, pero no hubo ningún problema dramático, todo solucionable. 

GxFreelance: Crees que valió la pena hacer la migración? Qué ventajas tiene?

Adrián
La 7.5 es una versión paleolítica, si bien en su tiempo y contexto fué genial, ahora es como comparar un Fiat 600 con una Ferrari, así que hagamos más abarcativo el análisis de los pros y los contras de la evolution 3 tomando en cuenta todas las versiones anteriores, desde la 7.5 hasta la evolution 2. 

Al migrar a la evolution 3, es cierto que la recompensa no es tan alevosa comparando con los proyectos web y de Smart devices, pero los beneficios generales en la usabilidad de la herramienta son sensibles. A la gente que viene de las versiones históricas nos inundó una nostalgia, en la era pre-evolution los builds eran rápidos, volaban!, y por eso siempre resentimos la llegada del progreso, que también trajo una lentitud un tanto odiosa. Por suerte los amigos de Artech encontraron la magia necesaria para volver a tener los mismos tiempos de generación y especificación, logrando que un "build all" en vez de tardar casi el doble (ev1 y ev2), sea igual que antes, incluso un poco más rápido. Además, el especificador se hizo más inteligente, armando los specs solito en segundo plano, mientras seguimos haciendo otras cosas,  y exprimiendo al máximo los núcleos de los procesadores (info sobre "Concurrent generation" y "Concurrent specification instances" ).

Los beneficios del lado del usuario, se van ganando a medida que el programador desarrolle funcionalidades adicionales, o depure el código viejo, usando el nuevo repertorio de palabras claves que llevan construir consultas más eficientes, e interfaces más amistosas. En la 7.5 no existía ni la cláusula "when" para los for eachs. Por otro lado, al comparar un query hecho a mano con uno hecho por genexus, casi siempre la celeridad de respuesta era equitativa, pero a veces Gx se quedaba atrás. Faltaba algún un equivalente al statetment "Distinct", que se logra ahora en la evo3 con la cláusula "Unique".

Otros beneficios: Gestión de versiones de la kb (congelar y hacer branches). Log de cambios por objeto. Nuevas librerías de encriptación que incluyen generación de firma digital. Posibilidad de trabajar en equipo sin miedo a solaparnos (GxServer).

GxFreelance: Cuales son las desventajas de la migración?

Adrián:
La contra tiene que ver con todo lo inherente a la implementación de algo que lo tenemos que probar entero, que lleva una dedicación considerable y una política que entienda que es una inversión, en ese sentido creo que es necesario considerar hacer algún tipo de descuento monetario para incentivar la decisión, si nos lo podemos permitir. 

GxFreelance: Que recomendaciones le darías a las personas que no se animan a migrar?

Si la cuestión es migrar una kb de la 7.5 concretamente, les diría a los desarrolladores que recapaciten sobre lo precario de algunas cosas, se los diría en una palabra: "CTRL"... 
y una letra:.... "Z".
Acuérdense de que en los procedures de la 7.5, el ctrl + z (deshacer) no anda!!!, ni tampoco se colorean las palabras.

GxFreelance: Cuanto tiempo puede llevar migrar una kb grande?

Adrián:
Según esta experiencia, la estimación que sugiero es multiplicar los GxPoints de la kb por 0,15 para obtener la cantidad de horas que posiblemente nos lleve. Claro que hay que tener en cuenta que mejorarán los tiempos a medida que vayamos recogiendo más experiencias, y sobre todo con los nuevos upgrades de genexus que van a salir. Pero siempre tener en cuenta que puede variar la multiplicación según cantidad de objetos y dificultad de la Kb.

Para hacer una humilde colaboración, armaré un listado de los inconvenientes que tuve, para compartirlo en el blog (Próximamente...)

GxFreelance: Donde te podemos encontrar si necesitamos hacerte alguna consulta o alguien quiere contratarte para consultoría?

Adrián: en nuestra web (http://www.a3l.com.ar) hay un formulario de consulta, todas las preguntas son bienvenidas y las iremos respondiendo en la medida que podamos. 

GxFreelance: Muchas gracias por su tiempo


Adrian: El gusto es mío, saludos y siempre que se promulgue el trabajo freelance profesional cuenten con nosotros.

domingo, 2 de marzo de 2014

martes, 12 de noviembre de 2013

El trabajo Freelance, la familia y los clientes - Por Marcelo Moretti


El trabajo Freelance, la familia y los clientes


En esta nota Marcelo nos explica las cosas buenas y no tan buenas en un trabajo freelance, contratiempos en relacion con la familia y los clientes. ¿Como salir adelante?


    Fuente: imagen



Articulo por Marcelo Moretti 


"Muchas veces cuando la duda se apodera de nosotros nos preguntamos si vale o no la pena encarar un nuevo proyecto. Es por eso que lo más conveniente es saber de antemano cuáles serán las cosas buenas y no tan buenas que nos encontraremos. En estas líneas explicare cuales son las ventajas y desventajas que he encontrado desde que comencé a realizar trabajos freelance."





La primera duda que tuve al comenzar fue si sería capaz de responder y estaría a la altura de las circunstancias, ahí comprendí que lo mejor sería empezar de a poco hasta ir ganando confianza y experiencia, esa una de las ventajas que tiene esta metodología de trabajo, podía elegir el proyecto que más se ajustaba a mis expectativas y así no embarcarme de entrada en un megaproyecto monstruoso que me haga pasar un mal momento.

Una vez que salió el proyecto indicado, lo primero que debía determinar era en que momentos podría realizarlo, la familia y el trabajo en relación de dependencia no dejaban demasiado tiempo libre, pero sabía que dedicando un par de horas diarias serían suficientes para realizarlo, esas 2 horas diarias podrían ser, después de la cena cuando los niños duermen, el fin de semana o incluso podía llegar a trabajar 4 horas seguidas por si se me complicaba algún día y no podía trabajar.

Todo encajaba perfecto los horarios se acomodaban y el trabajo fluía en forma natural, pero como lo bueno no dura mucho, encontré que faltaba una definición y no podía seguir, si o si necesitaba que me aclaren un punto del alcance que era crucial, no estaba claro que era lo que se necesitaba, ya era tarde y no podía continuar el día estaba perdido.  Redacte un mail explicando el caso para que me aclaren las dudas y lo envié, obviamente no la respuesta fue que no se habían percatado de ese error y necesitaban consultar con un gerente para ver como querían resolverlo, sabía que eso iba a tardar un par de días en definirse.

A los 3 días, recibí la respuesta que necesitaba y  mi sorpresa fue cuando vi que la solución   cambiaba bastante el alcance original del proyecto, inmediatamente me comunique telefónicamente y les explique que de ser así el nuevo alcance, necesitaría más tiempo para llevarlo a cabo ya que se habían perdido 3 días y tenía que cambiar varias cosas que no se habían pedido originalmente, a lo cual me responden que a lo sumo podría retrasar la entrega 3 días que fue lo que demoro la respuesta por parte de ellos.

En fin, tuve que correr como nunca para cumplir los plazos y el nuevo alcance del proyecto de esa forma pude entregarlo en tiempo y forma, pero todo nos deja una enseñanza y sabiduría ahora les resumo los puntos mas importantes en este cuadro.




Ventajas
Desventajas
Ingreso de dinero extra
Falta de definiciones o gente que no puede darlas
Poder elegir el proyecto que más nos convenga o guste
Cambios inesperados en el alcance del proyecto
Acomodar los horarios y días de trabajo
Una mala estimación nos puede jugar una mala pasada
Poder realizar otro tipo de tareas y salir de la rutina laboral
Pérdida de tiempo por causas ajenas
Aprender nuevas tecnologías
Demoras en recibir el pago

jueves, 7 de noviembre de 2013

Consejos para conseguir nuestro primer cliente como Freelance


5 consejos para empezar como Freelance!


Muchas veces nos hemos encontrado con ganas de emprender un nuevo desafío y no encontramos la forma apropiada de encararlo, en esta líneas vamos a aclarar algunos aspectos que nos van a ayudar en nuestro objetivo que será conseguir nuestro primer cliente “Freelance”



07/11/2013 Esta es nuestra primera nota! Nos alegramos de contarles que tenemos nuestro primer redactor freelance  (Marcelo A. Moretti) , Programador Genexus con mas de 15 años de experiencia. Bienvenido!



Nota:

1 Definir nuestro Perfil y alcance

Es de suma importancia saber quiénes somos y que podemos ofrecer, es crucial para poder encarar cualquier proyecto, saber que está dentro de nuestro alcance y posibilidades, de nada nos servirá conseguir un cliente que nos contrate para realizar algo que no sabemos hacer o que nos demandaría muchísimo tiempo. Hay que estar muy atento a nuestra especialización y al mercado que necesita de nuestros servicios.

2. Darnos a conocer

Aquí tenemos uno de los primeros escollos que debemos superar al inicio, nuestros futuros clientes deben saber  quiénes somos y que podemos brindarles, al principio nos costara pero después todo será más fácil, para esto debemos visitar sitios especializados, sitios de empleo, foros y blogs, las empresas siempre están en la búsqueda de gente  “Freelance”  recordemos que esta metodología de contratación no les genera costos extra como Cargas Sociales u otros tipos de impuestos relacionados a la contratación laboral tradicional.

3. Cotizar bien nuestro trabajo

En este punto hay que tomarse su tiempo ya que de esto dependerán nuestros futuros trabajos y la confianza que generemos. Cuando decimos cotizar bien nuestro trabajo no significa que debemos cobrar muchísimo o poco dinero, debemos ser justos y lo más importante es estimar muy bien el tiempo que nos demandara, siempre debemos manejar un margen adicional de tiempo por cualquier eventualidad que pudiera surgir y dejar en claro cuál es el alcance para que no haya malos entendidos, la cotización debe dejar muy claro que es lo que entregaremos, en cuanto tiempo y a qué precio.

4. Ser profesionales

Ser profesional va a depender de cada uno de nosotros, cada uno sabe bien que es lo puede dar y cuál es el “plus” que le daremos a su trabajo para que sea excelente, dejemos en claro que ese “plus” no significa hacer cosas extra que nuestro cliente no pidió, sino más bien darle el toque de calidad que lo dejara muy conforme. Es importantísimo respetar los plazos acordados y en el supuesto caso que hayamos estimado mal los plazos y haga falta más tiempo debemos hacerlo saber de inmediato y discutir con nuestro cliente la mejor forma de llevarlo adelante sin provocarle pérdidas o dificultades.

5. Utilizar nuestros trabajos como publicidad

No hay mejor publicidad que un cliente satisfecho, como se dice “el mundo es chico” y un buen trabajo siempre nos dará crédito, por eso resaltamos el “plus” de calidad que cada uno le debe agregar a su labor. Estos trabajos van a ser nuestra carta de presentación ante el mercado y los futuros clientes es lo que nos abrirá nuevas puertas y oportunidades.


"En conclusión, debemos definir nuestro perfil y alcance para luego saber cómo utilizar las herramientas que hoy por hoy disponemos en la web para conseguir clientes, prestando suma atención a la hora de estimar y cotizar nuestro trabajo y poder realizarlo en tiempo, forma y con el plus de calidad para que el cliente quede satisfecho y sea nuestro aliado y carta de presentación para encarar futuros trabajos y desafíos que sin duda vendrán a nosotros."