Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - piwi

#1
.NET (C#, VB.NET, ASP) / Uso de Tapi
12 Septiembre 2011, 16:11 PM
Hola a todos.

Estoy con la centralita Avaya y necesito capturar las llamadas entrantes.

Lo primero me he declarado unas variables a nivel de clase:
Código (vbnet) [Seleccionar]

   Public CallerID As String
   Private Const MediaAudio As Integer = 8
   Private Const MediaModem As Integer = 16
   Private Const MediaFax As Integer = 32
   Private Const MediaVideo As Integer = 32768
   Private WithEvents oTAPI As TAPI3Lib.TAPI '
   Private oAddress As ITAddress
   Private RegCookie As Integer


Lo primero es realizar la conexión con la centralita:
Código (vbnet) [Seleccionar]

Try

           Dim m_TAPI As New TAPIClass

           Dim MediaTypes As Integer
           m_TAPI.Initialize()
           oTAPI = m_TAPI

           m_TAPI = Nothing

           Dim AddressCollection As ITCollection = oTAPI.Addresses()

           For Each Address As ITAddress In AddressCollection

               If Address.State = ADDRESS_STATE.AS_INSERVICE Then

                   Dim MediaSupport As ITMediaSupport = Address

                   MediaTypes = MediaSupport.MediaTypes

                   MediaSupport = Nothing

                   If MediaTypes And MediaModem = MediaModem Then

                       If MediaTypes And MediaAudio = MediaAudio Then

                           oAddress = Address

                           MsgBox(oAddress.AddressName)

                           Exit For
                       End If
                   End If

               End If

           Next Address

           If Not oAddress Is Nothing Then

               RegCookie = oTAPI.RegisterCallNotifications(oAddress, True, False, MediaTypes, 1)
               oTAPI.EventFilter = (TAPI_EVENT.TE_CALLNOTIFICATION Or TAPI_EVENT.TE_CALLSTATE Or TAPI_EVENT.TE_CALLINFOCHANGE)
           Else
               MsgBox("No se encontró ninguna extensión.")
           End If

       Catch ex As Exception
           MsgBox("Error TAPI:" & vbCrLf & ex.Message, MsgBoxStyle.Critical)
       End Try



El siguiente código es para capturar los eventos.
Código (vbnet) [Seleccionar]


Private Sub oTAPI_Event(ByVal TapiEvent As TAPI3Lib.TAPI_EVENT, ByVal pEvent As Object) Handles oTAPI.Event

       Dim thAsyncCall As System.Threading.Thread

       Select Case TapiEvent
           Case TAPI_EVENT.TE_CALLNOTIFICATION
               thAsyncCall = New Threading.Thread(AddressOf CallNotificationEvent)
               CallNotificationObject = CType(pEvent, ITCallNotificationEvent)
               thAsyncCall.Start()
           Case TAPI_EVENT.TE_CALLSTATE
               thAsyncCall = New Threading.Thread(AddressOf CallStateEvent)
               CallStateObject = CType(pEvent, ITCallStateEvent)
               thAsyncCall.Start()
           Case TAPI_EVENT.TE_CALLINFOCHANGE
               thAsyncCall = New Threading.Thread(AddressOf CallInfoEvent)
               CallInfoObject = CType(pEvent, ITCallInfoChangeEvent)
               thAsyncCall.Start()
       End Select

   End Sub

Private CallNotificationObject As ITCallNotificationEvent

   Private Sub CallNotificationEvent()
       Select Case CallNotificationObject.Event
           Case CALL_NOTIFICATION_EVENT.CNE_MONITOR
           Case CALL_NOTIFICATION_EVENT.CNE_OWNER
       End Select
   End Sub

   Private CallStateObject As ITCallStateEvent

   Private Sub CallStateEvent()
       Select Case CallStateObject.State
           Case CALL_STATE.CS_IDLE
           Case CALL_STATE.CS_INPROGRESS
           Case CALL_STATE.CS_OFFERING
           Case CALL_STATE.CS_CONNECTED

              Form2.ShowDialog()

           Case CALL_STATE.CS_QUEUED
           Case CALL_STATE.CS_HOLD
           Case CALL_STATE.CS_DISCONNECTED


       End Select
   End Sub

   Private CallInfoObject As ITCallInfoChangeEvent

   Private Sub CallInfoEvent()

       CallerID = CallInfoObject.Call.CallInfoString(CALLINFO_STRING.CIS_CALLERIDNUMBER) 'CIS_CALLERIDNAME)

   End Sub


Tal como está el codigo me funciona abriendome el Form2 (eso si, tengo que ponerlo como Showdialog porque con el Show no lo veo y en callinfoevent tengo el numero entrante.

Mi problema está que solamente está funcionando con multihilo y al modificar el código de la siguiente manera  no me funciona.

Código (vbnet) [Seleccionar]

Private Sub oTAPI_Event(ByVal TapiEvent As TAPI3Lib.TAPI_EVENT, ByVal pEvent As Object) Handles oTAPI.Event

       Select Case TapiEvent
           Case TAPI_EVENT.TE_CALLNOTIFICATION
               CallNotificationEvent()
           Case TAPI_EVENT.TE_CALLSTATE
               CallNotificationEvent()
           Case TAPI_EVENT.TE_CALLINFOCHANGE
               CallNotificationEvent()
       End Select

   End Sub


No debería ser lo mismo?

A ver si me se explicar. Tengo un formlario Form1, en él tengo declarado un array de forms publico. Con un botón voy abriendo las instancias del Form2 y los abiertos los voy guardando en el array. Dentro del Form2 tengo un botón para abrir la instancia del Form3, pasandole en el contructor el número del Form2 que ha abierto el form3 para que pueda hacer referncia a él. Desde el form3 cuando le cierro le paso los parametros al form2

form1.arraydeforms(id).variable = <valor>

donde el id es el número del form (Form2) de array que lo ha abierto (Form3)

Me imagino que es por el multihilo que cuando desde el Form3 hago la referencia al Form2, me dice que el array no lo tengo creado porque cuando hago lo mismo pero con un botón me funciona bien.

Perdonad pero creo que no se explicarme mejor.
#2
Hola a todos.

Os cuento mi problema. Necesito recorrer una tabla de sql server que tiene un campo de tipo Imagen. Esta imagen la necesito almacenar e una carpeta como jpg para luego poder subirla por ftp.

Ya he leido todos los campos de la tabla pero no estoy seguro como tengo que manejar el campo de tipo imagen. Hay alguna función para coger el campo imagen y exportarlo a un archivo?

Gracias por vuestra ayuda.
#3
Hola

Estoy intentando borrar un registro del dataset.
Estoy utilizando el siguiente código:


        Dim registro As LicenciaDataSet.LICENCIARow

        registro = LicenciaDataSet.LICENCIA.Rows.Find(268)

        LicenciaDataSet.LICENCIA.Rows.Remove(registro)

        Me.TableAdapterManager.UpdateAll(Me.LicenciaDataSet)


En el formulario me lo borra pero no en la base de datos. Es como si el UpdateAll no me funcionara.

Para insertar uno nuevo no tengo ningún problema.


     Dim registro As LicenciaDataSet.LICENCIARow
        registro = LicenciaDataSet.LICENCIA.NewLICENCIARow

        registro.LICENCIA = 11
        registro.VERSION = "11"
        registro.IDPRODUTO = 1
        registro.IDFABRICANTE = 1
        registro.OBSERVACIONES = "hola1"

        LicenciaDataSet.LICENCIA.Rows.Add(registro)

        Me.TableAdapterManager.UpdateAll(Me.LicenciaDataSet)


Donde está el fallo en el borrado?
#4
He Creado dos origenes de datos, uno se llama productos y se compone de una serie de campos
entre lo que tengo IDlocal y IDCliente.
Tambien tengo otro origen de datos llamado ClienteLocal que se compone de dos tablas, una Cliente y otro Local.
Estas dos ultimas estan relacionadas por el campo idcliente que aparece tanto en la tabla cliente como en el local.
He arrastrado el origen de datos productos al formulario se ha creado un datagridview con los campos de los productos.
Los campos IdCliente e IdLocal los he cambiado a tipo combobox.
IDCliente lo he asociado al origen de datos Cliente y el IDLocal lo he enlazado al PK_ClienteLocal (tabla locales)
Con todo esto lo que intento que me muestre el nombre del cliente y del lolal en datagridview pero no funcion.
Por ultimo decir que la relacion de clientes locales es de uno a varios (un cliente puede tener varios locales)

Con los mismos origenes de datos he utilizado dos combobox en el formulario enlazandolos con las misma logica que he comentado
al principio y me ha funcionado bien.

Como debo hacerlo en un datagrid?
#5
.NET (C#, VB.NET, ASP) / Validar DataSet
1 Octubre 2010, 10:21 AM
Hola.

Tengo un datagridview enlazado a datos. Tambien tengo un bindingnavigatos. Lo que he hecho es hacerlo manual cuando el usuario cambia de fila pulsando las flechas de bindingnavigator. Para ello por ejemplo en la flecha de siguiente, valido si todo está bien y utilizo bindingsource.movenext Esto lo repito para anterior, primero y ultimo. Al final el el bloque de código es el mismo cambiando solamente el move para cada caso.
Código (csharp) [Seleccionar]

DataGridView.EndEdit

Try
  BindingSource.EndEdit()
  BindingSource.MoveFirst()
Catch nulo As NoNullAllowedException
  msgbox("Debe introducir un valor")
Catch ex as Exception
  msgobx(ex.Message)
End Try


Puedo hacer esta validación a nivel de dataset? Me refiero a controlar la excepción fuera del formulario para no tener que repetir lo mismo cada vez.

Un saludo.
#6
.NET (C#, VB.NET, ASP) / Validar nulos
1 Octubre 2010, 09:19 AM
Hola.

Cual es la forma de validar los campos antes de grabar? EStoy utilizando un bindingSource y BindingNavigator. Cuando estoy en un datagrid le añado un campo y vuelvo a añadir otro (sin rellenar el campo que no puede ser nulo) me salta un error pero no se posiciona en ninguna linea de codigo.
Otra cosa, el me.validating del formulario a quien llama?

Un saludo.
#7
Hola.

He creado un servicio de windows. Lo que hace es leer de una tabla y crear un usuario en directorio activo. Esto está metida en un Timer para que lo haga cada hora.
Lo he instalado y el servicio aparece dentro de los servicios de windows, hace lo que tiene que hacer cuando le doy a iniciar pero el problema que tengo es que me sale un mensaje: El servicio se inición en eEquipo local y despues se detuvo. Algunos servicios se detienen automaticamente si no tienen anda que hacer, por ejemplo, el servicio Alertas  y registros de rendimiento.

Que tengo que hacer para que no se detenga?

un saludo
#8
Tengo un informe en crystal report donde muestro algunos de los campos. Lo tengo por grupos, cuando le doy un doble click al grupo, me muestra la información de este grupo.
Hay alguna manera que cuando de un doble click al registro me muestre los campos restantes que aunque los tenga en la consulta, no los tengo en el form.
#9
.NET (C#, VB.NET, ASP) / dsadd user
4 Agosto 2010, 12:32 PM
Hola

Necesito ejecutar dsadd user para crear un nuevo usuario dentro del active directory. Los usuarios los tengo en una tabla así que la tengo que recorrer entera y por cada registro crear un usuario con la información de este registro.

Sería algo así:

dsadd user "cn=<nombre>, ou=clientes, dc=Empresa, dc=es" -samid >nombre> -pws <password> -tel <teléfono>

Todo lo que está entre <> serían los campos del registro

Existe alguna manera de meter el comando en una variable conctatenando la información y ejecutarlo como si estuviese en consola de comando?
#10
Hola otra vez.
Tengo unos texbox enlazados a una tabla de la base de datos. Algunos estan enlazado a campos de tipo numerico. Que valor tengo que asignar a estos ultimos  para que me guarde en la base de datos un nulo?
He intentado con textbox.clear, con texbox.text = "" pero no me hace nada.

#11
Hola.

Estoy intentando recuperar los valores de las filas seleccionadas en un datagridview  con opcion de multiselect.

Estoy utilizando el siguiente código


Dim PuestosAcumulados, Contador As Integer
        Dim FilasSeleccionadas As Integer

        PuestosAcumulados = 0

        FilasSeleccionadas = DataGridView1.GetCellCount(DataGridViewElementStates.Selected)

        If FilasSeleccionadas > 0 Then

            For Contador = 0 To FilasSeleccionadas - 1
                PuestosAcumulados = PuestosAcumulados + CInt(DataGridView1(2, DataGridView1.SelectedCells(Contador).RowIndex).Value)
            Next Contador
        End If


El problema con el que me encuentro que recorre cada columna seleccionada por numero de campos que tenga por lo que si tengo en el datagridview 6 columnas y selecciono solamente una fila, el getcellcount me dará un 6.
Como puedo hacer para que solamente pase una vez por la fila como si fuera un getrowcolumns.
Al principio para sumar el valor no tenía problemas porque lo dividía por el nº de campos de registro pero ahora necesito hacer un insert en otra tabla por cada registro seleccionado con los valores de este y claro, si tengo 6 campos, intenta hacer el insert 6 veces y yo solamente quiero que me lo haga una vez.
#12
Hola.

Me he encontrado con este manual como validar los conjuntos de datos.

http://msdn.microsoft.com/es-es/library/ms171930(v=VS.80).aspx

La validación la hago sobre un campo que es PK y busco si ya existe en la base de datos. Al probarlo me funciona y me muestra el mensaje de error que ya existe este valor pero al dar a guardar sigue intentando guardar los cambios y me da error de clave duplicada.

Para solventarlo he hecho lo siguiente (que me parece una chapuza) en el BindingNavigatorSaveItem_Click

If String.IsNullOrEmpty(ErrorProvider1.GetError(IDTextBox)) Then
        Me.Validate()
        Me.LICENCIASBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.LicenciasDataSet)
else
   msgbox("Existen errores")
end if

Faltaría algo de código para controlar los errores, esta como a medias, aunque me muestre el error, sigue con la grabación.

La solución de arriba me funciona cuando es el boton guardar pero si le doy al nuevo o a las flechas de navegación también guarda los valores automaticamente, donde están el código que guarda los datos por ejemplo al dar al botón nuevo?

Gracias de antemano.

#13
.NET (C#, VB.NET, ASP) / Estado de registro
27 Julio 2010, 08:42 AM
Hola a todos.

Existe alguna forma de saber el estado de un registro? Me refiero si es nuevo, modifcado etc.

Mi problema que estoy haciendo un chequeo si un campo ya existe en la base de datos. Si el registro es nuevo lo tengo que chequear pero si es una modificación, entonces no tengo que mirarlo.

Lo estoy haciendo con unos textbox enlazados a datos.

Un saludo
#14
Quizá sea una pregunta muy tonta pero cual es la mejor forma de meter una consulta sql dentro del código para utilizarla con un dataset?

Estoy escribiendo una con parametros de fechas

DECLARE @FECHA_INI AS DATETIME
DECLARE @FECHA_FIN AS DATETIME

SET @FECHA_INI = '2010-04-01'
SET @FECHA_FIN = '2010-04-30'

SELECT .....



WHERE FECHA BETWEEN @FECHA_INI AND @FECHA_FIN

Se puede guardarlas en la base de datos (sqlserver) y llamarla desde vb.net?

Un saludo.
#15
.NET (C#, VB.NET, ASP) / Centralita Avaya
12 Julio 2010, 16:50 PM
Hola

Alguien ha trabajado con avaya? Necesito capturar en tiempo real desde vb el nº de telefono que esta atendiendo cada extensión.
Creo que existe una api de avaya pero no estoy seguro de ello.

Un saludo
#16
Buenas

Me sigo peleando con vb.net. El problema con el que me encuentro es el siguiente.

Tengo dos tablas:

artículos: id_articulo, descripcion, id_tipo
tipo_articulo:id_tipo, descripcion.

He creado un origen de datos de la tabla artícuos y lo he arrastrado en forma de detalle al formulario donde el campo id_tipo es un combobox.

Por otro lado he creado otro origen de datos tipoarticulo y lo he enlazado al combo anterior poniendo en datasource el origen, en displaymember la descripcion y en valuemember id_tipo

Cuando ejecuto la aplicación, me salen los tipos en el combo pero no me deja pasar de campo ni de registro, como si se quedara colgado.

Como tengo que hacer para tener un origen de datos y a la vez el combo que lo forma enlazarlo a otra tabla.

Gracias de antemano.


#17
.NET (C#, VB.NET, ASP) / Validaciones
5 Julio 2010, 20:58 PM
Hola.

Cual es la manera correcta de valida los datos de un datagridview enlazado a un origen de datos?

Cuando tenemos un PK de una tabla, como controlo que no tenga un nulo?

Con CellValidating parece que funciona hasta que cambio de registro y me intenta guardar los cambios pasandose por el forro e.cancel

Como puedo interrumpir el evento BindingNavigatorSaveItem?

Me estoy volviendo loco y no soy capaz de valida los datos introducidos por el usuario en un datagridview.


Un saludo.
#18
Hola

Necesito hacer lo siguiente.

Tengo las siguientes tablas:

Departamento
c_departamento
d_departamento

sección
c_departamento
c_seccion
d_seccion

Articulo

c_articulo
d_articulo
c_seccion
c_departamento

Estoy intentando mantener la tabla artículos, para eso he creado tres origenes de datos: departamento, sección y artículo
Al arrastrar el origen de articulos al formulario, me crea el mantenimiento, ahí tdoo bien. Dentro de las propiedades del datagridview los campos c_seccion y c_departamento los pongo en modo DataGridViewComboBoxColumn y los asocio a los otros origenes de datos.

Lo que quiero es que al seleccionar un departamento, solamente me salgan las secciones de este y es lo que no consigo ya que me estan saliendo todas las secciones.

Gracias por anticipado
#19
.NET (C#, VB.NET, ASP) / DataGridView en VB
17 Mayo 2010, 14:12 PM
Hola.

Estoy intentando insertar un valor en una celda. todo va bien cuando la celda no tiene el foco pero en el momento que lo tiene, no me asigna el valor (al menos no lo veo) hasta que tabulo.

La sentencia es esa:

        Dim fila As Integer

        FABRICANTEDataGridView.Item(0, fila).Value = 1
        FABRICANTEDataGridView.Item(1, fila).Value = "valor"

Que es lo que hago mal?
#20
Hola a todos.

Tengo un formulario principal. Desde este formulario se puede abrir varios formularios (en realidad son instancias de uno solo). Cada una de estas instancias abre otro formulario para seleccionar un cliente. El problema es que necesito saber que instancia es la que ha abierto el otro formulario.

Tengo un formulario con un campo cliente y otro persona de contacto (hago una instancia a la hora de abrir el formulario para que pueda tener varios formularios a la vez) Dependiendo si tengo un cliente seleccionado, filtro solamente los contactos de este cliente y en caso que no tenga cliente seleccionado, muestro todos los contactos. El problema está que no tengo ni idea cuando estoy en la selección de contactos, desde que formulario se ha llamado a la selección de contactos para así consultar el campo cliente si está vació o no.

Un saludo.
#21
Hola a todos.

A ver si alguien me puede ayudar con un problema que tengo. Estoy haciendo un programa para llevar el tema de sat.
En la empresa tenemos los teléfono Linksys IP Phone SPA942. Lo que quiero hacer es recuperar la última llamada realizada (que sería la llamada en curso). Lo he intentado con los socket pero me dice que el host ha rechazado la conexión.
Otra posibilidad, quiza más chapuza sería leer del html que es donde está la información. Cada terminal tiene una ip, al entrar en la pagina hay un link de las llamadas pero tampoco se de como se puede leer un html plano.

En la utilización de los socket he encontrado este ejemplo:

      Dim tcpClient As New TcpClient()

        Try
            tcpClient.Connect("192.168.111.10", 80)
        Catch escepcion As SocketException
            MsgBox(escepcion.ErrorCode.ToString)
            Return



        End Try

        Dim networkStream As NetworkStream = tcpClient.GetStream()
        If networkStream.CanWrite And networkStream.CanRead Then
            ' Do a simple write.
            Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("Is anybody there")
            networkStream.Write(sendBytes, 0, sendBytes.Length)
            ' Read the NetworkStream into a byte buffer.
            Dim bytes(tcpClient.ReceiveBufferSize) As Byte
            Try

                networkStream.Read(bytes, 0, CInt(tcpClient.ReceiveBufferSize))

            Catch excepcion As IO.IOException

                MsgBox(excepcion.Message.ToString)

            End Try

            Dim returndata As String = Encoding.ASCII.GetString(bytes)
            Console.WriteLine(("Host returned: " + returndata))

        Else
            If Not networkStream.CanRead Then
                Console.WriteLine("cannot not write data to this stream")
                tcpClient.Close()
            Else
                If Not networkStream.CanWrite Then
                    Console.WriteLine("cannot read data from this stream")
                    tcpClient.Close()
                End If
            End If
        End If
        ' pause so user can view the console output
        Console.ReadLine()


Si alguien me puede ayudar que empiezo a desesperarme.

Un saludo.
#22
Hacking Mobile / NetMeeting y bluetooth
6 Julio 2006, 12:13 PM
Hola.

Estoy utilizando el netmeeting con unos auriculares con microfono que los tengo conectados a la tarjeta de sonido.
Me gustaría comprar un manos libres, el de los moviles que se ponen en la oreja y van por medio de bluetooth. He hecho pruebas conectando un bluetooth usb pero no tengo manera de decir que lo quiero utilizar para sonido y supongo que el ordenador lo interpreta que lo voy a utilizar para pasar datos. He mirado en configuración de sonido y ahí no me aparece el dispositivo junto a la tarjeta grafica y por lo tanto tampoco en la configuración del sonido del netmeeting.

No se puede utilizar un manos libre con netmeeting o estoy haciendo algo mal?

Un saludo.