@24u/fmrestor 中文文档教程

发布于 4年前 浏览 26 项目主页 更新于 3年前

Leverage the FileMaker® 17, 18 & 19 Data API with ease!

fmRESTor.js 是一个 JavaScript 库,开发用于通过 JavaScript 代码中功能强大的新 FileMaker Data API 与托管在 FileMaker Server 上的数据库和自定义应用程序无缝交互。 忘记详细学习 FileMaker Data API,只需创建一个新对象,将必要的参数传递给它以连接到数据库,然后使用我们易于理解的方法来访问或修改您的数据。 fmRESTor.js 将负责身份验证、异常,甚至会话保存,以便您的代码成为 FileMaker Data API 的一个行为良好的客户端,而您不必担心这些技术细节。

我们创建了 fmRESTor.js 作为 fmRESTor 的第二种风格,首先是为 PHP 创建的,以便更容易和更快地从自定义 Web 应用程序中与 FileMaker 数据库交互,我们不想依赖托管在Web 服务器。 能够从 JavaScript 中轻松地与 FileMaker Data API 进行交互,使得交互速度更快,适用于 FileMaker 布局上的 Web 查看器中使用的复杂用户界面等项目。

请记住,使用这种方法访问数据库的凭据会暴露给用户,因为高级用户可以轻松探索 JavaScript 变量。 因此,请确保使用具有高度受限权限的凭据,或考虑使用 fmRESTor 的 PHP 版本。

我们 24U 相信整个 FileMaker 开发人员社区将受益于 FileMaker 平台,不仅拥有强大的新 RESTful API,而且开发人员也可以很好、高效地使用 API,因此我们决定在 GNU LGPLv3 下将我们的库作为开源提供执照。

我们将非常感谢您的贡献,但我们无法为图书馆提供免费支持。 但是,您可以通过在 https://www.24uSoftware.com/ 购买我们的服务,雇用我们来帮助您进行项目以赚钱fmRESTor 或利用我们的定制开发服务,可在 https://www.24uSoftware.com/custom-apps。

Features

  • One object class conveniently handles everything
  • Automatically generates authentication token
  • Re-uses existing token to avoid unnecessary additional connections
  • Automatically re-generates expired token
  • Handles exceptions and provides meaningful error results

Requirements

  • Modern Web Browser
  • FileMaker Server 17, 18 or 19

Important ! - How make fmRESTor.js work with FileMaker Server 19 !

要直接从客户端浏览器中运行的 JavaScript 访问 FileMaker Data API,您需要设置额外的标头以支持 CORS(跨源请求共享)。 否则您的请求可能会因 CORS 策略错误而失败:

CORS Error

和 Linux 上,您可以通过修改 Apache 配置来做到这一点:

在macOS

在 Windows 上,您可以在 IIS CORS 模块配置参考 中找到说明。

您可以从 Steve Winter 的这篇精彩文章 中了解有关 CORS 和 FileMaker Data API 的更多信息。

Usage ( with npm )

npm i @24u/fmrestor

Usage ( without npm )

将下载的库文件包含到您的项目中并创建新的类实例。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Your Project ( Basic )</title>
</head>
<body>

<script src="lib/fmRESTorJS.js"></script>
<script>
let fm = new fmRESTorJS(host, name, layout, user, password, options, fmExternalSource);

<!-- YOUR METHOD HERE (examples in DEMO) -->

</script>
</body>
</html>

Instance parameters:

ParameterTypeMandatoryDescription
hoststringyesHostname or IP address where FileMaker database is hosted
namestringyesFileMaker database name
layoutstringyesDatabase layout name to work on
userstringyesUser login to database
passwordstringyesUser password to database
optionsarrayoptionalAdditional library configuration
fmExternalSourcearrayoptionalProviding additional data sources, i.ec. if you use a separation model and the current layout needs to access data from external data sources.

Options parameters:

NameTypeMandatoryDefault valueDescription
token.namestringoptional"fm-api-token"Custom localStorage/Cookie name
token.expirationnumberoptional14Expiration time in minutes. fmRESTor automatically handles database login and saves token with its expiration time (into $_SESSION var) during first request. If expired, fmRESTor automatically reconnects to database on next request.
token.saveTostringoptional"localStorage"Place where is store FileMaker token. Options "Cookie" / "localStorage"

Example:

let options = {
    token: {
        name: "test-api2",
        saveTo: "cookie",
        expiration: 14
    }
};

let fmExternalSource = [
    {
        database: "fmRESTorEXTERNAL",
        username: "external",
        password: "external123456"
    }
];

let fm = new fmRESTorJS("127.0.0.1", "fmRESTor", "php_user", "api", "api123456", options, fmExternalSource);

Methods

logout

支持的 FileMaker Server 版本: 17、18、19

关闭 FileMaker 数据库中的当前会话。

/**
 * @param successCallback
 * @param errorCallback
 * @returns {*}
 */
logout(successCallback, errorCallback)

Usage

fm.logout((requestSuccess) => {
    // logout - SUCCESS
}, (requestError) => {
    // logout - ERROR
});


getProductInformation:

支持的 FileMaker Server 版本: 18、19

返回有关您正在连接的 FileMaker Server 的有用信息,例如版本或数据 & 时间格式。

/**
 * @param successCallback
 * @param errorCallback
 */
getProductInformation(successCallback, errorCallback)

Usage

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getProductInformation((requestSuccess) => {
        // getProductInformation - SUCCESS
    }, (requestError) => {
        // getProductInformation - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "productInfo": {
      "name": "FileMaker Data API Engine",
      "buildDate": "07/05/2019",
      "version": "18.0.2.217",
      "dateFormat": "MM/dd/yyyy",
      "timeFormat": "HH:mm:ss",
      "timeStampFormat": "MM/dd/yyyy HH:mm:ss"
    }
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 数据 API 指南 - 获取产品信息


getDatabaseNames:

支持的 FileMaker Server 版本: 18、19

返回所有托管并启用以通过 FileMaker Data API 访问的数据库的名称数组。

/**
 * 
 * @param successCallback
 * @param errorCallback
 */
getDatabaseNames(successCallback, errorCallback)

Usage

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getDatabaseNames((requestSuccess) => {
        // getDatabaseNames - SUCCESS
    }, (requestError) => {
        // getDatabaseNames - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "databases": [
      {
        "name": "fmRESTor"
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 数据 API 指南 - 获取数据库名称


getScriptNames:

支持的 FileMaker Server 版本: 18、19

返回给定数据库的所有可用脚本的名称数组。

/**
 * @param successCallback
 * @param errorCallback
 */
getScriptNames(successCallback, errorCallback)

Usage

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getScriptNames((requestSuccess) => {
        // getScriptNames - SUCCESS
    }, (requestError) => {
        // getScriptNames - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "scripts": [
      {
        "name": "Log request",
        "isFolder": false
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 数据 API 指南 - 获取脚本名称


getLayoutNames:

支持的 FileMaker Server 版本: 18、19

返回给定数据库的所有可用布局的名称数组。

/**
 * @param successCallback
 * @param errorCallback
 */
getLayoutNames(successCallback, errorCallback)

Usage

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getLayoutNames((requestSuccess) => {
        // getLayoutNames - SUCCESS
    }, (requestError) => {
        // getLayoutNames - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "layouts": [
      {
        "name": "php",
        "isFolder": true,
        "folderLayoutNames": [
          {
            "name": "php_user"
          },
          {
            "name": "php_licence"
          }
        ]
      },
      {
        "name": "scpt",
        "isFolder": true,
        "folderLayoutNames": [
          {
            "name": "scpt_log"
          }
        ]
      },
      {
        "name": "data",
        "isFolder": true,
        "folderLayoutNames": [
          {
            "name": "data_log"
          }
        ]
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 数据 API 指南 - 获取布局名称


getLayoutMetadata:

支持的 FileMaker Server 版本: 18、19

返回有关特定布局的有用信息,包括布局上的字段、入口和每个字段集的值列表数据以使用值列表进行数据输入.

/**
 * @param successCallback
 * @param errorCallback
 */
getLayoutMetadata(successCallback, errorCallback)

Usage

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getLayoutMetadata((requestSuccess) => {
        // getLayoutMetadata - SUCCESS
    }, (requestError) => {
        // getLayoutMetadata - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "fieldMetaData": [
      {
        "name": "id",
        "type": "normal",
        "displayType": "editText",
        "result": "number",
        "global": false,
        "autoEnter": true,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": true,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "created",
        "type": "normal",
        "displayType": "editText",
        "result": "timeStamp",
        "global": false,
        "autoEnter": true,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "created_by",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": false,
        "autoEnter": true,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "modified",
        "type": "normal",
        "displayType": "editText",
        "result": "timeStamp",
        "global": false,
        "autoEnter": true,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "modified_by",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": false,
        "autoEnter": true,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "surname",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "email",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "birthday",
        "type": "normal",
        "displayType": "editText",
        "result": "date",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "personal_identification_number",
        "type": "normal",
        "displayType": "editText",
        "result": "number",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "address",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "c_record_id",
        "type": "calculation",
        "displayType": "editText",
        "result": "number",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "photo",
        "type": "normal",
        "displayType": "editText",
        "result": "container",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "g_one",
        "type": "normal",
        "displayType": "editText",
        "result": "number",
        "global": true,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "g_text",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": true,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "",
        "type": "invalid",
        "displayType": "editText",
        "result": "invalid",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "",
        "type": "invalid",
        "displayType": "editText",
        "result": "invalid",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "",
        "type": "invalid",
        "displayType": "editText",
        "result": "invalid",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      }
    ],
    "portalMetaData": {
      "portal_licence": [
        {
          "name": "USER_licence::product_name",
          "type": "normal",
          "displayType": "editText",
          "result": "text",
          "global": false,
          "autoEnter": false,
          "fourDigitYear": false,
          "maxRepeat": 1,
          "maxCharacters": 0,
          "notEmpty": false,
          "numeric": false,
          "timeOfDay": false,
          "repetitionStart": 1,
          "repetitionEnd": 1
        },
        {
          "name": "USER_licence::key",
          "type": "normal",
          "displayType": "editText",
          "result": "text",
          "global": false,
          "autoEnter": false,
          "fourDigitYear": false,
          "maxRepeat": 1,
          "maxCharacters": 0,
          "notEmpty": false,
          "numeric": false,
          "timeOfDay": false,
          "repetitionStart": 1,
          "repetitionEnd": 1
        },
        {
          "name": "USER_licence::version",
          "type": "normal",
          "displayType": "editText",
          "result": "text",
          "global": false,
          "autoEnter": false,
          "fourDigitYear": false,
          "maxRepeat": 1,
          "maxCharacters": 0,
          "notEmpty": false,
          "numeric": false,
          "timeOfDay": false,
          "repetitionStart": 1,
          "repetitionEnd": 1
        },
        {
          "name": "USER_licence::date_of_expiration",
          "type": "normal",
          "displayType": "editText",
          "result": "date",
          "global": false,
          "autoEnter": false,
          "fourDigitYear": false,
          "maxRepeat": 1,
          "maxCharacters": 0,
          "notEmpty": false,
          "numeric": false,
          "timeOfDay": false,
          "repetitionStart": 1,
          "repetitionEnd": 1
        }
      ]
    }
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 数据 API 指南 - 获取布局元数据


createRecord:

支持的FileMaker Server版本: 17, 18, 19

在当前fmRESTor实例上下文的主表中创建一条记录。

/**
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
createRecord(parameters, successCallback, errorCallback)

Usage

let parameters = {
  "fieldData": {
    "surname": "Create Name",
    "email": "email@email.com",
    "birthday": "1.1.2001",
    "personal_identification_number": "99",
    "address": "Street 24, City"
  }
}

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.create(parameters
    , (requestSuccess) => {
        // createRecord - SUCCESS
    }, (requestError) => {
        // createRecord - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

  "response": {
    "scriptResult.prerequest": "MyScriptPreRequestParameters",
    "scriptError.prerequest": "0",
    "scriptResult.presort": "MyScriptPreSortParameters",
    "scriptError.presort": "0",
    "scriptResult": "MyScriptParameters",
    "scriptError": "0",
    "recordId": "348",
    "modId": "0"
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API 指南中提供了完整的可选参数列表


deleteRecord:

支持的 FileMaker Server 版本: 17、18、19

从当前 fmRESTor 实例上下文的主表中删除给定 ID 的记录。

/**
 * @param id
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
deleteRecord(id, parameters = null, successCallback, errorCallback) 

Usage

let id = 1;
let parameters = {
  "script": "Log request",
  "script.param": "MyScriptParameters",
  "script.prerequest": "Log request",
  "script.prerequest.param": "MyScriptPreRequestParameters",
  "script.presort": "Log request",
  "script.presort.param": "MyScriptPreSortParameters"
}

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.deleteRecord(id, parameters, (requestSuccess) => {
        // deleteRecord - SUCCESS
    }, (requestError) => {
        // deleteRecord - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "scriptResult.prerequest": "MyScriptPreRequestParameters",
    "scriptError.prerequest": "0",
    "scriptResult.presort": "MyScriptPreSortParameters",
    "scriptError.presort": "0",
    "scriptResult": "MyScriptParameters",
    "scriptError": "0"
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API 指南中提供了完整的可选参数列表


duplicateRecord:

支持的 FileMaker Server 版本: 18、19

复制在当前 fmRESTor 实例上下文的主表中找到的由 ID 指定的记录。

/**
 * @param id
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
duplicateRecord(id, parameters = null, successCallback, errorCallback)

Usage

let parameters = {
  "script": "Log request",
  "script.param": "MyScriptParameters",
  "script.prerequest": "Log request",
  "script.prerequest.param": "MyScriptPreRequestParameters",
  "script.presort": "Log request",
  "script.presort.param": "MyScriptPreSortParameters"
}

let id = 3;

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.duplicateRecord(id, parameters
    , (requestSuccess) => {
        // duplicateRecord - SUCCESS
    }, (requestError) => {
        // duplicateRecord - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "scriptResult.prerequest": "MyScriptPreRequestParameters",
    "scriptError.prerequest": "0",
    "scriptResult.presort": "MyScriptPreSortParameters",
    "scriptError.presort": "0",
    "scriptResult": "MyScriptParameters",
    "scriptError": "0",
    "recordId": "348",
    "modId": "0"
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API 指南中提供了完整的可选参数列表


editRecord:

支持的 FileMaker Server 版本: 17、18、19

从当前 fmRESTor 实例上下文的主表更新给定 ID 的记录。

/**
 * @param id
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
editRecord(id, parameters, successCallback, errorCallback)

Usage

let parameters = {
  "fieldData": {
    "surname": "Surname was edited",
    "email": "emailwasedited@email.com",
    "personal_identification_number": "1"
  }
}

let id = 4;

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.editRecord(id, parameters
    , (requestSuccess) => {
        // editRecord - SUCCESS
    }, (requestError) => {
        // editRecord - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "modId": "3"
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API 指南中提供了完整的可选参数列表


getRecord:

支持的 FileMaker Server 版本: 17、18、19

从当前 fmRESTor 实例上下文的主表中获取给定 ID 的记录。

/**
 * @param id
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
getRecord(id, parameters = null, successCallback, errorCallback)

Usage

let parameters = {
  "script": "Log request",
  "script.param": "MyScriptParameters",
  "script.prerequest": "Log request",
  "script.prerequest.param": "MyScriptPreRequestParameters",
  "script.presort": "Log request",
  "script.presort.param": "MyScriptPreSortParameters",
  "layout.response": "php_user",
  "_limit.USER_licence": 5,
  "_offset.USER_licence": 10
}

let id = 4;

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getRecord(id, parameters
    , (requestSuccess) => {
        // getRecord - SUCCESS
    }, (requestError) => {
        // getRecord - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "scriptResult.prerequest": "MyScriptPreRequestParameters",
    "scriptError.prerequest": "0",
    "scriptResult.presort": "MyScriptPreSortParameters",
    "scriptError.presort": "0",
    "scriptResult": "MyScriptParameters",
    "scriptError": "0",
    "dataInfo": {
      "database": "fmRESTor",
      "layout": "php_user",
      "table": "USER",
      "totalRecordCount": 165,
      "foundCount": 1,
      "returnedCount": 1
    },
    "data": [
      {
        "fieldData": {
          "id": 394,
          "created": "01/26/2020 17:53:36",
          "created_by": "api",
          "modified": "01/28/2020 12:02:31",
          "modified_by": "api",
          "surname": "Surname was edited",
          "email": "emailwasedited@email.com",
          "birthday": "",
          "personal_identification_number": 1,
          "address": "",
          "c_record_id": 320,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": []
        },
        "recordId": "320",
        "modId": "3",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 0,
            "returnedCount": 0
          }
        ]
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API 指南中提供了完整的可选参数列表


getRecords:

支持的 FileMaker Server 版本: 17, 18, 19

从当前 fmRESTor 实例上下文的主表中获取多条记录。 如果调用时不带参数或符合参数中指定条件的记录,则该函数返回所有记录(限制的默认配置为 100 条记录)。

/**
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
getRecords(parameters = null, successCallback, errorCallback)

Usage

let parameters = {
  "_limit": 5
}

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getRecords(parameters
    , (requestSuccess) => {
        // getRecords - SUCCESS
    }, (requestError) => {
        // getRecords - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "dataInfo": {
      "database": "fmRESTor",
      "layout": "php_user",
      "table": "USER",
      "totalRecordCount": 165,
      "foundCount": 165,
      "returnedCount": 5
    },
    "data": [
      {
        "fieldData": {
          "id": 252,
          "created": "07/30/2019 13:34:17",
          "created_by": "api",
          "modified": "07/30/2019 13:34:17",
          "modified_by": "api",
          "surname": "Lawrence",
          "email": "lawrence@lectus.ca",
          "birthday": "03/12/2020",
          "personal_identification_number": 398,
          "address": "7399 Lobortis Rd., Görlitz 38197",
          "c_record_id": 178,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": [
            {
              "recordId": "125",
              "USER_licence::product_name": "Windows 10 OEM Home",
              "USER_licence::key": "NKJFK-GPHP7-G8C3J-P6JXR-HQRJR ",
              "USER_licence::version": "10",
              "USER_licence::date_of_expiration": "05/12/2020",
              "modId": "0"
            },
            {
              "recordId": "126",
              "USER_licence::product_name": "Windows 7 Ultimate 32 bit",
              "USER_licence::key": "RCGX7-P3XWP-PPPCV-Q2H7C-FCGFR",
              "USER_licence::version": "7.3",
              "USER_licence::date_of_expiration": "03/04/2018",
              "modId": "0"
            }
          ]
        },
        "recordId": "178",
        "modId": "0",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 2,
            "returnedCount": 2
          }
        ]
      },
      {
        "fieldData": {
          "id": 253,
          "created": "07/30/2019 13:34:34",
          "created_by": "api",
          "modified": "07/30/2019 13:34:34",
          "modified_by": "api",
          "surname": "Deleted Name",
          "email": "email@email.com",
          "birthday": "01/01/2001",
          "personal_identification_number": 99,
          "address": "Street 24, City",
          "c_record_id": 179,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": [
            {
              "recordId": "127",
              "USER_licence::product_name": "product01Denis",
              "USER_licence::key": "key01Denis",
              "USER_licence::version": "ver01Denis",
              "USER_licence::date_of_expiration": "01/01/2024",
              "modId": "0"
            }
          ]
        },
        "recordId": "179",
        "modId": "0",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 1,
            "returnedCount": 1
          }
        ]
      },
      {
        "fieldData": {
          "id": 254,
          "created": "07/30/2019 13:34:34",
          "created_by": "api",
          "modified": "07/30/2019 13:34:34",
          "modified_by": "api",
          "surname": "Delete Name - check",
          "email": "email@email.com",
          "birthday": "01/01/2001",
          "personal_identification_number": 99,
          "address": "Street 24, City",
          "c_record_id": 180,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": [
            {
              "recordId": "128",
              "USER_licence::product_name": "product01Denis",
              "USER_licence::key": "key01Denis",
              "USER_licence::version": "ver01Denis",
              "USER_licence::date_of_expiration": "01/01/2024",
              "modId": "0"
            }
          ]
        },
        "recordId": "180",
        "modId": "0",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 1,
            "returnedCount": 1
          }
        ]
      },
      {
        "fieldData": {
          "id": 255,
          "created": "07/30/2019 13:34:49",
          "created_by": "api",
          "modified": "07/30/2019 13:34:49",
          "modified_by": "api",
          "surname": "Ripley",
          "email": "ripley@mail-share.com",
          "birthday": "03/23/1985",
          "personal_identification_number": 52,
          "address": "4298 Poco Mas Drive, Dallas",
          "c_record_id": 181,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": []
        },
        "recordId": "181",
        "modId": "0",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 0,
            "returnedCount": 0
          }
        ]
      },
      {
        "fieldData": {
          "id": 256,
          "created": "07/30/2019 13:34:49",
          "created_by": "api",
          "modified": "07/30/2019 13:34:49",
          "modified_by": "api",
          "surname": "Ripley",
          "email": "ripley@mail-share.com",
          "birthday": "03/23/1985",
          "personal_identification_number": 52,
          "address": "4298 Poco Mas Drive, Dallas",
          "c_record_id": 182,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": []
        },
        "recordId": "182",
        "modId": "0",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 0,
            "returnedCount": 0
          }
        ]
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API 指南中提供了完整的可选参数列表


uploadFileToContainter:

支持的 FileMaker Server 版本: 17、18、19

上传文件并存储到容器字段中。

/**
 * @param id
 * @param containerFieldName
 * @param containerFieldRepetition
 * @param file
 * @param successCallback
 * @param errorCallback
 */
uploadFileToContainter(id, containerFieldName, containerFieldRepetition, file, successCallback, errorCallback)

Usage

<input type="file" id="uploadFile"><br/><br/>
let id = 4;
let containerFieldName = "photo";
let containerFieldRepetition = 1;
let file = document.getElementById('uploadFile').files[0];

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.uploadFileToContainter(id, containerFieldName, containerFieldRepetition, file
    , (requestSuccess) => {
        // uploadFileToContainter - SUCCESS
    }, (requestError) => {
        // uploadFileToContainter - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "modId": "1"
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}


findRecord:

支持的 FileMaker Server 版本: 17、18、19

从当前 fmRESTor 实例上下文的主表中返回一组记录,符合其参数中指定的查找条件。

/**
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
findRecords(parameters, successCallback, errorCallback) 

Usage

let parameters = {
  "query": [
    {
      "email": "==email@email.com",
      "birthday": "1.1.2001",
      "personal_identification_number": "99",
      "address": "Street 24, City",
      "omit": "true"
    }
  ]
}

fm.findRecords(parameters
, (requestSuccess) => {
    // findRecords - SUCCESS
}, (requestError) => {
    // findRecords - ERROR
});

Sample Response

~~~json { “回复”: { “数据信息”:{ “数据库”:“fmRESTor”, “布局”:“php用户”, “表”:“用户”, “总记录数”:165, “发现计数”:165, “返回计数”:100 }, “数据”: [ { “字段数据”:{ “编号”:252, “创建”:“07/30/2019 13:34:17”, "创建": "api", “修改”:“07/30/2019 13:34:17”, "修改者": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:178, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[ { "recordId": "125", "USERlicence::productname": "Windows 10 OEM 主页", "USERlicence::key": "NKJFK-GPHP7-G8C3J-P6JXR-HQRJR", "USERlicence::version": "10", "USERlicence::date到期": "05/12/2020", “modId”:“0” }, { "recordId": "126", "USERlicence::productname": "Windows 7 Ultimate 32 位", "USERlicence::key": "RCGX7-P3XWP-PPPCV-Q2H7C-FCGFR", "USERlicence::version": "7.3", "USERlicence::dateofexpiration": "03/04/2018", “modId”:“0” } ] }, "recordId": "178", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:2, “返回计数”:2 } ] }, { “字段数据”:{ “编号”:253, “创建”:“07/30/2019 13:34:34”, "创建者": "api", “修改”:“07/30/2019 13:34:34”, "修改": "api", "surname": "删除姓名", "邮箱": "email@email.com", “生日”:“01/01/2001”, “个人身份证号码”:99, "address": "市街24号", “c记录id”:179, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[ { "recordId": "127", "USERlicence::productname": "product01Denis", "USERlicence::key": "key01Denis", "USERlicence::version": "ver01Denis", "USERlicence::dateofexpiration": "01/01/2024", “modId”:“0” } ] }, "recordId": "179", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:1, “返回计数”:1 } ] }, { “字段数据”:{ “编号”:254, “创建”:“07/30/2019 13:34:34”, "创建者": "api", “修改”:“07/30/2019 13:34:34”, "修改": "api", "surname": "删除姓名-勾选", "邮箱": "email@email.com", “生日”:“01/01/2001”, “个人身份证号码”:99, "address": "市街24号", “c记录id”:180, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[ { "recordId": "128", "USERlicence::productname": "product01Denis", "USERlicence::key": "key01Denis", "USERlicence::version": "ver01Denis", "USERlicence::dateofexpiration": "01/01/2024", “modId”:“0” } ] }, "recordId": "180", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:1, “返回计数”:1 } ] }, { “字段数据”:{ “编号”:255, “创建”:“07/30/2019 13:34:49”, "创建者": "api", “修改”:“07/30/2019 13:34:49”, "修改": "api", “姓氏”:“里普利”, “电子邮件”:“ripley@mail-share.com”, “生日”:“1985 年 3 月 23 日”, “个人身份证号码”:52, “地址”:“4298 Poco Mas Drive,达拉斯”, “c记录id”:181, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, "recordId": "181", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:256, “创建”:“07/30/2019 13:34:49”, "创建": "api", “修改”:“07/30/2019 13:34:49”, "修改者": "api", “姓氏”:“里普利”, “电子邮件”:“ripley@mail-share.com”, “生日”:“1985 年 3 月 23 日”, “个人身份证号码”:52, “地址”:“4298 Poco Mas Drive,达拉斯”, “c记录id”:182, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, “记录编号”:“182”, “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:257, “创建”:“07/30/2019 13:34:56”, "创建者": "api", “修改”:“07/30/2019 13:34:56”, "修改": "api", “姓”:“萨顿G。”, “电子邮件”:“sutton.gabriel@a.edu”, “生日”:“12/11/2020”, “个人身份证号码”:111, "address": "5776 Nisi Road, Gorlitz 38197", “c记录id”:183, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[ { “记录编号”:“131”, "USERlicence::productname": "", "USERlicence::key": "VK7JG-NPHTM", "USERlicence::version": "", "USERlicence::dateofexpiration": "", “modId”:“0” }, { “记录编号”:“132”, "USERlicence::productname": "", "USERlicence::key": "", "USERlicence::version": "业务 OLP", "USERlicence::dateofexpiration": "09/01/2023", “modId”:“0” }, { "recordId": "129", "USERlicence::productname": "Adobe Photoshop Elements", "USERlicence::key": "VK7JG-NPHTM-C97JM-9MPGT-3V66T", "USERlicence::version": "2019 MP ENG BOX", "USERlicence::dateofexpiration": "02/08/2024", “modId”:“0” }, { "recordId": "130", "USERlicence::productname": "Microsoft Office 365", "USERlicence::key": "KTNPV-KTRK4-3RRR8-39X6W-W44T3", "USERlicence::version": "Business Premium OLP", "USERlicence::date到期": "06/04/2021", “modId”:“0” } ] }, “记录编号”:“183”, "modId": "1", “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:4, “返回计数”:4 } ] }, { “字段数据”:{ “编号”:258, “创建”:“07/30/2019 14:19:09”, "创建": "api", “修改”:“07/30/2019 14:19:09”, "修改者": "api", "surname": "加载图片名称", "邮箱": "email@email.com", “生日”:“01/01/2001”, “个人身份证号码”:99, "address": "市街24号", “c记录id”:184, “照片”:“https://blinky.24u.cz/StreamingSSL/MainDB/6497ED0EB139CA632C284D791FD475FCA622A2395B9BA3647A26316F4678B134.jpg?RCType=EmbeddedRCFileProcessor”, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, “记录编号”:“184”, "modId": "1", “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:259, “创建”:“07/31/2019 11:23:27”, "创建": "api", “修改”:“07/31/2019 11:23:27”, "修改者": "api", "surname": "创建姓名", "邮箱": "email@email.com", “生日”:“01/01/2001”, “个人身份证号码”:99, "address": "市街24号", “c记录id”:185, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, "recordId": "185", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:260, “创建”:“08/08/2019 17:52:18”, "创建者": "api", “修改”:“08/08/2019 17:52:18”, "修改": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:186, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, "recordId": "186", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:261, “创建”:“08/08/2019 17:52:56”, "创建": "api", “修改”:“08/08/2019 17:52:56”, "修改者": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:187, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, "recordId": "187", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:262, “创建”:“08/08/2019 21:02:31”, "创建者": "api", “修改”:“08/08/2019 21:02:31”, "修改": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:188, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, "recordId": "188", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:263, “创建”:“2019 年 9 月 21 日 18:35:10”, "创建": "api", “修改”:“09/21/2019 18:35:10”, "修改者": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:189, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, "recordId": "189", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:264, “创建”:“2019 年 9 月 21 日 18:36:53”, "创建者": "api", “修改”:“09/21/2019 18:36:53”, "修改": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:190, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, "recordId": "190", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:265, “创建”:“09/21/2019 18:37:49”, "创建": "api", “修改”:“09/21/2019 18:37:49”, "修改者": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:191, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, "recordId": "191", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:266, “创建”:“09/25/2019 20:50:36”, "创建者": "api", “修改”:“09/25/2019 20:50:36”, "修改": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:192, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, "recordId": "192", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:267, “创建”:“09/25/2019 20:50:46”, "创建": "api", “修改”:“09/25/2019 20:50:46”, "修改者": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:193, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, "recordId": "193", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:268, “创建”:“09/25/2019 20:52:43”, "创建者": "api", “修改”:“09/25/2019 20:52:43”, "修改": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:194, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, "recordId": "194", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:269, “创建”:“09/25/2019 20:52:44”, "创建": "api", “修改”:“09/25/2019 20:52:44”, "修改者": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:195, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, "recordId": "195", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:270, “创建”:“09/25/2019 20:52:46”, "创建者": "api", “修改”:“09/25/2019 20:52:46”, "修改": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:196, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, "recordId": "196", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:271, “创建”:“2019 年 9 月 25 日 20:52:47”, "创建": "api", “修改”:“09/25/2019 20:52:47”, "修改者": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:197, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, "recordId": "197", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:272, “创建”:“09/25/2019 21:25:18”, "创建者": "api", “修改”:“09/25/2019 21:25:18”, "修改": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:198, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, "recordId": "198", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:273, “创建”:“2019 年 9 月 25 日 21:25:45”, "创建": "api", “修改”:“09/25/2019 21:25:45”, "修改者": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:199, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, "recordId": "199", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:274, “创建”:“09/25/2019 22:38:51”, "创建者": "api", “修改”:“09/25/2019 22:38:51”, "修改": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, "c记录id": 200, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, "recordId": "200", “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:275, “创建”:“09/25/2019 22:38:58”, "创建": "api", “修改”:“09/25/2019 22:38:58”, "修改者": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, "c记录id": 201, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, “记录编号”:“201”, “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:276, “创建”:“2019 年 9 月 25 日 22:40:58”, "创建者": "api", “修改”:“09/25/2019 22:40:58”, "修改": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:202, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, “记录编号”:“202”, “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“用户许可证”, “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:277, “创建”:“2019 年 9 月 25 日 22:46:55”, "创建": "api", “修改”:“09/25/2019 22:46:55”, "修改者": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:203, “照片”: ””, "gone": "", "g文本": "", “”:“” }, “门户数据”:{ “门户网站许可证”:[] }, “记录编号”:“203”, “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, "table": "USER许可证", “发现计数”:0, “返回计数”:0 } ] }, { “字段数据”:{ “编号”:278, “创建”:“2019 年 9 月 25 日 22:47:16”, "创建者": "api", “修改”:“09/25/2019 22:47:16”, "修改": "api", “姓氏”:“劳伦斯”, “电子邮件”:“lawrence@lectus.ca”, “生日”:“2020 年 3 月 12 日”, “个人身份证号码”:398, “地址”:“7399 Lobortis Rd., Görlitz 38197”, “c记录id”:204, “照片”: ””, "gone": "", "gtext": "", “”:“” }, “门户数据”:{ “门户许可证”:[] }, “记录编号”:“204”, “modId”:“0”, “门户数据信息”:[ { "portalObjectName": "门户许可证", “数据库”:“fmRESTor”, “表”:“USER_licence”,

Leverage the FileMaker® 17, 18 & 19 Data API with ease!

fmRESTor.js is a JavaScript library developed to seamlessly interact with databases and custom apps hosted on a FileMaker Server via the new powerful FileMaker Data API from within a JavaScript code. Forget about learning FileMaker Data API in detail, just create a new object, passing it necessary parameters to connect to the database, and use our easy to understand methods to access or modify your data. fmRESTor.js will take care of authentication, exceptions, and even session preservation in order for your code to be a well-behaving client for the FileMaker Data API without you having to worry about these technical details.

We have created fmRESTor.js as a second flavor of fmRESTor, firstly created for PHP, to make it easier and faster to interact with FileMaker databases from within custom web apps we did not want to rely on intermediate PHP scripts hosted on a web server. Being able to easily interact with FileMaker Data API from within JavaScript makes the interaction much faster and suitable for projects like complex user interfaces used within a Web Viewer on a FileMaker layout.

Keep in mind that credentials to access your database are exposed to the user with this approach, because JavaScript variables can be easily explored by a power user. So make sure to use credentials with highly limited rights, or consider using the PHP version of fmRESTor instead.

We at 24U believe that the whole FileMaker developers community will benefit from the FileMaker Platform not only having new powerful RESTful API, but also developers using the API nicely and efficiently, therefore we decided to make our library available as Open Source, under the GNU LGPLv3 license.

We will greatly appreciate your contributions, although we cannot provide free support for the library. You may, however, hire us to help you with your projects for money by purchasing our services at https://www.24uSoftware.com/fmRESTor or by utilizing our custom development services, available at https://www.24uSoftware.com/custom-apps.

Features

  • One object class conveniently handles everything
  • Automatically generates authentication token
  • Re-uses existing token to avoid unnecessary additional connections
  • Automatically re-generates expired token
  • Handles exceptions and provides meaningful error results

Requirements

  • Modern Web Browser
  • FileMaker Server 17, 18 or 19

Important ! - How make fmRESTor.js work with FileMaker Server 19 !

To access the FileMaker Data API directly from JavaScript running in a client browser you’ll need to set additional headers to support CORS (Cross Origin Request Sharing). Otherwise your requests may fail with CORS policy error:

CORS Error

On macOS and Linux you can do that by modifying Apache configuration:

CORS Apache configuration

On Windows you can find instructions in the IIS CORS module Configuration Reference.

You can learn more about CORS and FileMaker Data API from this great article by Steve Winter.

Usage ( with npm )

npm i @24u/fmrestor

Usage ( without npm )

Include downloaded library file to your project and create new class instance.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Your Project ( Basic )</title>
</head>
<body>

<script src="lib/fmRESTorJS.js"></script>
<script>
let fm = new fmRESTorJS(host, name, layout, user, password, options, fmExternalSource);

<!-- YOUR METHOD HERE (examples in DEMO) -->

</script>
</body>
</html>

Instance parameters:

ParameterTypeMandatoryDescription
hoststringyesHostname or IP address where FileMaker database is hosted
namestringyesFileMaker database name
layoutstringyesDatabase layout name to work on
userstringyesUser login to database
passwordstringyesUser password to database
optionsarrayoptionalAdditional library configuration
fmExternalSourcearrayoptionalProviding additional data sources, i.ec. if you use a separation model and the current layout needs to access data from external data sources.

Options parameters:

NameTypeMandatoryDefault valueDescription
token.namestringoptional"fm-api-token"Custom localStorage/Cookie name
token.expirationnumberoptional14Expiration time in minutes. fmRESTor automatically handles database login and saves token with its expiration time (into $_SESSION var) during first request. If expired, fmRESTor automatically reconnects to database on next request.
token.saveTostringoptional"localStorage"Place where is store FileMaker token. Options "Cookie" / "localStorage"

Example:

let options = {
    token: {
        name: "test-api2",
        saveTo: "cookie",
        expiration: 14
    }
};

let fmExternalSource = [
    {
        database: "fmRESTorEXTERNAL",
        username: "external",
        password: "external123456"
    }
];

let fm = new fmRESTorJS("127.0.0.1", "fmRESTor", "php_user", "api", "api123456", options, fmExternalSource);

Methods

logout

Supported FileMaker Server version: 17, 18, 19

Close current session in the FileMaker database.

/**
 * @param successCallback
 * @param errorCallback
 * @returns {*}
 */
logout(successCallback, errorCallback)

Usage

fm.logout((requestSuccess) => {
    // logout - SUCCESS
}, (requestError) => {
    // logout - ERROR
});


getProductInformation:

Supported FileMaker Server version: 18, 19

Returns useful information about the FileMaker Server you're connecting to, such as version or data & time formats.

/**
 * @param successCallback
 * @param errorCallback
 */
getProductInformation(successCallback, errorCallback)

Usage

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getProductInformation((requestSuccess) => {
        // getProductInformation - SUCCESS
    }, (requestError) => {
        // getProductInformation - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "productInfo": {
      "name": "FileMaker Data API Engine",
      "buildDate": "07/05/2019",
      "version": "18.0.2.217",
      "dateFormat": "MM/dd/yyyy",
      "timeFormat": "HH:mm:ss",
      "timeStampFormat": "MM/dd/yyyy HH:mm:ss"
    }
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API Guide - Get Product Information


getDatabaseNames:

Supported FileMaker Server version: 18, 19

Returns array of names of all databases hosted and enabled for access via FileMaker Data API.

/**
 * 
 * @param successCallback
 * @param errorCallback
 */
getDatabaseNames(successCallback, errorCallback)

Usage

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getDatabaseNames((requestSuccess) => {
        // getDatabaseNames - SUCCESS
    }, (requestError) => {
        // getDatabaseNames - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "databases": [
      {
        "name": "fmRESTor"
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API Guide - Get Database Names


getScriptNames:

Supported FileMaker Server version: 18, 19

Returns array of names of all available scripts for given database.

/**
 * @param successCallback
 * @param errorCallback
 */
getScriptNames(successCallback, errorCallback)

Usage

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getScriptNames((requestSuccess) => {
        // getScriptNames - SUCCESS
    }, (requestError) => {
        // getScriptNames - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "scripts": [
      {
        "name": "Log request",
        "isFolder": false
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API Guide - Get Script Names


getLayoutNames:

Supported FileMaker Server version: 18, 19

Returns array of names of all available layouts for given database.

/**
 * @param successCallback
 * @param errorCallback
 */
getLayoutNames(successCallback, errorCallback)

Usage

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getLayoutNames((requestSuccess) => {
        // getLayoutNames - SUCCESS
    }, (requestError) => {
        // getLayoutNames - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "layouts": [
      {
        "name": "php",
        "isFolder": true,
        "folderLayoutNames": [
          {
            "name": "php_user"
          },
          {
            "name": "php_licence"
          }
        ]
      },
      {
        "name": "scpt",
        "isFolder": true,
        "folderLayoutNames": [
          {
            "name": "scpt_log"
          }
        ]
      },
      {
        "name": "data",
        "isFolder": true,
        "folderLayoutNames": [
          {
            "name": "data_log"
          }
        ]
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API Guide - Get Layout Names


getLayoutMetadata:

Supported FileMaker Server version: 18, 19

Returns useful information about specific layout, including fields on the layout, portals, and value list data for each field set to use a value list for data entry.

/**
 * @param successCallback
 * @param errorCallback
 */
getLayoutMetadata(successCallback, errorCallback)

Usage

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getLayoutMetadata((requestSuccess) => {
        // getLayoutMetadata - SUCCESS
    }, (requestError) => {
        // getLayoutMetadata - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "fieldMetaData": [
      {
        "name": "id",
        "type": "normal",
        "displayType": "editText",
        "result": "number",
        "global": false,
        "autoEnter": true,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": true,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "created",
        "type": "normal",
        "displayType": "editText",
        "result": "timeStamp",
        "global": false,
        "autoEnter": true,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "created_by",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": false,
        "autoEnter": true,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "modified",
        "type": "normal",
        "displayType": "editText",
        "result": "timeStamp",
        "global": false,
        "autoEnter": true,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "modified_by",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": false,
        "autoEnter": true,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "surname",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "email",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "birthday",
        "type": "normal",
        "displayType": "editText",
        "result": "date",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "personal_identification_number",
        "type": "normal",
        "displayType": "editText",
        "result": "number",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "address",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "c_record_id",
        "type": "calculation",
        "displayType": "editText",
        "result": "number",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "photo",
        "type": "normal",
        "displayType": "editText",
        "result": "container",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "g_one",
        "type": "normal",
        "displayType": "editText",
        "result": "number",
        "global": true,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "g_text",
        "type": "normal",
        "displayType": "editText",
        "result": "text",
        "global": true,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "",
        "type": "invalid",
        "displayType": "editText",
        "result": "invalid",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "",
        "type": "invalid",
        "displayType": "editText",
        "result": "invalid",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      },
      {
        "name": "",
        "type": "invalid",
        "displayType": "editText",
        "result": "invalid",
        "global": false,
        "autoEnter": false,
        "fourDigitYear": false,
        "maxRepeat": 1,
        "maxCharacters": 0,
        "notEmpty": false,
        "numeric": false,
        "timeOfDay": false,
        "repetitionStart": 1,
        "repetitionEnd": 1
      }
    ],
    "portalMetaData": {
      "portal_licence": [
        {
          "name": "USER_licence::product_name",
          "type": "normal",
          "displayType": "editText",
          "result": "text",
          "global": false,
          "autoEnter": false,
          "fourDigitYear": false,
          "maxRepeat": 1,
          "maxCharacters": 0,
          "notEmpty": false,
          "numeric": false,
          "timeOfDay": false,
          "repetitionStart": 1,
          "repetitionEnd": 1
        },
        {
          "name": "USER_licence::key",
          "type": "normal",
          "displayType": "editText",
          "result": "text",
          "global": false,
          "autoEnter": false,
          "fourDigitYear": false,
          "maxRepeat": 1,
          "maxCharacters": 0,
          "notEmpty": false,
          "numeric": false,
          "timeOfDay": false,
          "repetitionStart": 1,
          "repetitionEnd": 1
        },
        {
          "name": "USER_licence::version",
          "type": "normal",
          "displayType": "editText",
          "result": "text",
          "global": false,
          "autoEnter": false,
          "fourDigitYear": false,
          "maxRepeat": 1,
          "maxCharacters": 0,
          "notEmpty": false,
          "numeric": false,
          "timeOfDay": false,
          "repetitionStart": 1,
          "repetitionEnd": 1
        },
        {
          "name": "USER_licence::date_of_expiration",
          "type": "normal",
          "displayType": "editText",
          "result": "date",
          "global": false,
          "autoEnter": false,
          "fourDigitYear": false,
          "maxRepeat": 1,
          "maxCharacters": 0,
          "notEmpty": false,
          "numeric": false,
          "timeOfDay": false,
          "repetitionStart": 1,
          "repetitionEnd": 1
        }
      ]
    }
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

FileMaker 18 Data API Guide - Get Layout Metadata


createRecord:

Supported FileMaker Server version: 17, 18, 19

Create a record in the primary table of the current fmRESTor instance context.

/**
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
createRecord(parameters, successCallback, errorCallback)

Usage

let parameters = {
  "fieldData": {
    "surname": "Create Name",
    "email": "email@email.com",
    "birthday": "1.1.2001",
    "personal_identification_number": "99",
    "address": "Street 24, City"
  }
}

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.create(parameters
    , (requestSuccess) => {
        // createRecord - SUCCESS
    }, (requestError) => {
        // createRecord - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

  "response": {
    "scriptResult.prerequest": "MyScriptPreRequestParameters",
    "scriptError.prerequest": "0",
    "scriptResult.presort": "MyScriptPreSortParameters",
    "scriptError.presort": "0",
    "scriptResult": "MyScriptParameters",
    "scriptError": "0",
    "recordId": "348",
    "modId": "0"
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

Complete list of optional parameters is available at FileMaker 18 Data API Guide


deleteRecord:

Supported FileMaker Server version: 17, 18, 19

Delete a record of given ID from the primary table of the current fmRESTor instance context.

/**
 * @param id
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
deleteRecord(id, parameters = null, successCallback, errorCallback) 

Usage

let id = 1;
let parameters = {
  "script": "Log request",
  "script.param": "MyScriptParameters",
  "script.prerequest": "Log request",
  "script.prerequest.param": "MyScriptPreRequestParameters",
  "script.presort": "Log request",
  "script.presort.param": "MyScriptPreSortParameters"
}

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.deleteRecord(id, parameters, (requestSuccess) => {
        // deleteRecord - SUCCESS
    }, (requestError) => {
        // deleteRecord - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "scriptResult.prerequest": "MyScriptPreRequestParameters",
    "scriptError.prerequest": "0",
    "scriptResult.presort": "MyScriptPreSortParameters",
    "scriptError.presort": "0",
    "scriptResult": "MyScriptParameters",
    "scriptError": "0"
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

Complete list of optional parameters is available at FileMaker 18 Data API Guide


duplicateRecord:

Supported FileMaker Server version: 18, 19

Duplicate a record, specified by ID, found in the primary table of the current fmRESTor instance context.

/**
 * @param id
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
duplicateRecord(id, parameters = null, successCallback, errorCallback)

Usage

let parameters = {
  "script": "Log request",
  "script.param": "MyScriptParameters",
  "script.prerequest": "Log request",
  "script.prerequest.param": "MyScriptPreRequestParameters",
  "script.presort": "Log request",
  "script.presort.param": "MyScriptPreSortParameters"
}

let id = 3;

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.duplicateRecord(id, parameters
    , (requestSuccess) => {
        // duplicateRecord - SUCCESS
    }, (requestError) => {
        // duplicateRecord - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "scriptResult.prerequest": "MyScriptPreRequestParameters",
    "scriptError.prerequest": "0",
    "scriptResult.presort": "MyScriptPreSortParameters",
    "scriptError.presort": "0",
    "scriptResult": "MyScriptParameters",
    "scriptError": "0",
    "recordId": "348",
    "modId": "0"
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

Complete list of optional parameters is available at FileMaker 18 Data API Guide


editRecord:

Supported FileMaker Server version: 17, 18, 19

Update a record of given ID from the primary table of the current fmRESTor instance context.

/**
 * @param id
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
editRecord(id, parameters, successCallback, errorCallback)

Usage

let parameters = {
  "fieldData": {
    "surname": "Surname was edited",
    "email": "emailwasedited@email.com",
    "personal_identification_number": "1"
  }
}

let id = 4;

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.editRecord(id, parameters
    , (requestSuccess) => {
        // editRecord - SUCCESS
    }, (requestError) => {
        // editRecord - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "modId": "3"
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

Complete list of optional parameters is available at FileMaker 18 Data API Guide


getRecord:

Supported FileMaker Server version: 17, 18, 19

Get a record of given ID from the primary table of the current fmRESTor instance context.

/**
 * @param id
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
getRecord(id, parameters = null, successCallback, errorCallback)

Usage

let parameters = {
  "script": "Log request",
  "script.param": "MyScriptParameters",
  "script.prerequest": "Log request",
  "script.prerequest.param": "MyScriptPreRequestParameters",
  "script.presort": "Log request",
  "script.presort.param": "MyScriptPreSortParameters",
  "layout.response": "php_user",
  "_limit.USER_licence": 5,
  "_offset.USER_licence": 10
}

let id = 4;

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getRecord(id, parameters
    , (requestSuccess) => {
        // getRecord - SUCCESS
    }, (requestError) => {
        // getRecord - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "scriptResult.prerequest": "MyScriptPreRequestParameters",
    "scriptError.prerequest": "0",
    "scriptResult.presort": "MyScriptPreSortParameters",
    "scriptError.presort": "0",
    "scriptResult": "MyScriptParameters",
    "scriptError": "0",
    "dataInfo": {
      "database": "fmRESTor",
      "layout": "php_user",
      "table": "USER",
      "totalRecordCount": 165,
      "foundCount": 1,
      "returnedCount": 1
    },
    "data": [
      {
        "fieldData": {
          "id": 394,
          "created": "01/26/2020 17:53:36",
          "created_by": "api",
          "modified": "01/28/2020 12:02:31",
          "modified_by": "api",
          "surname": "Surname was edited",
          "email": "emailwasedited@email.com",
          "birthday": "",
          "personal_identification_number": 1,
          "address": "",
          "c_record_id": 320,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": []
        },
        "recordId": "320",
        "modId": "3",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 0,
            "returnedCount": 0
          }
        ]
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

Complete list of optional parameters is available at FileMaker 18 Data API Guide


getRecords:

Supported FileMaker Server version: 17, 18, 19

Get multiple records from the primary table of the current fmRESTor instance context. The function returns all records (default configuration for limit is 100 number of records) if called with no parameter or those fitting the criteria specified in its parameter.

/**
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
getRecords(parameters = null, successCallback, errorCallback)

Usage

let parameters = {
  "_limit": 5
}

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.getRecords(parameters
    , (requestSuccess) => {
        // getRecords - SUCCESS
    }, (requestError) => {
        // getRecords - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "dataInfo": {
      "database": "fmRESTor",
      "layout": "php_user",
      "table": "USER",
      "totalRecordCount": 165,
      "foundCount": 165,
      "returnedCount": 5
    },
    "data": [
      {
        "fieldData": {
          "id": 252,
          "created": "07/30/2019 13:34:17",
          "created_by": "api",
          "modified": "07/30/2019 13:34:17",
          "modified_by": "api",
          "surname": "Lawrence",
          "email": "lawrence@lectus.ca",
          "birthday": "03/12/2020",
          "personal_identification_number": 398,
          "address": "7399 Lobortis Rd., Görlitz 38197",
          "c_record_id": 178,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": [
            {
              "recordId": "125",
              "USER_licence::product_name": "Windows 10 OEM Home",
              "USER_licence::key": "NKJFK-GPHP7-G8C3J-P6JXR-HQRJR ",
              "USER_licence::version": "10",
              "USER_licence::date_of_expiration": "05/12/2020",
              "modId": "0"
            },
            {
              "recordId": "126",
              "USER_licence::product_name": "Windows 7 Ultimate 32 bit",
              "USER_licence::key": "RCGX7-P3XWP-PPPCV-Q2H7C-FCGFR",
              "USER_licence::version": "7.3",
              "USER_licence::date_of_expiration": "03/04/2018",
              "modId": "0"
            }
          ]
        },
        "recordId": "178",
        "modId": "0",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 2,
            "returnedCount": 2
          }
        ]
      },
      {
        "fieldData": {
          "id": 253,
          "created": "07/30/2019 13:34:34",
          "created_by": "api",
          "modified": "07/30/2019 13:34:34",
          "modified_by": "api",
          "surname": "Deleted Name",
          "email": "email@email.com",
          "birthday": "01/01/2001",
          "personal_identification_number": 99,
          "address": "Street 24, City",
          "c_record_id": 179,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": [
            {
              "recordId": "127",
              "USER_licence::product_name": "product01Denis",
              "USER_licence::key": "key01Denis",
              "USER_licence::version": "ver01Denis",
              "USER_licence::date_of_expiration": "01/01/2024",
              "modId": "0"
            }
          ]
        },
        "recordId": "179",
        "modId": "0",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 1,
            "returnedCount": 1
          }
        ]
      },
      {
        "fieldData": {
          "id": 254,
          "created": "07/30/2019 13:34:34",
          "created_by": "api",
          "modified": "07/30/2019 13:34:34",
          "modified_by": "api",
          "surname": "Delete Name - check",
          "email": "email@email.com",
          "birthday": "01/01/2001",
          "personal_identification_number": 99,
          "address": "Street 24, City",
          "c_record_id": 180,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": [
            {
              "recordId": "128",
              "USER_licence::product_name": "product01Denis",
              "USER_licence::key": "key01Denis",
              "USER_licence::version": "ver01Denis",
              "USER_licence::date_of_expiration": "01/01/2024",
              "modId": "0"
            }
          ]
        },
        "recordId": "180",
        "modId": "0",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 1,
            "returnedCount": 1
          }
        ]
      },
      {
        "fieldData": {
          "id": 255,
          "created": "07/30/2019 13:34:49",
          "created_by": "api",
          "modified": "07/30/2019 13:34:49",
          "modified_by": "api",
          "surname": "Ripley",
          "email": "ripley@mail-share.com",
          "birthday": "03/23/1985",
          "personal_identification_number": 52,
          "address": "4298 Poco Mas Drive, Dallas",
          "c_record_id": 181,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": []
        },
        "recordId": "181",
        "modId": "0",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 0,
            "returnedCount": 0
          }
        ]
      },
      {
        "fieldData": {
          "id": 256,
          "created": "07/30/2019 13:34:49",
          "created_by": "api",
          "modified": "07/30/2019 13:34:49",
          "modified_by": "api",
          "surname": "Ripley",
          "email": "ripley@mail-share.com",
          "birthday": "03/23/1985",
          "personal_identification_number": 52,
          "address": "4298 Poco Mas Drive, Dallas",
          "c_record_id": 182,
          "photo": "",
          "g_one": 123456789,
          "g_text": "",
          "": ""
        },
        "portalData": {
          "portal_licence": []
        },
        "recordId": "182",
        "modId": "0",
        "portalDataInfo": [
          {
            "portalObjectName": "portal_licence",
            "database": "fmRESTor",
            "table": "USER_licence",
            "foundCount": 0,
            "returnedCount": 0
          }
        ]
      }
    ]
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}

Complete list of optional parameters is available at FileMaker 18 Data API Guide


uploadFileToContainter:

Supported FileMaker Server version: 17, 18, 19

Upload file and store into container field.

/**
 * @param id
 * @param containerFieldName
 * @param containerFieldRepetition
 * @param file
 * @param successCallback
 * @param errorCallback
 */
uploadFileToContainter(id, containerFieldName, containerFieldRepetition, file, successCallback, errorCallback)

Usage

<input type="file" id="uploadFile"><br/><br/>
let id = 4;
let containerFieldName = "photo";
let containerFieldRepetition = 1;
let file = document.getElementById('uploadFile').files[0];

fm.login((loginSuccess) => {
    // login - SUCCESS
    fm.uploadFileToContainter(id, containerFieldName, containerFieldRepetition, file
    , (requestSuccess) => {
        // uploadFileToContainter - SUCCESS
    }, (requestError) => {
        // uploadFileToContainter - ERROR
    });
}, (loginError) => {
    // login - ERROR
});

Sample Response

{
  "response": {
    "modId": "1"
  },
  "messages": [
    {
      "code": "0",
      "message": "OK"
    }
  ]
}


findRecord:

Supported FileMaker Server version: 17, 18, 19

Returns a set of records from the primary table of the current fmRESTor instance context, fitting the find criteria specified in its parameter.

/**
 * @param parameters
 * @param successCallback
 * @param errorCallback
 */
findRecords(parameters, successCallback, errorCallback) 

Usage

let parameters = {
  "query": [
    {
      "email": "==email@email.com",
      "birthday": "1.1.2001",
      "personal_identification_number": "99",
      "address": "Street 24, City",
      "omit": "true"
    }
  ]
}

fm.findRecords(parameters
, (requestSuccess) => {
    // findRecords - SUCCESS
}, (requestError) => {
    // findRecords - ERROR
});

Sample Response

~~~json { "response": { "dataInfo": { "database": "fmRESTor", "layout": "phpuser", "table": "USER", "totalRecordCount": 165, "foundCount": 165, "returnedCount": 100 }, "data": [ { "fieldData": { "id": 252, "created": "07/30/2019 13:34:17", "createdby": "api", "modified": "07/30/2019 13:34:17", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 178, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [ { "recordId": "125", "USERlicence::productname": "Windows 10 OEM Home", "USERlicence::key": "NKJFK-GPHP7-G8C3J-P6JXR-HQRJR ", "USERlicence::version": "10", "USERlicence::dateofexpiration": "05/12/2020", "modId": "0" }, { "recordId": "126", "USERlicence::productname": "Windows 7 Ultimate 32 bit", "USERlicence::key": "RCGX7-P3XWP-PPPCV-Q2H7C-FCGFR", "USERlicence::version": "7.3", "USERlicence::dateofexpiration": "03/04/2018", "modId": "0" } ] }, "recordId": "178", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 2, "returnedCount": 2 } ] }, { "fieldData": { "id": 253, "created": "07/30/2019 13:34:34", "createdby": "api", "modified": "07/30/2019 13:34:34", "modifiedby": "api", "surname": "Deleted Name", "email": "email@email.com", "birthday": "01/01/2001", "personalidentificationnumber": 99, "address": "Street 24, City", "crecordid": 179, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [ { "recordId": "127", "USERlicence::productname": "product01Denis", "USERlicence::key": "key01Denis", "USERlicence::version": "ver01Denis", "USERlicence::dateofexpiration": "01/01/2024", "modId": "0" } ] }, "recordId": "179", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 1, "returnedCount": 1 } ] }, { "fieldData": { "id": 254, "created": "07/30/2019 13:34:34", "createdby": "api", "modified": "07/30/2019 13:34:34", "modifiedby": "api", "surname": "Delete Name - check", "email": "email@email.com", "birthday": "01/01/2001", "personalidentificationnumber": 99, "address": "Street 24, City", "crecordid": 180, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [ { "recordId": "128", "USERlicence::productname": "product01Denis", "USERlicence::key": "key01Denis", "USERlicence::version": "ver01Denis", "USERlicence::dateofexpiration": "01/01/2024", "modId": "0" } ] }, "recordId": "180", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 1, "returnedCount": 1 } ] }, { "fieldData": { "id": 255, "created": "07/30/2019 13:34:49", "createdby": "api", "modified": "07/30/2019 13:34:49", "modifiedby": "api", "surname": "Ripley", "email": "ripley@mail-share.com", "birthday": "03/23/1985", "personalidentificationnumber": 52, "address": "4298 Poco Mas Drive, Dallas", "crecordid": 181, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "181", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 256, "created": "07/30/2019 13:34:49", "createdby": "api", "modified": "07/30/2019 13:34:49", "modifiedby": "api", "surname": "Ripley", "email": "ripley@mail-share.com", "birthday": "03/23/1985", "personalidentificationnumber": 52, "address": "4298 Poco Mas Drive, Dallas", "crecordid": 182, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "182", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 257, "created": "07/30/2019 13:34:56", "createdby": "api", "modified": "07/30/2019 13:34:56", "modifiedby": "api", "surname": "Sutton G.", "email": "sutton.gabriel@a.edu", "birthday": "12/11/2020", "personalidentificationnumber": 111, "address": "5776 Nisi Road, Gorlitz 38197", "crecordid": 183, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [ { "recordId": "131", "USERlicence::productname": "", "USERlicence::key": "VK7JG-NPHTM", "USERlicence::version": "", "USERlicence::dateofexpiration": "", "modId": "0" }, { "recordId": "132", "USERlicence::productname": "", "USERlicence::key": "", "USERlicence::version": "Business OLP", "USERlicence::dateofexpiration": "09/01/2023", "modId": "0" }, { "recordId": "129", "USERlicence::productname": "Adobe Photoshop Elements", "USERlicence::key": "VK7JG-NPHTM-C97JM-9MPGT-3V66T", "USERlicence::version": "2019 MP ENG BOX", "USERlicence::dateofexpiration": "02/08/2024", "modId": "0" }, { "recordId": "130", "USERlicence::productname": "Microsoft Office 365", "USERlicence::key": "KTNPV-KTRK4-3RRR8-39X6W-W44T3", "USERlicence::version": "Business Premium OLP", "USERlicence::dateofexpiration": "06/04/2021", "modId": "0" } ] }, "recordId": "183", "modId": "1", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 4, "returnedCount": 4 } ] }, { "fieldData": { "id": 258, "created": "07/30/2019 14:19:09", "createdby": "api", "modified": "07/30/2019 14:19:09", "modifiedby": "api", "surname": "Load Image Name", "email": "email@email.com", "birthday": "01/01/2001", "personalidentificationnumber": 99, "address": "Street 24, City", "crecordid": 184, "photo": "https://blinky.24u.cz/StreamingSSL/MainDB/6497ED0EB139CA632C284D791FD475FCA622A2395B9BA3647A26316F4678B134.jpg?RCType=EmbeddedRCFileProcessor", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "184", "modId": "1", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 259, "created": "07/31/2019 11:23:27", "createdby": "api", "modified": "07/31/2019 11:23:27", "modifiedby": "api", "surname": "Create Name", "email": "email@email.com", "birthday": "01/01/2001", "personalidentificationnumber": 99, "address": "Street 24, City", "crecordid": 185, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "185", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 260, "created": "08/08/2019 17:52:18", "createdby": "api", "modified": "08/08/2019 17:52:18", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 186, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "186", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 261, "created": "08/08/2019 17:52:56", "createdby": "api", "modified": "08/08/2019 17:52:56", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 187, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "187", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 262, "created": "08/08/2019 21:02:31", "createdby": "api", "modified": "08/08/2019 21:02:31", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 188, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "188", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 263, "created": "09/21/2019 18:35:10", "createdby": "api", "modified": "09/21/2019 18:35:10", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 189, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "189", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 264, "created": "09/21/2019 18:36:53", "createdby": "api", "modified": "09/21/2019 18:36:53", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 190, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "190", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 265, "created": "09/21/2019 18:37:49", "createdby": "api", "modified": "09/21/2019 18:37:49", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 191, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "191", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 266, "created": "09/25/2019 20:50:36", "createdby": "api", "modified": "09/25/2019 20:50:36", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 192, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "192", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 267, "created": "09/25/2019 20:50:46", "createdby": "api", "modified": "09/25/2019 20:50:46", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 193, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "193", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 268, "created": "09/25/2019 20:52:43", "createdby": "api", "modified": "09/25/2019 20:52:43", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 194, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "194", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 269, "created": "09/25/2019 20:52:44", "createdby": "api", "modified": "09/25/2019 20:52:44", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 195, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "195", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 270, "created": "09/25/2019 20:52:46", "createdby": "api", "modified": "09/25/2019 20:52:46", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 196, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "196", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 271, "created": "09/25/2019 20:52:47", "createdby": "api", "modified": "09/25/2019 20:52:47", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 197, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "197", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 272, "created": "09/25/2019 21:25:18", "createdby": "api", "modified": "09/25/2019 21:25:18", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 198, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "198", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 273, "created": "09/25/2019 21:25:45", "createdby": "api", "modified": "09/25/2019 21:25:45", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 199, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "199", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 274, "created": "09/25/2019 22:38:51", "createdby": "api", "modified": "09/25/2019 22:38:51", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 200, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "200", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 275, "created": "09/25/2019 22:38:58", "createdby": "api", "modified": "09/25/2019 22:38:58", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 201, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "201", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 276, "created": "09/25/2019 22:40:58", "createdby": "api", "modified": "09/25/2019 22:40:58", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 202, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "202", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 277, "created": "09/25/2019 22:46:55", "createdby": "api", "modified": "09/25/2019 22:46:55", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 203, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "203", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USERlicence", "foundCount": 0, "returnedCount": 0 } ] }, { "fieldData": { "id": 278, "created": "09/25/2019 22:47:16", "createdby": "api", "modified": "09/25/2019 22:47:16", "modifiedby": "api", "surname": "Lawrence", "email": "lawrence@lectus.ca", "birthday": "03/12/2020", "personalidentificationnumber": 398, "address": "7399 Lobortis Rd., Görlitz 38197", "crecordid": 204, "photo": "", "gone": "", "gtext": "", "": "" }, "portalData": { "portallicence": [] }, "recordId": "204", "modId": "0", "portalDataInfo": [ { "portalObjectName": "portallicence", "database": "fmRESTor", "table": "USER_licence",

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文