Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
wiki:2.-desarrollo-app:2.6.-demos-y-ejemplos:a.-ejemplos-codigo-vbscript:start [2017/10/30 11:27] – [Botón con Script] patricia | wiki:2.-desarrollo-app:2.6.-demos-y-ejemplos:a.-ejemplos-codigo-vbscript:start [2018/11/06 20:49] (actual) – [Botón con Scripteeeeeee] ejetoro | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | |||
+ | {{indexmenu_n> | ||
+ | ====== Ejemplos de códigos VBScript====== | ||
+ | |||
+ | |||
+ | ===== Plantillas de Programación VBScript===== | ||
+ | =====Código que recorre una colección completa===== | ||
+ | \\ | ||
+ | <code vb> | ||
+ | <action name=" | ||
+ | <script language=" | ||
+ | Dim coll, filtro | ||
+ | ‘Variable con la coleccion que se va a utilizar | ||
+ | Set coll =AppData.GetCollection(" | ||
+ | ‘Guardamos el filtro que tiene la coleccion por defecto | ||
+ | filtro=coll.filter | ||
+ | ‘Le ponemos un filtro con el atributo filter, | ||
+ | ‘que machacaría el filtro que ya tiene la coll en su atributo filter. | ||
+ | coll.filter=" | ||
+ | ‘Función para ejecutar el SQL de la coll, y poder recorrer los record que tiene dicha coll | ||
+ | coll.StartBrowse | ||
+ | ‘Utilizamos un while, preguntando si el registro actual es nulo o no. | ||
+ | while not coll.CurrentItem is nothing | ||
+ | if coll.CurrentItem(" | ||
+ | coll.currentItem(" | ||
+ | coll.currentItem.Save | ||
+ | end if | ||
+ | ‘Para pasar al siguiente registro de la coll | ||
+ | coll.MoveNext | ||
+ | wend | ||
+ | ‘Siempre que se hace un StartBrowse, | ||
+ | coll.EndBrowse | ||
+ | ‘Restauramos el filtro original | ||
+ | | ||
+ | Set coll=nothing | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | <WRAP center round important 60%> | ||
+ | |||
+ | |||
+ | <wrap em> | ||
+ | </ | ||
+ | =====Recorrer una colección/ | ||
+ | \\ | ||
+ | |||
+ | <code vb> | ||
+ | <action name=" | ||
+ | < | ||
+ | Dim colldet, | ||
+ | ‘Cogemos la coll contents Detalles del objeto actual This. | ||
+ | Set colldet=this.contents(" | ||
+ | j=0 | ||
+ | ‘Guardamos en la variable i el número de registros que tiene el content. | ||
+ | i=this.contents(" | ||
+ | |||
+ | ‘Si es cero se pueden dar dos opciones: | ||
+ | ‘ - Que no haya ningún registro | ||
+ | ‘ - Que aún no se haya cargado el content y por eso no tengamos ningún registro | ||
+ | ‘Así que le hacemos un loadall para cargarlos todos (si no están cargados), y si no hubiera | ||
+ | ‘registros no pasaría nada al hacer el loadall. | ||
+ | |||
+ | ‘El loadall cuidado con su uso, ya que si tiene muchos elementos, nos quedaremos sin memoria. | ||
+ | ‘El máximo número de registros de una colección para cargarla con loadall podemos fijarla en 20 | ||
+ | ‘claro está, todo depende de lo grande que sea cada registro de dicha colección. | ||
+ | if i=0 then | ||
+ | this.contents(" | ||
+ | i=this.contents(" | ||
+ | end if | ||
+ | ‘Utilizamos un For para recorrer los registros del contents. | ||
+ | For j=0 to i-1 | ||
+ | ‘Tomamos el valor del content con el indice de dicho registro. | ||
+ | valor=colldet(j)(" | ||
+ | if valor=" | ||
+ | ‘ Realizar la función deseada | ||
+ | end if | ||
+ | next | ||
+ | ‘Liberamos memoria. | ||
+ | Set colldet=nothing | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | =====Obtener un objeto (fila) de una colección, teniendo el valor de un campo de dicho objeto===== | ||
+ | \\ | ||
+ | |||
+ | <code vb> | ||
+ | Dim obj | ||
+ | ‘Buscamos el cliente en la coll Clientes, con el valor del ID del cliente. | ||
+ | Set obj=appdata.getcollection(" | ||
+ | If not obj is nothing Then | ||
+ | obj(" | ||
+ | obj(" | ||
+ | obj.save | ||
+ | End If | ||
+ | Set obj=nothing | ||
+ | </ | ||
+ | \\ | ||
+ | =====Obtener un objeto (fila) de una colección, utilizando una SQL con más de 1 campo (FINDOBJECT)===== | ||
+ | \\ | ||
+ | < | ||
+ | <code vb> | ||
+ | Set cCierre=AppData.GetCollection(" | ||
+ | Set objCierre=cCierre.FindObject(" | ||
+ | If objCierre Is Nothing Then | ||
+ | set objCierre=cCierre.CreateObject | ||
+ | objCierre(" | ||
+ | objCierre(" | ||
+ | objCierre(" | ||
+ | ContarPiezas This(" | ||
+ | objCierre(" | ||
+ | cCierre.additem objCierre | ||
+ | AppData.PushValue objCierre | ||
+ | Else | ||
+ | Appdata.failwithmessage -11888," | ||
+ | End If | ||
+ | </ | ||
+ | ===== Mensajes (msgBox showToast) Sonidos Notificaciones ===== | ||
+ | Tenemos varias formas de mostrar un mensaje en pantalla. | ||
+ | |||
+ | ^ Comando | ||
+ | | ui.< | ||
+ | | ui.< | ||
+ | | ui.< | ||
+ | | ui.< | ||
+ | \\ | ||
+ | **Ejemplo de código:** | ||
+ | <code xml> | ||
+ | < | ||
+ | <action name=" | ||
+ | <script language=" | ||
+ | ' | ||
+ | Dim vResult | ||
+ | |||
+ | Select Case this(" | ||
+ | Case " | ||
+ | ui.msgBox " | ||
+ | Case " | ||
+ | ' | ||
+ | vResult =ui.MsgBox (" | ||
+ | ui.msgBox "Ha pulsado el botón con valor: " | ||
+ | Case " | ||
+ | ' | ||
+ | vResult =ui.MsgBox (" | ||
+ | ui.msgBox "Ha pulsado el botón con valor: " | ||
+ | Case " | ||
+ | ui.showToast " | ||
+ | Case " | ||
+ | ui.ShowNotification 1, " | ||
+ | Case " | ||
+ | ' | ||
+ | ui.playSoundAndVibrate " | ||
+ | End Select | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Nodo para irnos a una colección pasando un parámetro (irColl/ | ||
+ | \\ | ||
+ | Primero tendríamos un botón para llamar a este nodo: | ||
+ | <code xml> | ||
+ | <prop name=" | ||
+ | </ | ||
+ | |||
+ | El código del nodo quedaría: | ||
+ | <code xml> | ||
+ | ' | ||
+ | <irColl show-wait-dialog=" | ||
+ | < | ||
+ | <param name=" | ||
+ | < | ||
+ | ' | ||
+ | set coll=appData.getCollection(parametro) | ||
+ | set det = coll.createObject | ||
+ | coll.addItem Empty, | ||
+ | appData.pushValue det | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Nodo para salir de una colección (onback) ===== | ||
+ | \\ | ||
+ | Lo llamamos onback porque en Android tenemos un evento que atiende al botón de volver atrás que ejecuta éste nodo, de forma que el botón que pongamos para salir y el botón de volver atrás de Android hagan lo mismo. | ||
+ | |||
+ | Tendríamos un botón salir o volver para ejecutar este nodo. | ||
+ | <code xml> | ||
+ | <prop name=" | ||
+ | </ | ||
+ | |||
+ | Este es el código que ejecuta tanto nuestro botón como el volver atrás de Android. | ||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | AppData.FailWithMessage -11888,"## | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Nodo para irnos a otra pestaña (showGroup) ===== | ||
+ | \\ | ||
+ | En este código también vemos como podemos cambiar una propiedad dinámicamente, | ||
+ | <code xml> | ||
+ | <frame name=" | ||
+ | ----- | ||
+ | </ | ||
+ | <prop name=" | ||
+ | <prop name=" | ||
+ | </ | ||
+ | |||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | <param name=" | ||
+ | <script language=" | ||
+ | select case cstr(grupo) | ||
+ | case " | ||
+ | this(" | ||
+ | case " | ||
+ | this(" | ||
+ | case " | ||
+ | this(" | ||
+ | end select | ||
+ | |||
+ | ' | ||
+ | ui.ShowGroup cstr(grupo),"## | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== CASE en SQL para COLORVIEW ===== | ||
+ | Para consulta de algunos que estén oxidados en SQL... | ||
+ | <code sql> | ||
+ | SELECT g.*,CASE WHEN g.APROBADO=0 THEN '# | ||
+ | </ | ||
+ | |||
+ | ===== MACRO de usuario para filtrar contents ===== | ||
+ | Podemos crear una MACRO de usuario en una colección para sustituir en tiempo real la SQL de una colección, pudiendo llegar a sustituir incluso la SQL de la colección completa. | ||
+ | |||
+ | <code xml> | ||
+ | <coll name=" | ||
+ | sql=" | ||
+ | g.PROVEEDOR as MAP_PROVEEDOR, | ||
+ | g.FOTO2 as MAP_FOTO2, g.FOTO3 as MAP_FOTO3, | ||
+ | FROM ## | ||
+ | WHERE ##TIPO## " filter=" | ||
+ | |||
+ | <macro name="## | ||
+ | </ | ||
+ | |||
+ | Una vez definida la macro en la colección, posteriormente podemos utilizarla para cambiar el valor de dicha macro y por lo tanto cambiar el SQL. | ||
+ | <code xml> | ||
+ | < | ||
+ | <field name=" | ||
+ | < | ||
+ | < | ||
+ | collGastos = this.Contents(" | ||
+ | |||
+ | ' | ||
+ | collGastos.macro("## | ||
+ | |||
+ | this.ExecuteNode " | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Código para Crear/ | ||
+ | \\ | ||
+ | <code vb> | ||
+ | 'Para poder dar de alta un registro en un contents tendríamos que pasarle el ID de la cabecera... | ||
+ | function addContents(coll, | ||
+ | Set CollCV=appdata.GetCollection(coll) | ||
+ | Set ObjCV=CollCV.CreateObject | ||
+ | ObjCV(campoenlace) = this(" | ||
+ | CollCV.AddItem Empty,ObjCV | ||
+ | AppData.PushValue ObjCV | ||
+ | end function | ||
+ | |||
+ | 'A esta función tenemos que pasarle la referencia al contents y el ID que queremos editar. | ||
+ | function editContents(coll, | ||
+ | Set CollCV=appdata.GetCollection(coll) | ||
+ | Set ObjCV=CollCV.FindObject(" | ||
+ | if not ObjCV is nothing then | ||
+ | AppData.PushValue ObjCV | ||
+ | end if | ||
+ | end function | ||
+ | |||
+ | ' | ||
+ | 'o podemos ponerle un BAJA=1, para darlo de baja lógica. Posteriormente tendríamos un mantenimiento para | ||
+ | ' | ||
+ | function deleteContents(coll, | ||
+ | result = ui.MsgBox(" | ||
+ | if result=6 then | ||
+ | Set CollCV=appdata.GetCollection(coll) | ||
+ | Set ObjCV=CollCV.FindObject(" | ||
+ | if not ObjCV is nothing then | ||
+ | ObjCV(campoenlace) = -9999 | ||
+ | ObjCV.Save | ||
+ | end if | ||
+ | ObjCV = nothing | ||
+ | CollCV = nothing | ||
+ | end if | ||
+ | end function | ||
+ | </ | ||
+ | =====Mostrar error por pantalla===== | ||
+ | \\ | ||
+ | |||
+ | <code vb> | ||
+ | |||
+ | <script language=" | ||
+ | if this(" | ||
+ | Appdata.FailWithMessage -8100," | ||
+ | end if | ||
+ | ' | ||
+ | 'ESTA LLENO O NO. SI DA ERROR, MUESTRA UN MENSAJE DE TIPO -8100, PARA DECIR QUE ES ERROR. | ||
+ | Dim i,j | ||
+ | |||
+ | Dim colldet | ||
+ | Set colldet=this.contents(" | ||
+ | j=0 | ||
+ | i=this.contents(" | ||
+ | if i=0 then | ||
+ | this.contents(" | ||
+ | end if | ||
+ | i=this.contents(" | ||
+ | while i & | ||
+ | valor=colldet(j)(" | ||
+ | if valor=0 then | ||
+ | i=0 | ||
+ | aux=1 | ||
+ | else | ||
+ | i=i-1 | ||
+ | j=j+1 | ||
+ | end if | ||
+ | if aux=1 then Appdata.FailWithMessage -8100," | ||
+ | wend | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | \\ | ||
+ | |||
+ | =====Tipos de errores===== | ||
+ | \\ | ||
+ | <code vb> | ||
+ | |||
+ | <script language=" | ||
+ | 'ERROR DISPONIBLE EN TODAS LAS PLATAFORMAS | ||
+ | ' | ||
+ | appdata.failwithmessage -8100," | ||
+ | | ||
+ | ' | ||
+ | ' | ||
+ | appdata.failwithmessage -7500," | ||
+ | | ||
+ | ' | ||
+ | appdata.failwithmessage -666," | ||
+ | | ||
+ | ' | ||
+ | appdata.failwithmessage -11888," | ||
+ | | ||
+ | ' | ||
+ | appdata.failwithmessage -11822," | ||
+ | | ||
+ | ' | ||
+ | appdata.failwithmessage -11811," | ||
+ | | ||
+ | ' | ||
+ | Appdata.FailWithMessage -8100,"## | ||
+ | | ||
+ | 'Esta macro funciona conjuntamente con CGStart (kiosko de PDA). | ||
+ | ' | ||
+ | 'Si el kiosko no está instalado, simplemente se cierra la aplicación. | ||
+ | Appdata.FailWithMessage -8100,"## | ||
+ | | ||
+ | 'Salir de la aplicacion. | ||
+ | Appdata.FailWithMessage -8100,"## | ||
+ | | ||
+ | 'Usado para salir de las ventanas de Nomen y Edit. | ||
+ | Appdata.FailWithMessage -8100,"## | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | \\ | ||
+ | |||
+ | =====Validación de datos usando PopValue y PushValue para los errores===== | ||
+ | \\ | ||
+ | Evitar que se pueda guardar un registro con campos con ciertos valores, como vacíos.\\ | ||
+ | **Appdata.< | ||
+ | Se le pasará como un Long, de ahí el Clng.\\ | ||
+ | \\ | ||
+ | |||
+ | <code xml> | ||
+ | |||
+ | < | ||
+ | <rule name=" | ||
+ | <rule name=" | ||
+ | <script language=" | ||
+ | Dim bFail, | ||
+ | x =AppData.PopValue | ||
+ | bFail =0 | ||
+ | if This(" | ||
+ | if This(" | ||
+ | bFail=0 | ||
+ | else | ||
+ | bFail=1 | ||
+ | end if | ||
+ | if This(" | ||
+ | bFail=0 | ||
+ | else | ||
+ | bFail=1 | ||
+ | end if | ||
+ | if This(" | ||
+ | bFail=0 | ||
+ | else | ||
+ | bFail=1 | ||
+ | end if | ||
+ | if This(" | ||
+ | bFail=0 | ||
+ | else | ||
+ | bFail=1 | ||
+ | end if | ||
+ | if bfail=0 then | ||
+ | This(" | ||
+ | else | ||
+ | This(" | ||
+ | end if | ||
+ | Else | ||
+ | This(" | ||
+ | end if | ||
+ | AppData.PushValue (CLng(bFail)) | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | =====Botón con Script===== | ||
+ | \\ | ||
+ | CÓDIGO PARA REALIZAR UN BOTÓN. \\ | ||
+ | \\ | ||
+ | Está formado por **3 nodos**:\\ | ||
+ | \\ | ||
+ | |||
+ | |**Nodo 1**|**Prop de tipo " | ||
+ | |**Nodo 2**|**Nodo method** name="< | ||
+ | |**Nodo 3**|**Nodo en el que se pone el código que se va a ejecutar**.| El nombre es definido por el usuario, y como único requisito, es el nombre del nodo, tiene que llamarse igual (mayúsculas-minúsculas) que el nodo al que llama el nodo button en su atributo method.| | ||
+ | \\ | ||
+ | <code xml> | ||
+ | <prop name=" | ||
+ | |||
+ | <method name=" | ||
+ | <param name=" | ||
+ | </ | ||
+ | |||
+ | < | ||
+ | <action name=" | ||
+ | < | ||
+ | Dim vResult | ||
+ | vResult =AppData.UserInterface.MsgBox ("Esta acción reiniciará toda la ruta. ¿Está seguro que desea ejecutarla?"," | ||
+ | If vResult =1 Then | ||
+ | appdata.executeSQL " | ||
+ | vResult =AppData.UserInterface.MsgBox ("Ruta inicializada"," | ||
+ | End If | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | =====Colección Avisos===== | ||
+ | \\ | ||
+ | COLECCIÓN DE AVISOS. | ||
+ | \\ | ||
+ | <code xml> | ||
+ | <coll name=" | ||
+ | FROM (## | ||
+ | LEFT OUTER JOIN ## | ||
+ | WHERE td.SIMBOLO=' | ||
+ | notify=" | ||
+ | <group name=" | ||
+ | <prop name=" | ||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | =====Content Imagen===== | ||
+ | \\ | ||
+ | | ||
+ | |||
+ | \\ | ||
+ | Con este content se mostrarán los datos como una imagen, y el usuario, en ciertas coordenadas de la misma, pondrá poner marcas. | ||
+ | Al realizar un click en dicha marca mostrará los datos relativos a ella, sería como dar a una línea de un content normal.\\ | ||
+ | \\ | ||
+ | Hay que tener en cuenta que el ejemplo es para mostrar en una primera imagen un vehículo, y si se le da a un lugar del mismo, que podrá ser una rueda, un cristal o una puerta, saldrán tipos de daños que puede tener dicha parte del vehículo. \\ | ||
+ | \\ | ||
+ | |||
+ | |||
+ | |||
+ | DOS CONTENT EN UNA COLL CABECERA. El primero es el content de tipo imagen, que tiene los atributos: | ||
+ | \\ | ||
+ | |**viewmode**| PARA INDICAR QUE EL CONTENT SE VEA MODO IMAGEN| | ||
+ | |**imgbk**| SE LE DICE LA IMAGEN QUE SE MUESTRA| | ||
+ | \\ | ||
+ | El otro content es el que se pone debajo y que según el lugar donde se marca en el content imagen, saldrán los datos relativos. \\ | ||
+ | |||
+ | \\ | ||
+ | <code xml> | ||
+ | <prop name=" | ||
+ | <prop name=" | ||
+ | < | ||
+ | <button name=" | ||
+ | <prop name=" | ||
+ | <button name=" | ||
+ | <prop name=" | ||
+ | < | ||
+ | |||
+ | |||
+ | <!-- COLL QUE ES EL CONTENT DE IMAGEN. TIENE QUE TENER 4 CAMPOS QUE TENDRAN LOS ATRIBUTOS PARA PINTAR LA MARCA EN EL DIBUJO QUE SE MUESTRA | ||
+ | xcoord=" | ||
+ | ycoord=" | ||
+ | circle-radius=" | ||
+ | icon-mark=" | ||
+ | --> | ||
+ | <coll name=" | ||
+ | sql=" | ||
+ | t1.RADIO, | ||
+ | t2.ID AS MAP_IDMPLANTILLA, | ||
+ | CASE | ||
+ | WHEN t2.CONTADOR& | ||
+ | ELSE '' | ||
+ | END AS ICONMARK | ||
+ | FROM ## | ||
+ | LEFT OUTER JOIN ## | ||
+ | objname=" | ||
+ | <!-- PESTAÑAS --> | ||
+ | <group name=" | ||
+ | <!-- CAMPOS VISIBLES --> | ||
+ | <macro name="## | ||
+ | < | ||
+ | <prop name=" | ||
+ | <prop name=" | ||
+ | <prop name=" | ||
+ | <prop name=" | ||
+ | <prop name=" | ||
+ | <prop name=" | ||
+ | <prop name=" | ||
+ | <prop name=" | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | ' | ||
+ | this.ownerCollection.ownerObject(" | ||
+ | this.ownerCollection.ownerObject(" | ||
+ | this.ownerCollection.ownerObject(" | ||
+ | this.ownerCollection.ownerObject(" | ||
+ | this.ownerCollection.ownerObject(" | ||
+ | // | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | =====Crear Registro con Script===== | ||
+ | \\ | ||
+ | CREAR UN NUEVO REGISTRO CON UN SCRIPT.\\ | ||
+ | \\ | ||
+ | |||
+ | El script se podrá ejecutar en un **create, insert, delete, botón**... en cualquier lugar.\\ | ||
+ | <code xml> | ||
+ | <action name=" | ||
+ | <script language=" | ||
+ | ' | ||
+ | Dim coll, | ||
+ | ' | ||
+ | ' ejecutandose el create si lo tuviera. | ||
+ | Set coll =AppData.GetCollection(" | ||
+ | ' | ||
+ | set det = coll.CreateObject | ||
+ | 'Lo añadimos a la coll, lanzando el create del mismo | ||
+ | coll.AddItem Empty,det | ||
+ | ' | ||
+ | det(" | ||
+ | det(" | ||
+ | det(" | ||
+ | ' | ||
+ | det.Save | ||
+ | ' | ||
+ | set coll.clear | ||
+ | Set coll=nothing | ||
+ | Set det=nothing | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | |||
+ | ===== Poner valor a una Variable Global ===== | ||
+ | |||
+ | <code vb> | ||
+ | <action name=" | ||
+ | <script language=" | ||
+ | appdata.CurrentEnterprise.Variables(" | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | =====Información Queue Dispositivo===== | ||
+ | \\ | ||
+ | COLECCION QUE MUESTRA LA CANTIDAD DE DATOS QUE QUEDAN POR ENVIAR.\\ | ||
+ | \\ | ||
+ | |||
+ | Esta colección se puede complicar todo lo que se quiera, incluso poniendo **Join** con otras tablas, para decir de que tabla faltan los datos | ||
+ | por enviar desde el dispositivo móvil a la central.\\ | ||
+ | \\ | ||
+ | |||
+ | La tabla MASTER_REPLICA_QUEUE, | ||
+ | tabla de sistema, con la cual se enviarán los datos desde el dispositivo móvil al servidor central.\\ | ||
+ | \\ | ||
+ | |||
+ | <code xml> | ||
+ | <coll name=" | ||
+ | sql=" | ||
+ | FROM master_replica_queue" | ||
+ | objname=" | ||
+ | editwidth=" | ||
+ | <group name=" | ||
+ | <prop name=" | ||
+ | </ | ||
+ | </ | ||
+ | \\ | ||
+ | |||
+ | | ||
+ | |||