Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md

This commit is contained in:
2026-08-18 20:59:52 -04:00
commit 454973e269
5978 changed files with 2664094 additions and 0 deletions
+110
View File
@@ -0,0 +1,110 @@
# API — Datos de Cocinas Modulares (MARMOTECH)
Servicio REST para consultar, por período, las ventas, gastos y consumo de insumos
de las cocinas modulares.
---
## Conexión
| | |
|---|---|
| **URL** | `https://ws.marmotech.com.do/gas/ws/r/restserver` |
| **Método** | `POST` |
| **Header** | `Content-Type: dbsync/json` |
| **Header** | `DBSync-Client: mbs` |
> Ambos headers son **obligatorios**. Si `DBSync-Client` no es exactamente `mbs`
> o el `Content-Type` no empieza con `dbsync/json`, el servidor responde `400 Bad request`.
---
## Cuerpo del request (body)
El body es un JSON con dos campos: `oper` y `data`.
**Importante:** `data` NO es un objeto — es un **string** que contiene otro JSON
(por eso sus comillas van escapadas con `\`).
```json
{
"oper": "datos_cocinas",
"data": "{\"usuario\":\"conecta\",\"clave\":\"conecta\",\"fechaCorte\":\"2026-07-01\"}"
}
```
### Parámetros dentro de `data`
| Campo | Tipo | Descripción |
|---|---|---|
| `usuario` | string | Usuario de base de datos para la conexión. |
| `clave` | string | Clave del usuario. |
| `fechaCorte` | string `YYYY-MM-DD` | Cualquier fecha dentro del **mes de producción** a consultar. El servicio toma el año/mes de esta fecha para calcular el rango (`fecha1`–`fecha2`). |
---
## Ejemplos por herramienta
### curl — Linux / Mac / Git Bash
```bash
curl -i -X POST "https://ws.marmotech.com.do/gas/ws/r/restserver" \
-H "Content-Type: dbsync/json" \
-H "DBSync-Client: mbs" \
-d '{"oper":"datos_cocinas","data":"{\"usuario\":\"conecta\",\"clave\":\"conecta\",\"fechaCorte\":\"2026-07-01\"}"}'
```
### curl — Windows CMD (cmd.exe)
```bat
curl.exe -i -X POST "https://ws.marmotech.com.do/gas/ws/r/restserver" -H "Content-Type: dbsync/json" -H "DBSync-Client: mbs" -d "{\"oper\":\"datos_cocinas\",\"data\":\"{\\\"usuario\\\":\\\"conecta\\\",\\\"clave\\\":\\\"conecta\\\",\\\"fechaCorte\\\":\\\"2026-07-01\\\"}\"}"
```
### Windows PowerShell (recomendado en Windows)
PowerShell maltrata las comillas al pasarlas a `curl.exe`; usa `Invoke-RestMethod`:
```powershell
$body = @'
{"oper":"datos_cocinas","data":"{\"usuario\":\"conecta\",\"clave\":\"conecta\",\"fechaCorte\":\"2026-07-01\"}"}
'@
Invoke-RestMethod -Uri "https://ws.marmotech.com.do/gas/ws/r/restserver" `
-Method Post -ContentType "dbsync/json" `
-Headers @{ "DBSync-Client" = "mbs" } -Body $body
```
### Postman
1. Método **POST**, URL `https://ws.marmotech.com.do/gas/ws/r/restserver`
2. Pestaña **Headers**: agregar `Content-Type: dbsync/json` y `DBSync-Client: mbs`
3. Pestaña **Body** → **raw** → pegar el JSON de la sección *Cuerpo del request*.
---
## Respuesta
`HTTP/1.1 200 OK` con `Content-Type: dbsync/json`. El cuerpo es un JSON:
```json
{
"ventasCantidad": 99,
"cantidadInsumos": 3568.904,
"ventasVAlor": 2347966.48,
"gastos": 128799.65,
"valorIsumos": 794649.12,
"cod_msg": 200,
"descripcion": "OPERACION EXITOSA"
}
```
| Campo | Descripción |
|---|---|
| `ventasCantidad` | Unidades vendidas de cocinas modulares en el período. |
| `ventasVAlor` | Ventas netas (bruto − descuento) de las facturas de cocinas. |
| `gastos` | Gastos del departamento de Ensamble Modulares (6118) en el período. |
| `cantidadInsumos` | Cantidad de insumos consumidos en el período. |
| `valorIsumos` | Valor de esos insumos al costo estándar. |
| `cod_msg` | `200` = OK. `400` = error (ver `descripcion`). |
| `descripcion` | Mensaje del resultado. Ej.: `OPERACION EXITOSA`, `USUARIO NO VALIDO`. |
### Errores comunes
| Situación | Respuesta |
|---|---|
| Usuario/clave de BD inválidos | `cod_msg: 400`, `descripcion: "USUARIO NO VALIDO ..."` |
| Header `DBSync-Client` o `Content-Type` incorrecto | `HTTP 400 Bad request` |
| `data` con JSON mal escapado | Error de parseo JSON (`-8109`) — revisar el escape de comillas |
+218
View File
@@ -0,0 +1,218 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Application gstVersion="30a05" version="5">
<AGSettings version="3">
<DynamicProperties version="2">
<DynamicProperty description="Action" dynamicContent="actionContent" editorInfo="editMode:true;isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Action" name="action" readOnly="false" type="ENUM"/>
<DynamicProperty description="Barcode source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Barcode" name="barcodeSrcField" readOnly="false" type="ENUM"/>
<DynamicProperty description="Allow exporting report" initialValue="true" isDefaultInherited="false" isHidden="false" label="canExport" name="canExport" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Refresh data on return" editorInfo="editMode:false;contains:All Documents|Current Document|All Rows|Current Row|None" initialValue="Current Row" isDefaultInherited="false" isHidden="false" label="Data Refresh" name="dataRefresh" readOnly="false" type="ENUM"/>
<DynamicProperty description="Default Mode" editorInfo="contains:DISPLAY|ADD|MODIFY|SEARCH|EMPTY" initialValue="" isDefaultInherited="false" isHidden="false" label="Default Mode" name="defaultMode" readOnly="false" type="ENUM"/>
<DynamicProperty description="Disable Add functionality" initialValue="false" isDefaultInherited="false" isHidden="false" label="disable Add" name="disableAdd" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Disable Delete functionality" initialValue="false" isDefaultInherited="false" isHidden="false" label="disable Delete" name="disableDelete" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Disable Display functionality" initialValue="false" isDefaultInherited="false" isHidden="true" label="disable Display" name="disableDisplay" readOnly="true" type="BOOLEAN"/>
<DynamicProperty description="Disable Empty functionality" initialValue="false" isDefaultInherited="false" isHidden="true" label="disable Empty" name="disableEmpty" readOnly="true" type="BOOLEAN"/>
<DynamicProperty description="Disable Modify functionality" initialValue="false" isDefaultInherited="false" isHidden="false" label="disable Modify" name="disableModify" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Disable Search functionality" initialValue="false" isDefaultInherited="false" isHidden="false" label="disable Search" name="disableSearch" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Destination Field" dynamicContent="dstFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Destination Field" name="filterDstField" readOnly="false" type="FIELDS"/>
<DynamicProperty description="Source Field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Source Field" name="filterSrcField" readOnly="false" type="FIELDS"/>
<DynamicProperty description="Default Mode" editorInfo="contains:DISPLAY|ADD|MODIFY|SEARCH|EMPTY" initialValue="DISPLAY" isDefaultInherited="false" isHidden="false" label="Default Mode" name="formDefaultMode" readOnly="false" type="ENUM"/>
<DynamicProperty description="Open Mode" editorInfo="contains:DISPLAY|ADD|MODIFY|SEARCH|EMPTY" initialValue="DISPLAY" isDefaultInherited="false" isHidden="false" label="Open Mode" name="formOpenMode" readOnly="false" type="ENUM"/>
<DynamicProperty description="Add - ON cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="false" label="On cancel" name="formTransitionAddCancel" readOnly="false" type="ENUM"/>
<DynamicProperty description="Add - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="false" label="On close" name="formTransitionAddClose" readOnly="false" type="ENUM"/>
<DynamicProperty description="Add - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitApp" isDefaultInherited="false" isHidden="false" label="On exit" name="formTransitionAddExit" readOnly="false" type="ENUM"/>
<DynamicProperty description="Add - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="false" label="On accept" name="formTransitionAddOk" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="false" label="On cancel" name="formTransitionDisplayCancel" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="false" label="On close" name="formTransitionDisplayClose" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitApp" isDefaultInherited="false" isHidden="false" label="On exit" name="formTransitionDisplayExit" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="false" label="On accept" name="formTransitionDisplayOk" readOnly="false" type="ENUM"/>
<DynamicProperty description="Modify - ON cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="false" label="On cancel" name="formTransitionModifyCancel" readOnly="false" type="ENUM"/>
<DynamicProperty description="Modify - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="false" label="On close" name="formTransitionModifyClose" readOnly="false" type="ENUM"/>
<DynamicProperty description="Modify - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitApp" isDefaultInherited="false" isHidden="false" label="On exit" name="formTransitionModifyExit" readOnly="false" type="ENUM"/>
<DynamicProperty description="Modify - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="false" label="On accept" name="formTransitionModifyOk" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON Cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="false" label="On cancel" name="formTransitionSearchCancel" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="false" label="On close" name="formTransitionSearchClose" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitApp" isDefaultInherited="false" isHidden="false" label="On exit" name="formTransitionSearchExit" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="false" label="On accept" name="formTransitionSearchOk" readOnly="false" type="ENUM"/>
<DynamicProperty description="Image path source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Image Path" name="imagePathSrcField" readOnly="false" type="ENUM"/>
<DynamicProperty description="Mail attachment path source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Attachment" name="mailAttachmentSrcField" readOnly="false" type="FIELDS"/>
<DynamicProperty description="Mail bcc source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Bcc" name="mailBccSrcField" readOnly="false" type="FIELDS"/>
<DynamicProperty description="Mail cc source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Cc" name="mailCcSrcField" readOnly="false" type="FIELDS"/>
<DynamicProperty description="Mail content source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Content" name="mailContentSrcField" readOnly="false" type="ENUM"/>
<DynamicProperty description="Mail subject source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Subject" name="mailSubjectSrcField" readOnly="false" type="ENUM"/>
<DynamicProperty description="Mail to source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="To" name="mailToSrcField" readOnly="false" type="FIELDS"/>
<DynamicProperty description="Maps query source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Query" name="mapsSrcField" readOnly="false" type="FIELDS"/>
<DynamicProperty description="Open Mode" editorInfo="contains:DISPLAY|ADD|MODIFY|SEARCH|EMPTY" initialValue="" isDefaultInherited="false" isHidden="false" label="Open Mode" name="openMode" readOnly="false" type="ENUM"/>
<DynamicProperty description="Phone number source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Phone Number" name="phoneSrcField" readOnly="false" type="ENUM"/>
<DynamicProperty description="Allow quick exporting of the current report to HTML format" initialValue="true" isDefaultInherited="false" isHidden="false" label="quickHTML" name="quickHTML" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Allow quick exporting of the current report to PDF format" initialValue="true" isDefaultInherited="false" isHidden="false" label="quickPDF" name="quickPDF" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Allow quick previewing of the current report" initialValue="true" isDefaultInherited="false" isHidden="false" label="quickPreview" name="quickPreview" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Allow quick printing of the current report" initialValue="true" isDefaultInherited="false" isHidden="false" label="quickPrint" name="quickPrint" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Allow quick exporting of the current report to RTF (MS-Word) format" initialValue="true" isDefaultInherited="false" isHidden="false" label="quickRTF" name="quickRTF" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Allow quick exporting of the current report to XLS (Excel) format" initialValue="true" isDefaultInherited="false" isHidden="false" label="quickXLS" name="quickXLS" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="Add - ON cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On cancel" name="relationTransitionAddCancel" readOnly="false" type="ENUM"/>
<DynamicProperty description="Add - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On close" name="relationTransitionAddClose" readOnly="false" type="ENUM"/>
<DynamicProperty description="Add - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On exit" name="relationTransitionAddExit" readOnly="false" type="ENUM"/>
<DynamicProperty description="Add - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On accept" name="relationTransitionAddOk" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On cancel" name="relationTransitionDisplayCancel" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On close" name="relationTransitionDisplayClose" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On exit" name="relationTransitionDisplayExit" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On accept" name="relationTransitionDisplayOk" readOnly="false" type="ENUM"/>
<DynamicProperty description="Modify - ON cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On cancel" name="relationTransitionModifyCancel" readOnly="false" type="ENUM"/>
<DynamicProperty description="Modify - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On close" name="relationTransitionModifyClose" readOnly="false" type="ENUM"/>
<DynamicProperty description="Modify - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On exit" name="relationTransitionModifyExit" readOnly="false" type="ENUM"/>
<DynamicProperty description="Modify - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On accept" name="relationTransitionModifyOk" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON Cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On cancel" name="relationTransitionSearchCancel" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On close" name="relationTransitionSearchClose" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On exit" name="relationTransitionSearchExit" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="" isDefaultInherited="false" isHidden="false" label="On accept" name="relationTransitionSearchOk" readOnly="false" type="ENUM"/>
<DynamicProperty description="Label displayed in the &apos;Report Print Settings&apos; dialog" initialValue="" isDefaultInherited="false" isHidden="false" label="Report Label" name="reportLabel" readOnly="false" type="TEXT"/>
<DynamicProperty description="Report file (.4rp)" initialValue="" isDefaultInherited="false" isHidden="false" label="Report File" name="reportPath" readOnly="false" type="TEXT"/>
<DynamicProperty description="Row Bound" initialValue="false" isDefaultInherited="false" isHidden="false" label="Row Bound" name="rowbound" readOnly="false" type="BOOLEAN"/>
<DynamicProperty description="SMS content source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Content" name="smsContentSrcField" readOnly="false" type="ENUM"/>
<DynamicProperty description="SMS to source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="To" name="smsToSrcField" readOnly="false" type="FIELDS"/>
<DynamicProperty description="Source Field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Source Field" name="srcField" readOnly="false" type="FIELDS"/>
<DynamicProperty description="Source Record" dynamicContent="srcRecordContent" editorInfo="editMode:false;isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Source Record" name="srcRecord" readOnly="false" type="ENUM"/>
<DynamicProperty description="Vcard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Vcard" name="vCardSrcField" readOnly="false" type="ENUM"/>
<DynamicProperty description="FirstName vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="First Name" name="vc_FirstName" readOnly="false" type="ENUM"/>
<DynamicProperty description="LastName vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Last Name" name="vc_LastName" readOnly="false" type="ENUM"/>
<DynamicProperty description="MiddleName vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Middle Name" name="vc_MiddleName" readOnly="false" type="ENUM"/>
<DynamicProperty description="Prefix vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Prefix" name="vc_Prefix" readOnly="false" type="ENUM"/>
<DynamicProperty description="Suffix vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Suffix" name="vc_Suffix" readOnly="false" type="ENUM"/>
<DynamicProperty description="City of home address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="City" name="vc_address_home_City" readOnly="false" type="ENUM"/>
<DynamicProperty description="Country of home address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Country" name="vc_address_home_Country" readOnly="false" type="ENUM"/>
<DynamicProperty description="Extended Address of home address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Extended Address" name="vc_address_home_ExtendedAddress" readOnly="false" type="ENUM"/>
<DynamicProperty description="Post Office Box of home address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Post Office Box" name="vc_address_home_PostOfficeBox" readOnly="false" type="ENUM"/>
<DynamicProperty description="State of home address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="State" name="vc_address_home_State" readOnly="false" type="ENUM"/>
<DynamicProperty description="Street of home address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Street" name="vc_address_home_Street" readOnly="false" type="ENUM"/>
<DynamicProperty description="ZIP of home address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="ZIP" name="vc_address_home_ZIP" readOnly="false" type="ENUM"/>
<DynamicProperty description="City of work address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="City" name="vc_address_work_City" readOnly="false" type="ENUM"/>
<DynamicProperty description="Country of work address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Country" name="vc_address_work_Country" readOnly="false" type="ENUM"/>
<DynamicProperty description="Extended Address of work address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Extended Address" name="vc_address_work_ExtendedAddress" readOnly="false" type="ENUM"/>
<DynamicProperty description="Post Office Box of work address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Post Office Box" name="vc_address_work_PostOfficeBox" readOnly="false" type="ENUM"/>
<DynamicProperty description="State of work address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="State" name="vc_address_work_State" readOnly="false" type="ENUM"/>
<DynamicProperty description="Street of work address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Street" name="vc_address_work_Street" readOnly="false" type="ENUM"/>
<DynamicProperty description="ZIP of work address in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="ZIP" name="vc_address_work_ZIP" readOnly="false" type="ENUM"/>
<DynamicProperty description="birthday vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Birthday" name="vc_birthday" readOnly="false" type="ENUM"/>
<DynamicProperty description="department vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Department" name="vc_department" readOnly="false" type="ENUM"/>
<DynamicProperty description="Home email in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Home" name="vc_email_home" readOnly="false" type="ENUM"/>
<DynamicProperty description="Work email in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Work" name="vc_email_work" readOnly="false" type="ENUM"/>
<DynamicProperty description="formattedName vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Formatted Name" name="vc_formattedName" readOnly="false" type="ENUM"/>
<DynamicProperty description="jobTitle vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Job Title" name="vc_jobTitle" readOnly="false" type="ENUM"/>
<DynamicProperty description="nickname vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Nickname" name="vc_nickname" readOnly="false" type="ENUM"/>
<DynamicProperty description="note vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Note" name="vc_note" readOnly="false" type="ENUM"/>
<DynamicProperty description="organization vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Organization" name="vc_organization" readOnly="false" type="ENUM"/>
<DynamicProperty description="Mobile phone in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Mobile" name="vc_phone_cell_voice" readOnly="false" type="ENUM"/>
<DynamicProperty description="Home fax in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Home Fax" name="vc_phone_home_fax" readOnly="false" type="ENUM"/>
<DynamicProperty description="Home phone in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Home" name="vc_phone_home_voice" readOnly="false" type="ENUM"/>
<DynamicProperty description="Main phone in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Main" name="vc_phone_main" readOnly="false" type="ENUM"/>
<DynamicProperty description="Work fax in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Work Fax" name="vc_phone_work_fax" readOnly="false" type="ENUM"/>
<DynamicProperty description="Work phone in vCard source field" dynamicContent="srcFieldContent" editorInfo="isDynamic:true" initialValue="" isDefaultInherited="false" isHidden="false" label="Work" name="vc_phone_work_voice" readOnly="false" type="ENUM"/>
<DynamicProperty description="Adds a comment to a Web Service" initialValue="" isDefaultInherited="false" isHidden="false" label="Comment" name="wsComment" readOnly="false" type="TEXT"/>
<DynamicProperty description="Service Name" initialValue="" isDefaultInherited="false" isHidden="false" label="Service Name" name="wsName" readOnly="false" type="TEXT"/>
<DynamicProperty description="Service Namespace" initialValue="" isDefaultInherited="false" isHidden="false" label="Namespace" name="wsNamespace" readOnly="false" type="TEXT"/>
<DynamicProperty description="Default Mode" editorInfo="contains:DISPLAY|SEARCH" initialValue="DISPLAY" isDefaultInherited="false" isHidden="false" label="Default Mode" name="zoomDefaultMode" readOnly="false" type="ENUM"/>
<DynamicProperty description="Open Mode" editorInfo="contains:DISPLAY|SEARCH" initialValue="DISPLAY" isDefaultInherited="false" isHidden="false" label="Open Mode" name="zoomOpenMode" readOnly="false" type="ENUM"/>
<DynamicProperty description="Add - ON cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="true" label="On cancel" name="zoomTransitionAddCancel" readOnly="true" type="ENUM"/>
<DynamicProperty description="Add - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="true" label="On close" name="zoomTransitionAddClose" readOnly="true" type="ENUM"/>
<DynamicProperty description="Add - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitApp" isDefaultInherited="false" isHidden="true" label="On exit" name="zoomTransitionAddExit" readOnly="true" type="ENUM"/>
<DynamicProperty description="Add - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="true" label="On accept" name="zoomTransitionAddOk" readOnly="true" type="ENUM"/>
<DynamicProperty description="Display - ON cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="false" label="On cancel" name="zoomTransitionDisplayCancel" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="false" label="On close" name="zoomTransitionDisplayClose" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitApp" isDefaultInherited="false" isHidden="false" label="On exit" name="zoomTransitionDisplayExit" readOnly="false" type="ENUM"/>
<DynamicProperty description="Display - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="false" label="On accept" name="zoomTransitionDisplayOk" readOnly="false" type="ENUM"/>
<DynamicProperty description="Modify - ON cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="true" label="On cancel" name="zoomTransitionModifyCancel" readOnly="true" type="ENUM"/>
<DynamicProperty description="Modify - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="true" label="On close" name="zoomTransitionModifyClose" readOnly="true" type="ENUM"/>
<DynamicProperty description="Modify - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitApp" isDefaultInherited="false" isHidden="true" label="On exit" name="zoomTransitionModifyExit" readOnly="true" type="ENUM"/>
<DynamicProperty description="Modify - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="true" label="On accept" name="zoomTransitionModifyOk" readOnly="true" type="ENUM"/>
<DynamicProperty description="Search - ON Cancel" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="false" label="On cancel" name="zoomTransitionSearchCancel" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON close" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitForm" isDefaultInherited="false" isHidden="false" label="On close" name="zoomTransitionSearchClose" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON exit" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ExitApp" isDefaultInherited="false" isHidden="false" label="On exit" name="zoomTransitionSearchExit" readOnly="false" type="ENUM"/>
<DynamicProperty description="Search - ON accept" editorInfo="contains:ReturnToDefaultMode|ReturnToCallerMode|StayInMode|ExitForm|ExitApp" initialValue="ReturnToDefaultMode" isDefaultInherited="false" isHidden="false" label="On accept" name="zoomTransitionSearchOk" readOnly="false" type="ENUM"/>
<DynamicPropertyGroup collapsed="false" description="Default Automaton Settings for incoming relation in ADD mode on OK/Cancel/Close/Exit actions" label="ADD Behavior" name="formAutomatonSettingsAdd" properties="formTransitionAddOk;formTransitionAddCancel;formTransitionAddClose;formTransitionAddExit"/>
<DynamicPropertyGroup collapsed="false" description="Default Automaton Settings for incoming relation in DISPLAY mode on OK/Cancel/Close/Exit actions" label="DISPLAY Behavior" name="formAutomatonSettingsDisplay" properties="formTransitionDisplayOk;formTransitionDisplayCancel;formTransitionDisplayClose;formTransitionDisplayExit"/>
<DynamicPropertyGroup collapsed="false" description="Default Automaton Settings for incoming relation in MODIFY mode on OK/Cancel/Close/Exit actions" label="MODIFY Behavior" name="formAutomatonSettingsModify" properties="formTransitionModifyOk;formTransitionModifyCancel;formTransitionModifyClose;formTransitionModifyExit"/>
<DynamicPropertyGroup collapsed="false" description="Default Automaton Settings for incoming relation in SEARCH mode on OK/Cancel/Close/Exit actions" label="SEARCH Behavior" name="formAutomatonSettingsSearch" properties="formTransitionSearchOk;formTransitionSearchCancel;formTransitionSearchClose;formTransitionSearchExit"/>
<DynamicPropertyGroup collapsed="false" description="User properties group" label="Report Options" name="formReportOptions" properties="quickPrint;quickPreview;quickPDF;quickHTML;quickXLS;quickRTF;canExport"/>
<DynamicPropertyGroup collapsed="false" description="User Interface Settings" label="UI Settings" name="formUiSettings" properties="formOpenMode;formDefaultMode"/>
<DynamicPropertyGroup collapsed="false" description="Target Automaton Settings in ADD mode on OK/Cancel/Close/Exit actions" label="ADD Behavior" name="relationAutomatonSettingsAdd" properties="relationTransitionAddOk;relationTransitionAddCancel;relationTransitionAddClose;relationTransitionAddExit"/>
<DynamicPropertyGroup collapsed="false" description="Target Automaton Settings in DISPLAY mode on OK/Cancel/Close/Exit actions" label="DISPLAY Behavior" name="relationAutomatonSettingsDisplay" properties="relationTransitionDisplayOk;relationTransitionDisplayCancel;relationTransitionDisplayClose;relationTransitionDisplayExit"/>
<DynamicPropertyGroup collapsed="false" description="Target Automaton Settings in MODIFY mode on OK/Cancel/Close/Exit actions" label="MODIFY Behavior" name="relationAutomatonSettingsModify" properties="relationTransitionModifyOk;relationTransitionModifyCancel;relationTransitionModifyClose;relationTransitionModifyExit"/>
<DynamicPropertyGroup collapsed="false" description="Target Automaton Settings in SEARCH mode on OK/Cancel/Close/Exit actions" label="SEARCH Behavior" name="relationAutomatonSettingsSearch" properties="relationTransitionSearchOk;relationTransitionSearchCancel;relationTransitionSearchClose;relationTransitionSearchExit"/>
<DynamicPropertyGroup collapsed="false" description="Results properties group" label="Results" name="relationBarcodeResults" properties="barcodeSrcField"/>
<DynamicPropertyGroup collapsed="false" description="Email properties group" label="Email" name="relationContactEmail" properties="vc_email_work;vc_email_home"/>
<DynamicPropertyGroup collapsed="false" description="Home address properties group" label="Address Home" name="relationContactHomeAddress" properties="vc_address_home_Street;vc_address_home_City;vc_address_home_State;vc_address_home_ZIP;vc_address_home_Country;vc_address_home_PostOfficeBox;vc_address_home_ExtendedAddress"/>
<DynamicPropertyGroup collapsed="false" description="Person properties group" label="Person" name="relationContactPerson" properties="vc_FirstName;vc_LastName;vc_MiddleName;vc_Prefix;vc_Suffix;vc_formattedName;vc_nickname;vc_jobTitle;vc_organization;vc_department;vc_birthday;vc_note"/>
<DynamicPropertyGroup collapsed="false" description="Phone properties group" label="Phone" name="relationContactPhone" properties="vc_phone_cell_voice;vc_phone_work_voice;vc_phone_home_voice;vc_phone_main;vc_phone_work_fax;vc_phone_home_fax"/>
<DynamicPropertyGroup collapsed="false" description="Results properties group" label="Results" name="relationContactResults" properties="vCardSrcField"/>
<DynamicPropertyGroup collapsed="false" description="Work address properties group" label="Address Work" name="relationContactWorkAddress" properties="vc_address_work_Street;vc_address_work_City;vc_address_work_State;vc_address_work_ZIP;vc_address_work_Country;vc_address_work_PostOfficeBox;vc_address_work_ExtendedAddress"/>
<DynamicPropertyGroup collapsed="false" description="Destination Form User Interface Settings" label="Destination UI Settings" name="relationDestinationUiSettings" properties="openMode;defaultMode"/>
<DynamicPropertyGroup collapsed="false" description="Filter properties group" label="Filter" name="relationFilter" properties="filterSrcField;filterDstField"/>
<DynamicPropertyGroup collapsed="false" description="Disable Functionality" label="Functionality" name="relationFunctionality" properties="disableDisplay;disableAdd;disableModify;disableDelete;disableSearch;disableEmpty"/>
<DynamicPropertyGroup collapsed="false" description="Results properties group" label="Results" name="relationImageResults" properties="imagePathSrcField"/>
<DynamicPropertyGroup collapsed="false" description="Mail parameter properties group" label="Parameters" name="relationMailParameters" properties="mailToSrcField;mailCcSrcField;mailBccSrcField;mailSubjectSrcField;mailContentSrcField;mailAttachmentSrcField"/>
<DynamicPropertyGroup collapsed="false" description="Maps parameter properties group" label="Parameters" name="relationMapsParameters" properties="mapsSrcField"/>
<DynamicPropertyGroup collapsed="false" description="Phone parameter properties group" label="Parameters" name="relationPhoneParameters" properties="phoneSrcField"/>
<DynamicPropertyGroup collapsed="false" description="Position properties group" label="Position" name="relationPosition" properties="srcField"/>
<DynamicPropertyGroup collapsed="false" description="Report Settings" label="Report Settings" name="relationReportSettings" properties="reportPath;reportLabel"/>
<DynamicPropertyGroup collapsed="false" description="SMS parameter properties group" label="Parameters" name="relationSmsParameters" properties="smsToSrcField;smsContentSrcField"/>
<DynamicPropertyGroup collapsed="false" description="Source Form User Interface Settings" label="Source UI Settings" name="relationSourceUiSettings" properties="action;srcRecord;rowbound;dataRefresh"/>
<DynamicPropertyGroup collapsed="false" description="Web service properties group" label="Web Service" name="webService" properties="wsName;wsComment"/>
<DynamicPropertyGroup collapsed="false" description="Web service server properties group" label="Web Service Server" name="webServiceServer" properties="wsNamespace"/>
<DynamicPropertyGroup collapsed="false" description="Default Automaton Settings for incoming relation in ADD mode on OK/Cancel/Close/Exit actions" label="ADD Behavior" name="zoomAutomatonSettingsAdd" properties="zoomTransitionAddOk;zoomTransitionAddCancel;zoomTransitionAddClose;zoomTransitionAddExit"/>
<DynamicPropertyGroup collapsed="false" description="Default Automaton Settings for incoming relation in DISPLAY mode on OK/Cancel/Close/Exit actions" label="DISPLAY Behavior" name="zoomAutomatonSettingsDisplay" properties="zoomTransitionDisplayOk;zoomTransitionDisplayCancel;zoomTransitionDisplayClose;zoomTransitionDisplayExit"/>
<DynamicPropertyGroup collapsed="false" description="Default Automaton Settings for incoming relation in MODIFY mode on OK/Cancel/Close/Exit actions" label="MODIFY Behavior" name="zoomAutomatonSettingsModify" properties="zoomTransitionModifyOk;zoomTransitionModifyCancel;zoomTransitionModifyClose;zoomTransitionModifyExit"/>
<DynamicPropertyGroup collapsed="false" description="Default Automaton Settings for incoming relation in SEARCH mode on OK/Cancel/Close/Exit actions" label="SEARCH Behavior" name="zoomAutomatonSettingsSearch" properties="zoomTransitionSearchOk;zoomTransitionSearchCancel;zoomTransitionSearchClose;zoomTransitionSearchExit"/>
<DynamicPropertyGroup collapsed="false" description="User Interface Settings" label="UI Settings" name="zoomUiSettings" properties="zoomOpenMode;zoomDefaultMode"/>
</DynamicProperties>
<Items>
<Item actions="BALocateInPM BAAddRelationTo" depth="1" extension="4prg" icon="bullet_class" label="Program" name="Program"/>
<Item actions="BALocateInPM BAAddRelationTo" dynamicProperties="formOpenMode;formDefaultMode;formTransitionDisplayOk;formTransitionDisplayCancel;formTransitionDisplayClose;formTransitionDisplayExit;formTransitionModifyOk;formTransitionModifyCancel;formTransitionModifyClose;formTransitionModifyExit;formTransitionAddOk;formTransitionAddCancel;formTransitionAddClose;formTransitionAddExit;formTransitionSearchOk;formTransitionSearchCancel;formTransitionSearchClose;formTransitionSearchExit;quickPrint;quickPreview;quickPDF;quickHTML;quickXLS;quickRTF;canExport" extension="4fdm" icon="document_4fdm" label="CRUD Form" name="Form"/>
<Item actions="BALocateInPM BAAddRelationTo" dynamicProperties="zoomOpenMode;zoomDefaultMode;zoomTransitionDisplayOk;zoomTransitionDisplayCancel;zoomTransitionDisplayClose;zoomTransitionDisplayExit;zoomTransitionModifyOk;zoomTransitionModifyCancel;zoomTransitionModifyClose;zoomTransitionModifyExit;zoomTransitionAddOk;zoomTransitionAddCancel;zoomTransitionAddClose;zoomTransitionAddExit;zoomTransitionSearchOk;zoomTransitionSearchCancel;zoomTransitionSearchClose;zoomTransitionSearchExit" extension="4fdz" icon="document_4fdz" label="Zoom Form" name="Zoom"/>
<Item actions="BALocateInPM BAAddRelationTo" extension="4rd" icon="document_4rd_sql" label="Report Data" name="ReportData"/>
<Item actions="BALocateInPM BAAddRelationTo" depth="1" dynamicProperties="wsNamespace" extension="4wsprg" icon="document_4wsprg" label="SOAP Web Service Server" name="WebServiceServer"/>
<Item actions="BALocateInPM BAAddRelationTo" dynamicProperties="wsName;wsComment" extension="4ws" icon="document_4ws" label="SOAP Web Service" name="WebService"/>
<Item actions="BALocateInPM BAAddRelationTo" dynamicProperties="wsName;wsComment;formOpenMode;formDefaultMode;formTransitionDisplayOk;formTransitionDisplayCancel;formTransitionDisplayClose;formTransitionDisplayExit;formTransitionModifyOk;formTransitionModifyCancel;formTransitionModifyClose;formTransitionModifyExit;formTransitionAddOk;formTransitionAddCancel;formTransitionAddClose;formTransitionAddExit;formTransitionSearchOk;formTransitionSearchCancel;formTransitionSearchClose;formTransitionSearchExit;quickPrint;quickPreview;quickPDF;quickHTML;quickXLS;quickRTF;canExport" extension="4fdmws" icon="document_4fdmws" label="CRUD Form and SOAP Web Service" name="FormWebService"/>
<Item actions="BALocateInPM BAAddRelationTo" dynamicProperties="wsName;wsComment;zoomOpenMode;zoomDefaultMode;zoomTransitionDisplayOk;zoomTransitionDisplayCancel;zoomTransitionDisplayClose;zoomTransitionDisplayExit;zoomTransitionModifyOk;zoomTransitionModifyCancel;zoomTransitionModifyClose;zoomTransitionModifyExit;zoomTransitionAddOk;zoomTransitionAddCancel;zoomTransitionAddClose;zoomTransitionAddExit;zoomTransitionSearchOk;zoomTransitionSearchCancel;zoomTransitionSearchClose;zoomTransitionSearchExit" extension="4fdzws" icon="document_4fdzws" label="Zoom Form and SOAP Web Service" name="ZoomWebService"/>
<Item actions="BALocateInPM BAAddRelationTo" depth="1" extension="4wsjprg" icon="document_4wsjprg" label="JSON Web Service Server" name="WebServiceServerJSON"/>
<Item actions="BALocateInPM BAAddRelationTo" dynamicProperties="wsName;wsComment" extension="4wsj" icon="document_4wsj" label="JSON Web Service" name="WebServiceJSON"/>
<Item actions="BALocateInPM BAAddRelationTo" dynamicProperties="wsName;wsComment;formOpenMode;formDefaultMode;formTransitionDisplayOk;formTransitionDisplayCancel;formTransitionDisplayClose;formTransitionDisplayExit;formTransitionModifyOk;formTransitionModifyCancel;formTransitionModifyClose;formTransitionModifyExit;formTransitionAddOk;formTransitionAddCancel;formTransitionAddClose;formTransitionAddExit;formTransitionSearchOk;formTransitionSearchCancel;formTransitionSearchClose;formTransitionSearchExit;quickPrint;quickPreview;quickPDF;quickHTML;quickXLS;quickRTF;canExport" extension="4fdmwsj" icon="document_4fdmwsj" label="CRUD Form and JSON Web Service" name="FormWebServiceJSON"/>
<Item actions="BALocateInPM BAAddRelationTo" dynamicProperties="wsName;wsComment;zoomOpenMode;zoomDefaultMode;zoomTransitionDisplayOk;zoomTransitionDisplayCancel;zoomTransitionDisplayClose;zoomTransitionDisplayExit;zoomTransitionModifyOk;zoomTransitionModifyCancel;zoomTransitionModifyClose;zoomTransitionModifyExit;zoomTransitionAddOk;zoomTransitionAddCancel;zoomTransitionAddClose;zoomTransitionAddExit;zoomTransitionSearchOk;zoomTransitionSearchCancel;zoomTransitionSearchClose;zoomTransitionSearchExit" extension="4fdzwsj" icon="document_4fdzwsj" label="Zoom Form and JSON Web Service" name="ZoomWebServiceJSON"/>
<Item actions="BALocateInPM BAAddRelationTo" extension="4fdc" icon="document_4fdc" label="Custom Form" name="CustomForm"/>
<BasicItem actions="BAAddRelationTo" icon="ba_takePhoto" label="Photo" name="Photo"/>
<BasicItem actions="BAAddRelationTo" icon="ba_choosePhoto" label="Gallery" name="Gallery"/>
<BasicItem actions="BAAddRelationTo" icon="ba_callPhone" label="Phone" name="Phone"/>
<BasicItem actions="BAAddRelationTo" icon="ba_composeMail" label="Mail" name="Mail"/>
<BasicItem actions="BAAddRelationTo" icon="ba_composeSms" label="SMS" name="SMS"/>
<BasicItem actions="BAAddRelationTo" icon="ba_chooseContact" label="Contact" name="Contact"/>
<BasicItem actions="BAAddRelationTo" icon="ba_mapsTo" label="Maps" name="Maps"/>
<BasicItem actions="BAAddRelationTo" icon="ba_scanBarcode" label="Barcode" name="Barcode"/>
<Relation dynamicProperties="action;srcRecord;rowbound;srcField;filterSrcField;filterDstField;openMode;defaultMode;dataRefresh;disableDisplay;disableAdd;disableModify;disableDelete;disableSearch;disableEmpty;relationTransitionDisplayOk;relationTransitionDisplayCancel;relationTransitionDisplayClose;relationTransitionDisplayExit;relationTransitionModifyOk;relationTransitionModifyCancel;relationTransitionModifyClose;relationTransitionModifyExit;relationTransitionAddOk;relationTransitionAddCancel;relationTransitionAddClose;relationTransitionAddExit;relationTransitionSearchOk;relationTransitionSearchCancel;relationTransitionSearchClose;relationTransitionSearchExit" icon="ba_relation" label="Form" name="Relation"/>
<Relation dynamicProperties="action;srcRecord;rowbound;srcField;filterSrcField;filterDstField;dataRefresh" icon="ba_relation" label="Custom Form" name="CustomFormRelation"/>
<Relation dynamicProperties="srcField;filterSrcField;filterDstField;reportPath;reportLabel" icon="ba_relation" label="Report" name="ReportRelation"/>
<Relation icon="ba_relation" label="SOAP Web Service" name="WebServiceRelation"/>
<Relation icon="ba_relation" label="JSON Web Service" name="WebServiceRelationJSON"/>
<Relation dynamicProperties="action;phoneSrcField" icon="ba_relation" label="Phone" name="PhoneRelation"/>
<Relation dynamicProperties="action;mailToSrcField;mailCcSrcField;mailBccSrcField;mailSubjectSrcField;mailContentSrcField;mailAttachmentSrcField" icon="ba_relation" label="Mail" name="MailRelation"/>
<Relation dynamicProperties="action;smsToSrcField;smsContentSrcField" icon="ba_relation" label="SMS" name="SMSRelation"/>
<Relation dynamicProperties="action;mapsSrcField" icon="ba_relation" label="Maps" name="MapsRelation"/>
<Relation dynamicProperties="action;imagePathSrcField" icon="ba_relation" label="Photo" name="PhotoRelation"/>
<Relation dynamicProperties="action;imagePathSrcField" icon="ba_relation" label="Gallery" name="GalleryRelation"/>
<Relation dynamicProperties="action;vCardSrcField;vc_FirstName;vc_LastName;vc_MiddleName;vc_Prefix;vc_Suffix;vc_formattedName;vc_nickname;vc_jobTitle;vc_organization;vc_department;vc_birthday;vc_note;vc_address_work_Street;vc_address_work_City;vc_address_work_State;vc_address_work_ZIP;vc_address_work_Country;vc_address_work_PostOfficeBox;vc_address_work_ExtendedAddress;vc_address_home_Street;vc_address_home_City;vc_address_home_State;vc_address_home_ZIP;vc_address_home_Country;vc_address_home_PostOfficeBox;vc_address_home_ExtendedAddress;vc_phone_cell_voice;vc_phone_work_voice;vc_phone_home_voice;vc_phone_main;vc_phone_work_fax;vc_phone_home_fax;vc_email_work;vc_email_home" icon="ba_relation" label="Contact" name="ContactRelation"/>
<Relation dynamicProperties="action;barcodeSrcField" icon="ba_relation" label="Barcode" name="BarcodeRelation"/>
</Items>
</AGSettings>
<Items>
<Item fileName="" id="{5ff5e0c7-2ea3-46f2-a03e-d187c171cfb6}" name="main" type="Program">
<Relation dst="{b971e095-175c-4980-bb84-079676ebe4bd}" id="{f7c21e14-d080-487c-b422-515c59346a0c}" name="Relation1" type="Relation"/>
</Item>
<Item fileName="" id="{b971e095-175c-4980-bb84-079676ebe4bd}" name="form" type="Form"/>
</Items>
<IgnoredFiles/>
<Views activeView="View-1">
<View name="View-1">
<Layout>
<![CDATA[AAAAAgAAAEwAewA1AGYAZgA1AGUAMABjADcALQAyAGUAYQAzAC0ANAA2AGYAMgAtAGEAMAAzAGUALQBkADEAOAA3AGMAMQA3ADEAYwBmAGIANgB9QFgAAAAAAABAWYAAAAAAAD98rAgxJul5AQAAAEwAewBiADkANwAxAGUAMAA5ADUALQAxADcANQBjAC0ANAA5ADgAMAAtAGIAYgA4ADQALQAwADcAOQA2ADcANgBlAGIAZQA0AGIAZAB9QHEAAAAAAABAWwAAAAAAAD+Kn752yLQ8AQ==]]>
</Layout>
</View>
</Views>
</Application>
@@ -0,0 +1 @@
{"oper":"datos_cocinas","data":"{\"usuario\":\"conecta\",\"clave\":\"conecta\",\"fechaCorte\":\"2026-07-01\"}"}
+75
View File
@@ -0,0 +1,75 @@
IMPORT util
MAIN
DEFINE jstr STRING
DISPLAY "Testing the server from a Genero client ..."
-- esta le da error, y para mi es correcto que de error ya que la estructura del record destino es distinta
LET jstr='{"oper":"respuesta","data":{"usuario":"conecta","clave":"conecta","respuesta":{"num_emp":4489,"nombre":"ADRIAN ANDERSON MENDEZ GONZALEZ","id_pregunta":"ENC001","departamento":"CANTERA VICENTE NOBLE","respuesta":"10","pregunta":"CUAN SATISFECHO USTED SE SIENTE CON EL NIVEL DE SERVICIO DE SU SUPLIDOR INTERNO?"}}}'
CALL propose_type(jstr)
-- este no da error pero al armar el string desde Genero manualmente, hay que poner el doble backslash
LET jstr='{"oper":"respuesta","data":"{\\"credenciales\\":{\\"usuario\\":\\"conecta\\",\\"clave\\":\\"conecta\\"},\\"repuesta\\":{\\"num_emp\\":3355,\\"cedula\\":\\"00104581939\\",\\"nombre\\":\\"JUAN FRANCISCO SOTO CONCEPCION\\",\\"id_pregunta\\":\\"ENC001\\",\\"pregunta\\":\\"CUAN SATISFECHO USTED SE SIENTE CON EL NIVEL DE SERVICIO DE SU SUPLIDOR INTERNO?\\",\\"repuesta\\":\\"1\\",\\"departamento\\":\\"TECNOLOGIA\\"},\\"mensajes\\":{\\"cod_msg\\":0}}"}'
CALL propose_type(jstr)
-- este obviamente no da error ya que arma el string desde los records
CALL arma_jstr() RETURNING jstr
CALL propose_type(jstr)
END MAIN
FUNCTION propose_type(str_in)
DEFINE str_in STRING
DISPLAY "JSON String for the Request: \n", str_in
DISPLAY "Proposed type: \n",util.JSON.proposeType(str_in)
END FUNCTION
FUNCTION arma_jstr()
DEFINE jstr STRING
TYPE t_sync_cmd RECORD -- el formato que espera recibir el server
oper STRING,
data STRING
END RECORD
DEFINE r_cmd t_sync_cmd
DEFINE p RECORD
credenciales RECORD
usuario,clave VARCHAR(50)
END RECORD,
repuesta RECORD
num_emp INT,
cedula,
nombre,
id_pregunta,pregunta,repuesta,departamento STRING
END RECORD,
mensajes RECORD
cod_msg INT,
descripcion STRING
END RECORD
END RECORD
-- arma el record que va a ir a "data"
LET p.credenciales.usuario="conecta"
LET p.credenciales.clave="conecta"
LET p.repuesta.num_emp="3355"
LET p.repuesta.cedula="00104581939"
LET p.repuesta.nombre="JUAN FRANCISCO SOTO CONCEPCION"
LET p.repuesta.id_pregunta="ENC001"
LET p.repuesta.pregunta="CUAN SATISFECHO USTED SE SIENTE CON EL NIVEL DE SERVICIO DE SU SUPLIDOR INTERNO?"
LET p.repuesta.departamento="TECNOLOGIA"
LET p.repuesta.repuesta="1"
LET p.mensajes.cod_msg=0
-- arma el record del request
LET r_cmd.oper="respuesta"
LET r_cmd.data=util.JSON.stringify(p)
CALL util.JSON.stringify(r_cmd) RETURNING jstr
RETURN jstr
END FUNCTION
@@ -0,0 +1,389 @@
# WARNING: Locale must be UTF-8!
IMPORT util
IMPORT com
IMPORT os
TYPE t_sync_cmd RECORD
oper STRING,
data STRING
END RECORD
DEFINE r_cmd t_sync_cmd -- el comando recibido por el server
DEFINE start_time DATETIME YEAR TO SECOND
DEFINE logs DYNAMIC ARRAY OF STRING
DEFINE last_request, last_response STRING
DEFINE last_date DATETIME YEAR TO SECOND,
pcodn CHAR(4)
CONSTANT dpy_verb=TRUE -- send messages to standard output
CONSTANT log_verb=TRUE -- send messages to the errorlog
MAIN
DEFINE tout, n, x INTEGER
DEFINE d0 DATETIME YEAR TO SECOND
DEFINE url, msg STRING
DEFINE method, version, headers STRING
DEFINE req com.HTTPServiceRequest
CALL startlog("err_sync_server.log")
CALL check_utf8() RETURNING x, msg
IF x != 0 THEN
DISPLAY "ERROR: ", msg
EXIT PROGRAM 1
END IF
CALL show_verb("Starting dbsync server: ...")
-- Normally, the port is set by the GAS for load balancing
-- For standalone tests you can set FGLAPPSERVER environment variable
CALL show_verb("Listening on port : "|| NVL(fgl_getenv("FGLAPPSERVER"),"GAS"))
CALL com.WebServiceEngine.Start()
LET start_time = CURRENT
--LET tout=-1 -- timeout: infinite wait
--LET tout=5 -- timeout: 5 seconds
LET tout=-1 -- timeout: 10 seconds
IF tout=-1 THEN
LET msg="The dbsync server is listening (timeout = infinite wait)."
ELSE
LET msg="The dbsync server is listening (timeout =",tout USING "-<<<<<<&"," seconds)."
END IF
CALL show_verb(msg)
LET n=0
# WHENEVER ERROR CONTINUE
WHILE TRUE
IF int_flag<>0 THEN
LET int_flag=0
EXIT WHILE
END IF
LET req = com.WebServiceEngine.getHTTPServiceRequest(tout)
IF req IS NULL THEN -- timeout
CALL show_verb( SFMT("HTTP request timeout...: %1", CURRENT YEAR TO FRACTION))
CONTINUE WHILE
END IF
LET url = req.getURL()
LET method = req.getMethod()
DISPLAY "url ",url
DISPLAY "metodo ", method
IF method != 'OPTIONS' THEN
IF method IS NULL OR method != "POST" THEN
IF method == "GET" THEN
-- TODO: Send server status page back
CALL req.sendTextResponse(200,NULL,"Welcome to dbsync server for MBS ...")
ELSE
CALL show_err(SFMT("Unexpected HTTP request: %1", method))
CALL req.sendTextResponse(400,NULL,"Only POST requests supported")
END IF
CONTINUE WHILE
END IF
END IF
IF method = 'OPTIONS' THEN
CALL req.sendTextResponse(200,NULL,"Welcome")
END IF
LET version = req.getRequestVersion()
IF version IS NULL OR version != "1.1" THEN
CALL show_err(SFMT("Unexpected HTTP request version: %1", version))
CONTINUE WHILE
END IF
LET headers = req.getRequestHeader("DBSync-Client")
DISPLAY "header: DBSync-Clent=> ",headers
IF headers IS NULL OR headers!= "mbs" THEN
CALL show_err(SFMT("Unexpected HTTP request header DBSync-Client: %1", headers))
DISPLAY "HEADER: ",headers
CALL req.sendTextResponse(400,NULL,"Bad request in Header DBSync-Client")
CONTINUE WHILE
END IF
LET headers = req.getRequestHeader("Content-Type")
DISPLAY "content: ",headers
IF headers IS NULL OR headers NOT MATCHES "dbsync/json*" THEN -- ;Charset=UTF-8
CALL show_err(SFMT("Unexpected HTTP request header Content-Type: %1", headers))
CALL req.sendTextResponse(400,NULL,"Bad request, in Header Content-Type")
CONTINUE WHILE
END IF
IF NOT(read_request(req)) THEN
-- si el procesamiento del request da error vuelve al loop
CONTINUE WHILE
END IF
LET n = n + 1
LET d0 = CURRENT
CALL show_verb( SFMT("oper [%1]: %2", d0, r_cmd.oper) )
--CALL show_verb( SFMT("data: %1", r_cmd.data) )
DISPLAY "opera ",r_cmd.oper
CASE r_cmd.oper
WHEN "get_status"
CALL send_response(req, "SERVER OK")
WHEN "info"
CALL send_response(req, info())
WHEN "show_logs"
CALL send_response(req, show_logs())
WHEN "last_request"
CALL send_response(req, last_request())
WHEN "respuesta"
LET last_request = r_cmd.data
LET last_date = CURRENT
CALL send_response(req, last_response:=respuestas(last_request))
OTHERWISE
LET msg="invalid operation: " || NVL(r_cmd.oper," ")
CALL show_err(msg)
CALL req.sendTextResponse(404,NULL,msg)
CONTINUE WHILE
END CASE
LET logs[logs.getLength()+1] = "n:",n USING "<<<<", " ", d0, ' "', r_cmd.oper ,'" '
END WHILE
END MAIN
FUNCTION read_request(req)
DEFINE req com.HTTPServiceRequest
DEFINE cmd STRING,
p RECORD
oper STRING,
data RECORD
usuario STRING,
clave STRING,
codigo STRING
END RECORD
END RECORD
INITIALIZE r_cmd.* TO NULL
# DISPLAY "request text: ",req.readTextRequest()
TRY
CALL req.readTextRequest() RETURNING cmd
CATCH
CALL show_err(SFMT("Unexpected HTTP request read exception: %1", STATUS))
RETURN FALSE
END TRY
#LET cmd='{"oper":"rnc","data":{"usuario":"crm_user","clave":"XMarmotech2019","tipo_Documento":1,"rnc":"130337391"}}'
IF LENGTH(cmd) == 0 THEN
-- la operacion va a estar vacia y va dar error por invalida
RETURN TRUE
END IF
TRY
CALL util.JSON.parse(cmd, r_cmd)
CATCH
CALL show_err(SFMT("JSON parse error: %1", STATUS))
RETURN FALSE
END TRY
RETURN TRUE
END FUNCTION
FUNCTION send_response(req,res)
DEFINE req com.HTTPServiceRequest
DEFINE res STRING
# DISPLAY "response ",res
IF res.getLength() > 50 THEN
CALL show_verb( SFMT("Response [%1] -> Length: %2", CURRENT YEAR TO SECOND, LENGTH(res)) )
ELSE
CALL show_verb( SFMT("Response [%1] -> %2.", CURRENT YEAR TO SECOND, res.trim()) )
END IF
CALL req.setResponseCharset("UTF-8")
CALL req.setResponseHeader("dbsync-server","result")
CALL req.setResponseHeader("Content-Type","dbsync/json")
CALL req.sendTextResponse(200,NULL,res)
END FUNCTION
FUNCTION check_utf8()
IF ORD("€") == 8364 AND LENGTH("€") == 1 THEN
RETURN 0, NULL
ELSE
RETURN -1, "Application locale must be UTF-8, with char length semantics"
END IF
END FUNCTION
FUNCTION show_verb(msg)
DEFINE msg STRING
IF dpy_verb THEN
DISPLAY msg
END IF
# IF log_verb THEN
# CALL errorlog(msg CLIPPED)
# END IF
END FUNCTION
FUNCTION show_err(msg)
DEFINE msg STRING
DISPLAY "ERROR:",msg
# CALL errorlog(msg CLIPPED)
END FUNCTION
FUNCTION info()
DEFINE b base.StringBuffer
LET b = base.StringBuffer.create()
CALL b.append("<html><body>")
CALL b.append("<a href='/'>[top]<a href=logs>[logs]</a><a href=last_request>[last request]</a>")
CALL b.append("<h1>Servidor de sincronizacion para dispositivos moviles</h1>")
CALL b.append("local time: " || CURRENT YEAR TO SECOND || "<br>")
CALL b.append("uptime: "|| CURRENT YEAR TO SECOND - start_time || "<br>")
CALL b.append("<a href=logs>Logs</a><br>")
CALL b.append("<a href=last_request>Last request</a><br>")
CALL b.append("</body></html>")
RETURN b.toString()
END FUNCTION
FUNCTION show_logs()
DEFINE b base.StringBuffer
DEFINE i INT
LET b = base.StringBuffer.create()
CALL b.append("<html><body>")
CALL b.append("<a href='/'>[top]<a href=logs>[logs]</a><a href=last_request>[last request]</a>")
CALL b.append("<h1>JSON Sync: Logs</h1>")
FOR i = 1 TO logs.getLength()
CALL b.append(logs[i])
CALL b.append("<br>")
END FOR
CALL b.append("</body></html>")
RETURN b.toString()
END FUNCTION
FUNCTION last_request()
DEFINE b base.StringBuffer
LET b = base.StringBuffer.create()
CALL b.append("<html><body>")
CALL b.append("<a href='/'>[top]<a href=logs>[logs]</a><a href=last_request>[last request]</a>")
CALL b.append("<h1>JSON Sync: Last Request</h1>")
CALL b.append("Date:" || last_date)
CALL b.append("<h2>Request:</h2>")
IF last_request IS NOT NULL THEN
CALL b.append("<pre>")
CALL b.append(util.JSON.format(last_request))
CALL b.append("</pre>")
END IF
CALL b.append("<h2>Response:</h2>")
IF last_response IS NOT NULL THEN
CALL b.append("<pre>")
CALL b.append(util.JSON.format(last_response))
CALL b.append("</pre>")
END IF
CALL b.append("</body></html>")
RETURN b.toString()
END FUNCTION
{FUNCTION usuarios()
DEFINE pusuarios DYNAMIC ARRAY OF RECORD
usuarios VARCHAR(50),
password VARCHAR(50),
ocupacion VARCHAR(100),
sec_vend INT,
nombre VARCHAR(30),
email VARCHAR(50)
END RECORD
DEFINE pusuario RECORD
usuarios VARCHAR(50),
password VARCHAR(50),
ocupacion VARCHAR(100),
sec_vend INT,
nombre VARCHAR(30),
email VARCHAR(50)
END RECORD,
i SMALLINT,
selec STRING
LET selec ="SELECT a.email,' ',a.ocupacion,a.sec_vend,a.nombre,a.email
FROM CRMindata.dbo.vendedores a"
PREPARE comando FROM selec
DECLARE u1 CURSOR FOR comando
LET i=0 FOREACH u1 INTO pusuario.* LET i=i+1 LET pusuarios[i].*=pusuario.*
DISPLAY "SUBIENDO USUARIOS...."
END FOREACH; FREE u1
RETURN util.JSON.stringify(pusuarios)
END FUNCTION
}
{
FUNCTION geolocalizacion(s)
DEFINE s STRING
DEFINE file_out RECORD
contenido STRING,
nomb_arch STRING,
lat FLOAT,
long FLOAT,
i BYTE,
file_ext STRING
END RECORD
DEFINE file_out_mov RECORD
contenido STRING,
nomb_arch STRING,
lat FLOAT,
long FLOAT,
i BYTE,
file_ext STRING
END RECORD,
s_out STRING,
archivo STRING,
borrar INT
DEFINE r RECORD
ERROR STRING
END RECORD
LOCATE file_out.i IN MEMORY
TRY
CALL util.JSON.parse(s, file_out)
CATCH
LET r.error = "FGL ERROR: ", err_get(status)
RETURN util.JSON.stringify(r)
END TRY
IF os.Path.exists(file_out.nomb_arch) THEN
CALL os.Path.delete(file_out.nomb_arch) RETURNING borrar
END IF
CALL file_out.i.writeFile(file_out.nomb_arch)
FREE file_out.i
IF os.Path.size(file_out.nomb_arch)>0 THEN
CALL get_exif_latlong_bdl(file_out.nomb_arch) RETURNING file_out_mov.lat,file_out_mov.long
DISPLAY "latitudes ", file_out_mov.lat," LONG ",file_out_mov.long
ELSE
LET file_out_mov.contenido="NO PUEDO GEOLOCALIZAR ESTA FOTO"
END IF
LET s_out = UTIL.JSON.stringify(file_out_mov)
RETURN s_out
END FUNCTION
}
@@ -0,0 +1,22 @@
# Prueba del endpoint datos_cocinas del APIREST (restServer)
# Uso: .\probar_datosCocina.ps1 [fechaCorte] (ej: .\probar_datosCocina.ps1 2026-07-01)
param(
[string]$fechaCorte = "2026-07-01",
[string]$usuario = "conecta",
[string]$clave = "conecta"
)
$url = "https://ws.marmotech.com.do/gas/ws/r/restserver"
# 'data' es un STRING JSON escapado (el server hace util.JSON.parse sobre ese string)
$dataInner = ('{{"usuario":"{0}","clave":"{1}","fechaCorte":"{2}"}}' -f $usuario, $clave, $fechaCorte)
$body = @{ oper = "datos_cocinas"; data = $dataInner } | ConvertTo-Json -Compress
Write-Host "POST $url" -ForegroundColor Cyan
Write-Host "Body: $body" -ForegroundColor DarkGray
$resp = Invoke-RestMethod -Uri $url -Method Post -ContentType "dbsync/json" `
-Headers @{ "DBSync-Client" = "mbs" } -Body $body
$resp | Format-List
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<APPLICATION Parent="defaultgwc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.4js.com/ns/gas/3.20/cfextwa.xsd">
<EXECUTION>
<PATH>$(res.deployment.path)</PATH>
<MODULE>Application.42r</MODULE>
</EXECUTION>
</APPLICATION>
+63
View File
@@ -0,0 +1,63 @@
IMPORT util
IMPORT os
IMPORT security
DEFINE j INT,
url_folder STRING,
tmpfile STRING
FUNCTION respuestas(pdata)
DEFINE pdata STRING,
foto_empleado BYTE
DEFINE p RECORD
credenciales RECORD
usuario,clave VARCHAR(50)
END RECORD,
repuesta RECORD
num_emp INT,
cedula,
nombre,
id_pregunta,pregunta,repuesta,departamento string
END RECORD,
mensajes RECORD
cod_msg INT,
descripcion STRING
END RECORD
END RECORD,
selec STRING,
url_files STRING
CALL util.JSON.parse(pdata,p)
IF STATUS < 0 THEN
LET p.mensajes.cod_msg=STATUS
LET p.mensajes.descripcion = 'ERROR EN CONEXION ',SQLCA.sqlerrm
RETURN util.JSON.stringify(p)
END IF
DISPLAY "<RESPUESTA:>USUARIO: ",p.credenciales.usuario," pass ",p.credenciales.clave
CONNECT TO "smarmotech" USER p.credenciales.usuario USING p.credenciales.clave
IF STATUS < 0 THEN
LET p.mensajes.cod_msg=STATUS
LET p.mensajes.descripcion = 'ERROR EN CONEXION ',SQLCA.sqlerrm
DISCONNECT CURRENT
RETURN util.JSON.stringify(p)
END IF
LET selec =
"INSERT INTO encuestas.dbo.respuestas( cedula,created_at,nombre,num_emp,departamento,respuesta,pregunta,
id_pregunta )
VALUES ( ?,GETDATE(),?,?,?,?,?,? ) "
PREPARE comando FROM selec
EXECUTE comando USING p.repuesta.cedula,p.repuesta.nombre,p.repuesta.num_emp,p.repuesta.departamento,
p.repuesta.repuesta,p.repuesta.pregunta,p.repuesta.id_pregunta
DISCONNECT CURRENT
LET p.mensajes.cod_msg=200
LET p.mensajes.descripcion = 'ADICION EXITOSA'
RETURN util.JSON.stringify(p)
END FUNCTION
@@ -0,0 +1,148 @@
IMPORT util
IMPORT com
IMPORT os
IMPORT security
TYPE t_sync_cmd RECORD
oper STRING,
data STRING
END RECORD
MAIN
DEFINE k,kurl,kbodega STRING,
ktrue BOOLEAN
DEFINE ku RECORD
usuario VARCHAR(50),
clave VARCHAR(20),
sesion VARCHAR(10)
END RECORD
LET ku.usuario = 'conecta'
LET ku.clave = 'conecta'
# LET kurl = "https://ws.marmotech.com.do/gas/ws/r/restserver"
# LET kurl = "http://10.0.0.6:8098/gas/ws/r/restserver"
LET kurl = "http://192.168.40.9/gas/ws/r/restserver"
CALL respuestatest(kurl)
LET ku.usuario = 'conecta'
LET ku.clave = 'conecta'
END MAIN
FUNCTION respuestatest(xurl)
DEFINE xurl STRING
DEFINE p RECORD
credenciales RECORD
usuario,clave VARCHAR(50)
END RECORD,
repuesta RECORD
num_emp INT,
cedula,
nombre,
id_pregunta,pregunta,repuesta,departamento string
END RECORD,
mensajes RECORD
cod_msg INT,
descripcion STRING
END RECORD
END RECORD,
r_cmd t_sync_cmd
DEFINE cmd, res, msg,url STRING,
ret INT
DEFINE r RECORD
perror STRING,
pbodega SMALLINT
END RECORD
DEFINE data RECORD
usuario,clave VARCHAR(50)
END RECORD
LET p.credenciales.usuario = 'conecta'
LET p.credenciales.clave = 'conecta'
LET p.repuesta.cedula = '00104581939'
LET p.repuesta.departamento='TECNOLOGIA'
LET p.repuesta.id_pregunta = 'ENC001'
LET p.repuesta.nombre='JUAN FRANCISCO SOTO CONCEPCION'
LET p.repuesta.num_emp=3355
LET p.repuesta.pregunta='CUAN SATISFECHO USTED SE SIENTE CON EL NIVEL DE SERVICIO DE SU SUPLIDOR INTERNO?'
LET p.repuesta.repuesta='1'
DISPLAY " URL ",xurl
LET r_cmd.oper = "respuesta"
LET r_cmd.data = util.JSON.stringify(p) -- aca se convierte a string los datos de la operacion
LET cmd = util.JSON.stringify(r_cmd)
CALL sync_send_command(xurl, cmd) RETURNING ret, res
DISPLAY "cmd", cmd,"ret ",ret," RES: ",RES
IF ret == 0 THEN
CALL util.JSON.parse(res,P)
ELSE
LET msg=SFMT(%"Connection '%1' failed",r_cmd.oper),"\n",url
CALL show_sync_err(msg)
END IF
END FUNCTION
#
## Communications library using com (http or https)
#
FUNCTION sync_send_command(url, cmd)
DEFINE url, cmd STRING
DEFINE result, tmp STRING
DEFINE http_req com.HTTPRequest
DEFINE http_resp com.HTTPResponse
TRY LET http_req = com.HTTPRequest.Create(url)
CALL http_req.setConnectionTimeout(40)
CALL http_req.setTimeout(40)
CALL http_req.setMethod("POST")
CALL http_req.setCharset("UTF-8")
CALL http_req.setHeader("DBSync-Client","mbs")
CALL http_req.setHeader("Content-Type","dbsync/json")
CALL http_req.doTextRequest(cmd)
LET http_resp=http_req.getResponse()
IF http_resp.getStatusCode() != 200 THEN
RETURN http_resp.getStatusCode(), http_resp.getStatusDescription()
END IF
LET tmp = http_resp.getStatusDescription()
IF (tmp == "OK" || tmp == "no error" ) THEN
RETURN -1, SFMT("HTTP request status description: %1 ",tmp)
END IF
LET result = http_resp.getTextResponse()
CATCH
RETURN -2, SFMT("HTTP request error: STATUS=%1 (%2)",STATUS,SQLCA.SQLERRM)
END TRY
RETURN 0, result
END FUNCTION
FUNCTION show_sync_err(msg)
DEFINE msg STRING
CALL fgl_winmessage(%"ERROR", msg, "exclamation")
END FUNCTION
FUNCTION b64_to_file(str_b64,f_sal)
DEFINE f_sal,str_b64,str_aux STRING
TRY
CALL security.Base64.SaveBinary(f_sal,str_b64)
CATCH
DISPLAY " data ",str_b64
LET str_aux="Unable to convert Base64 String to file :",STATUS
CALL fgl_winmessage("Error",str_aux,"stop")
END TRY
END FUNCTION
+82
View File
@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Project defaultApplication="447037195" gstVersion="31408" version="3.3">
<Settings>
<DynamicProperties version="2">
<DynamicProperty description="Accent color (Android 5.0 and later)" initialValue="#9575CD" isDefaultInherited="false" isHidden="false" label="Accent color" name="gma-accent-color" readOnly="false" type="COLOR"/>
<DynamicProperty description="Action bar text color (Android 5.0 and later)" initialValue="#EBEBEB" isDefaultInherited="false" isHidden="false" label="Action bar text color" name="gma-actionbar-color" readOnly="false" type="COLOR"/>
<DynamicProperty description="Cordova plugins" editorInfo="isDynamic:true;title:Cordova;description:Cordova plugins;icon:checkbox_checked" initialValue="" isDefaultInherited="false" isHidden="false" label="Cordova Plugins" name="gma-cordova" readOnly="false" type="MULTIPLEBOOLEAN"/>
<DynamicProperty description="Navigation bar background color (Android 5.0 and later)" initialValue="#5E35B1" isDefaultInherited="false" isHidden="false" label="Navigation bar background color" name="gma-navigationBarBackground-color" readOnly="false" type="COLOR"/>
<DynamicProperty description="Primary color (Android 5.0 and later)" initialValue="#5E35B1" isDefaultInherited="false" isHidden="false" label="Primary color" name="gma-primary-color" readOnly="false" type="COLOR"/>
<DynamicProperty description="Primary dark color (Android 5.0 and later)" initialValue="#5E35B1" isDefaultInherited="false" isHidden="false" label="Primary dark color" name="gma-primary-dark-color" readOnly="false" type="COLOR"/>
<DynamicProperty description="Primary text color (Android 5.0 and later)" initialValue="#000000" isDefaultInherited="false" isHidden="false" label="Primary text color" name="gma-primaryText-color" readOnly="false" type="COLOR"/>
<DynamicProperty description="Window backround color (Android 5.0 and later)" initialValue="#ffffff" isDefaultInherited="false" isHidden="false" label="Window background color" name="gma-windowBackground-color" readOnly="false" type="COLOR"/>
<DynamicProperty description="Cordova plugins" editorInfo="isDynamic:true;title:Cordova;description:Cordova plugins;icon:checkbox_checked" initialValue="" isDefaultInherited="false" isHidden="false" label="Cordova Plugins" name="gmi-cordova" readOnly="false" type="MULTIPLEBOOLEAN"/>
<DynamicProperty description="High-DPI Icon (72x72 px) path" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon-hdpi (72x72 px)" name="icon-hdpi" readOnly="false" type="FILE"/>
<DynamicProperty description="Low-DPI Icon (36x36 px) path" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon-ldpi (36x36 px)" name="icon-ldpi" readOnly="false" type="FILE"/>
<DynamicProperty description="Medium-DPI Icon (48x48 px) path" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon-mdpi (48x48 px)" name="icon-mdpi" readOnly="false" type="FILE"/>
<DynamicProperty description="Extra High-DPI Icon (96x96 px) path" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon-xhdpi (96x96 px)" name="icon-xhdpi" readOnly="false" type="FILE"/>
<DynamicProperty description="Extra Extra High-DPI Icon (144x144 px) path" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon-xxhdpi (144x144 px)" name="icon-xxhdpi" readOnly="false" type="FILE"/>
<DynamicProperty description="1024x1024 pixel icon (used for App Store)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (1024x1024 px)" name="icon1024x1024" readOnly="false" type="FILE"/>
<DynamicProperty description="120x120 pixel icon (used for home screen)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (120x120 px)" name="icon120x120" readOnly="false" type="FILE"/>
<DynamicProperty description="152x152 pixel icon (used for home screen)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (152x152 px)" name="icon152x152" readOnly="false" type="FILE"/>
<DynamicProperty description="167x167 pixel icon (used for home screen)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (167x167 px)" name="icon167x167" readOnly="false" type="FILE"/>
<DynamicProperty description="180x180 pixel icon (used for home screen)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (180x180 px)" name="icon180x180" readOnly="false" type="FILE"/>
<DynamicProperty description="29x29 pixel icon (used for settings)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (29x29 px)" name="icon29x29" readOnly="false" type="FILE"/>
<DynamicProperty description="40x40 pixel icon (used for settings)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (40x40 px)" name="icon40x40" readOnly="false" type="FILE"/>
<DynamicProperty description="58x58 pixel icon (used for settings)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (58x58 px)" name="icon58x58" readOnly="false" type="FILE"/>
<DynamicProperty description="60x60 pixel icon (used for settings)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (60x60 px)" name="icon60x60" readOnly="false" type="FILE"/>
<DynamicProperty description="76x76 pixel icon (used for home screen)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (76x76 px)" name="icon76x76" readOnly="false" type="FILE"/>
<DynamicProperty description="80x80 pixel icon (used for home screen)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (80x80 px)" name="icon80x80" readOnly="false" type="FILE"/>
<DynamicProperty description="87x87 pixel icon (used for home screen)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Icon (87x87 px)" name="icon87x87" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPhone 5/5S/SE (portrait)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (640x1136 px)" name="launchScreen" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPad (landcape)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (1024x768 px)" name="launchScreen1024x768" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPhone X (portrait)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (1125x2436 px)" name="launchScreen1125x2436" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPhone 5/5S/SE (landscape)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (1136x640 px)" name="launchScreen1136x640" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPhone 6+/6s+/7+/8+ (portrait)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (1242x2208 px)" name="launchScreen1242x2208" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPhone 6/6s/7/8 (landscape)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (1334x750 px)" name="launchScreen1334x750" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPad (portrait)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (1536x2048 px)" name="launchScreen1536x2048" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for 10.5&quot; iPad Pro (portrait)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (1668x2224 px)" name="launchScreen1668x2224" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPad (landscape)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (2048x1536 px)" name="launchScreen2048x1536" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for 12.9&quot; iPad Pro (portrait)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (2048x2732 px)" name="launchScreen2048x2732" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPhone 6+/6s+/7+/8+ (landscape)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (2208x1242 px)" name="launchScreen2208x1242" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for 10.5&quot; iPad Pro (landscape)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (2224x1668 px)" name="launchScreen2224x1668" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPhone X (landscape)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (2436x1125 px)" name="launchScreen2436x1125" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for 12.9&quot; iPad Pro (landscape)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (2732x2048 px)" name="launchScreen2732x2048" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPhone 6/6s/7/8 (portrait)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (750x1334 px)" name="launchScreen750x1334" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen for iPad (portrait)" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (768x1024 px)" name="launchScreen768x1024" readOnly="false" type="FILE"/>
<DynamicProperty description="Launch screen Storyboard file (Created from Xcode)" editorInfo="filters:*.storyboard *.xib;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Launch Screen (Storyboard file)" name="launchScreenXib" readOnly="false" type="FILE"/>
<DynamicProperty description="Package identifier" initialValue="" isDefaultInherited="false" isHidden="false" label="ID" name="packageId" readOnly="false" type="TEXT"/>
<DynamicProperty description="Label of the package" initialValue="" isDefaultInherited="false" isHidden="false" label="Label" name="packageLabel" readOnly="false" type="TEXT"/>
<DynamicProperty description="Version of the package" initialValue="1" isDefaultInherited="false" isHidden="false" label="Version" name="packageVersion" readOnly="false" type="TEXT"/>
<DynamicProperty description="Version of the package displayed to the user" initialValue="1" isDefaultInherited="false" isHidden="false" label="VersionName" name="packageVersionName" readOnly="false" type="TEXT"/>
<DynamicProperty editorInfo="title:Permissions;description:Android permissions;icon:checkbox_checked;contains:ACCEPT_HANDOVER|ACCESS_CHECKIN_PROPERTIES|ACCESS_COARSE_LOCATION|ACCESS_FINE_LOCATION|ACCESS_LOCATION_EXTRA_COMMANDS|ACCESS_NETWORK_STATE|ACCESS_NOTIFICATION_POLICY|ACCESS_WIFI_STATE|ACCOUNT_MANAGER|ADD_VOICEMAIL|ANSWER_PHONE_CALLS|BATTERY_STATS|BIND_ACCESSIBILITY_SERVICE|BIND_APPWIDGET|BIND_AUTOFILL_SERVICE|BIND_CARRIER_MESSAGING_SERVICE|BIND_CARRIER_SERVICES|BIND_CHOOSER_TARGET_SERVICE|BIND_CONDITION_PROVIDER_SERVICE|BIND_DEVICE_ADMIN|BIND_DREAM_SERVICE|BIND_INCALL_SERVICE|BIND_INPUT_METHOD|BIND_MIDI_DEVICE_SERVICE|BIND_NFC_SERVICE|BIND_NOTIFICATION_LISTENER_SERVICE|BIND_QUICK_SETTINGS_TILE|BIND_PRINT_SERVICE|BIND_REMOTEVIEWS|BIND_SLICE|BIND_SCREENING_SERVICE|BIND_TELECOM_CONNECTION_SERVICE|BIND_TEXT_SERVICE|BIND_TV_INPUT|BIND_VISUAL_VOICEMAIL_SERVICE|BIND_VOICE_INTERACTION|BIND_VPN_SERVICE|BIND_VR_LISTENER_SERVICE|BIND_WALLPAPER|BLUETOOTH|BLUETOOTH_ADMIN|BLUETOOTH_PRIVILEGED|BODY_SENSORS|BROADCAST_PACKAGE_REMOVED|BROADCAST_SMS|BROADCAST_STICKY|BROADCAST_WAP_PUSH|C2DM_RECEIVE|C2D_MESSAGE|CALL_PHONE|CALL_PRIVILEGED|CAMERA|CAPTURE_AUDIO_OUTPUT|CAPTURE_SECURE_VIDEO_OUTPUT|CAPTURE_VIDEO_OUTPUT|CHANGE_COMPONENT_ENABLED_STATE|CHANGE_CONFIGURATION|CHANGE_NETWORK_STATE|CHANGE_WIFI_MULTICAST_STATE|CHANGE_WIFI_STATE|CLEAR_APP_CACHE|CONTROL_LOCATION_UPDATES|DELETE_CACHE_FILES|DELETE_PACKAGES|DIAGNOSTIC|DISABLE_KEYGUARD|DUMP|EXPAND_STATUS_BAR|FACTORY_TEST|GET_ACCOUNTS|GET_ACCOUNTS_PRIVILEGED|GET_PACKAGE_SIZE|GET_TASKS|GLOBAL_SEARCH|INSTALL_LOCATION_PROVIDER|INSTALL_PACKAGES|INSTALL_SHORTCUT|INSTANT_APP_FOREGROUND_SERVICE|INTERNET|KILL_BACKGROUND_PROCESSES|LOCATION_HARDWARE|MANAGE_DOCUMENTS|MANAGE_OWN_CALLS|MASTER_CLEAR|MEDIA_CONTENT_CONTROL|MODIFY_AUDIO_SETTINGS|MODIFY_PHONE_STATE|MOUNT_FORMAT_FILESYSTEMS|MOUNT_UNMOUNT_FILESYSTEMS|NFC|NFC_TRANSACTION_EVENT|PACKAGE_USAGE_STATS|PERSISTENT_ACTIVITY|PROCESS_OUTGOING_CALLS|READ_CALENDAR|READ_CALL_LOG|READ_CONTACTS|READ_EXTERNAL_STORAGE|READ_FRAME_BUFFER|READ_INPUT_STATE|READ_LOGS|READ_PHONE_NUMBER|READ_PHONE_NUMBERS|READ_PHONE_STATE|READ_SMS|READ_SYNC_SETTINGS|READ_SYNC_STATS|READ_VOICEMAIL|REBOOT|RECEIVE_BOOT_COMPLETED|RECEIVE_MMS|RECEIVE_SMS|RECEIVE_WAP_PUSH|RECORD_AUDIO|REORDER_TASKS|REQUEST_COMPANION_RUN_IN_BACKGROUND|REQUEST_COMPANION_USE_DATA_IN_BACKGROUND|REQUEST_DELETE_PACKAGES|REQUEST_IGNORE_BATTERY_OPTIMIZATIONS|REQUEST_INSTALL_PACKAGES|RESTART_PACKAGES|SEND_RESPOND_VIA_MESSAGE|SEND_SMS|SET_ALARM|SET_ALWAYS_FINISH|SET_ANIMATION_SCALE|SET_DEBUG_APP|SET_PREFERRED_APPLICATIONS|SET_PROCESS_LIMIT|SET_TIME|SET_TIME_ZONE|SET_WALLPAPER|SET_WALLPAPER_HINTS|SIGNAL_PERSISTENT_PROCESSES|STATUS_BAR|SYSTEM_ALERT_WINDOW|TRANSMIT_IR|UNINSTALL_SHORTCUT|UPDATE_DEVICE_STATS|USE_FINGERPRINT|USE_SIP|VIBRATE|WAKE_LOCK|WRITE_APN_SETTINGS|WRITE_CALENDAR|WRITE_CALL_LOG|WRITE_CONTACTS|WRITE_EXTERNAL_STORAGE|WRITE_GSERVICES|WRITE_SECURE_SETTINGS|WRITE_SETTINGS|WRITE_SYNC_SETTINGS|WRITE_VOICEMAIL" initialValue="ACCESS_NETWORK_STATE||ACCESS_WIFI_STATE||CHANGE_NETWORK_STATE||INSTALL_SHORTCUT||INTERNET||MOUNT_FORMAT_FILESYSTEMS||READ_LOGS" isDefaultInherited="false" isHidden="false" label="Permissions" name="permissions" readOnly="false" type="MULTIPLEBOOLEAN"/>
<DynamicProperty description="Requirements" editorInfo="title:Requirements;description:iOS Requirements;icon:checkbox_checked;contains:accelerometer|auto-focus-camera|armv6|armv7|bluetooth-le|camera-flash|front-facing-camera|gamekit|gps|gyroscope|healthkit|magnetometer|metal|microphone|location-services|opengles-1|opengles-2|opengles-3|peer-peer|sms|still-camera|telephony|video-camera|wifi" initialValue="wifi" isDefaultInherited="false" isHidden="true" label="Requirements" name="required" readOnly="false" type="MULTIPLEBOOLEAN"/>
<DynamicProperty description="High-DPI Status Icon (36x36 px) path" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Status Icon-hdpi (36x36 px)" name="status-icon-hdpi" readOnly="false" type="FILE"/>
<DynamicProperty description="Medium-DPI Status Icon (24x24 px) path" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Status Icon-mdpi (24x24 px)" name="status-icon-mdpi" readOnly="false" type="FILE"/>
<DynamicProperty description="Extra High-DPI Status Icon (48x48 px) path" editorInfo="filters:*.png;openDirDialog:true;replaceDocPath:$(ProjectDir)" initialValue="" isDefaultInherited="false" isHidden="false" label="Status Icon-xhdpi (48x48 px)" name="status-icon-xhdpi" readOnly="false" type="FILE"/>
<DynamicPropertyGroup collapsed="false" description="Android" label="Android" name="AndroidGroup" properties="packageVersionName;gma-primary-color;gma-primary-dark-color;gma-accent-color;gma-actionbar-color;gma-primaryText-color;gma-windowBackground-color;gma-navigationBarBackground-color;icon-ldpi;icon-mdpi;icon-hdpi;icon-xhdpi;icon-xxhdpi;status-icon-mdpi;status-icon-hdpi;status-icon-xhdpi;permissions;gma-cordova"/>
<DynamicPropertyGroup collapsed="false" description="Package" label="Package" name="PackageGroup" properties="packageId;packageLabel;packageVersion"/>
<DynamicPropertyGroup collapsed="false" description="iOS" label="iOS" name="iOSGroup" properties="launchScreen;launchScreen1136x640;launchScreen750x1334;launchScreen1334x750;launchScreen1242x2208;launchScreen2208x1242;launchScreen1125x2436;launchScreen2436x1125;launchScreen768x1024;launchScreen1024x768;launchScreen1536x2048;launchScreen2048x1536;launchScreen2224x1668;launchScreen1668x2224;launchScreen2048x2732;launchScreen2732x2048;launchScreenXib;icon29x29;icon40x40;icon58x58;icon60x60;icon76x76;icon80x80;icon87x87;icon120x120;icon152x152;icon167x167;icon180x180;icon1024x1024;required;gmi-cordova"/>
</DynamicProperties>
<NodeInfos version="1">
<NodeInfo mimeType="pm/package" properties="packageId;packageLabel;packageVersion;packageVersionName;launchScreen;launchScreen1136x640;launchScreen750x1334;launchScreen1334x750;launchScreen1242x2208;launchScreen2208x1242;launchScreen1125x2436;launchScreen2436x1125;launchScreen768x1024;launchScreen1024x768;launchScreen1536x2048;launchScreen2048x1536;launchScreen2224x1668;launchScreen1668x2224;launchScreen2048x2732;launchScreen2732x2048;launchScreenXib;icon29x29;icon40x40;icon58x58;icon60x60;icon76x76;icon80x80;icon87x87;icon120x120;icon152x152;icon167x167;icon180x180;icon1024x1024;gma-primary-color;gma-primary-dark-color;gma-accent-color;gma-actionbar-color;gma-primaryText-color;gma-windowBackground-color;gma-navigationBarBackground-color;icon-ldpi;icon-mdpi;icon-hdpi;icon-xhdpi;icon-xxhdpi;status-icon-mdpi;status-icon-hdpi;status-icon-xhdpi;permissions;required;gma-cordova;gmi-cordova"/>
</NodeInfos>
</Settings>
<LanguageList version="1.0"/>
<PlatformList version="1.0"/>
<Group environment="dirlist:DBPATH=$(ProjectDir)/database;$(DBPATH),dirlist:FGLIMAGEPATH=$(ProjectDir)/images;$(FGLDIR)/lib/image2font.txt;$(ProjectDir);$(FGLIMAGEPATH)" id="20809256" label="Project" language="Genero">
<Library binaryName="Config" id="118222984" label="Config"/>
<Application binaryName="restserver" dependencies="159917928,212784684,455109296" id="400358049" label="restserver">
<File filePath="mbs_sync_server_com.4gl"/>
<File filePath="respuestas.4gl"/>
</Application>
<Group id="12325585" label="TEST">
<Application binaryName="otrotest" id="640105168" label="otrotest">
<File filePath="json_test.4gl"/>
</Application>
<Application binaryName="testrespuesta" id="447037195" label="testrespuesta">
<File filePath="tests/respuestatest.4gl"/>
</Application>
</Group>
</Group>
</Project>