UNPKG

more-xrm

Version:

Create more applications using the Microsoft Dynamics Xrm platform, enables querying the dynamics data model from any application.

87 lines (86 loc) 3.32 kB
import { GetRootQuery } from "../Query/Query"; import GetQueryXml from "../Query/QueryXml"; import { DynamicsHeaders, WebApiVersion } from "./Dynamics"; export function dynamicsQuery(query, maxRowCount, headers) { const dataQuery = GetRootQuery(query); if (!dataQuery.EntityPath) { throw new Error('dynamicsQuery requires a Query object with an EntityPath'); } return dynamicsQueryUrl(`/api/data/${WebApiVersion}/${dataQuery.EntityPath}`, query, maxRowCount, headers); } export function dynamicsQueryUrl(dynamicsEntitySetUrl, query, maxRowCount, headers) { const querySeparator = (dynamicsEntitySetUrl.indexOf('?') > -1 ? '&' : '?'); return request(`${dynamicsEntitySetUrl}${querySeparator}fetchXml=${escape(GetQueryXml(query, maxRowCount))}`, 'GET', undefined, headers); } export function dynamicsRequest(dynamicsEntitySetUrl, headers) { return request(dynamicsEntitySetUrl, 'GET', undefined, headers); } export function dynamicsSave(entitySetName, data, id, headers) { if (id) { return request(`/api/data/${WebApiVersion}/${entitySetName}(${trimId(id)})`, 'PATCH', data, headers); } else { return request(`/api/data/${WebApiVersion}/${entitySetName}()`, 'POST', data, headers); } } export function formatDynamicsResponse(data) { var items = []; if (data && data.error) { throw new Error(data.error); } if (data && data.value) { data = data.value; } if (!Array.isArray(data)) { return formatDynamicsResponse([data])[0]; } if (data) { for (var item of data) { var row = {}; for (var key in item) { var name = key; if (name.indexOf('@odata') == 0) { continue; } if (name.indexOf('transactioncurrencyid') > -1) { continue; } if (name.indexOf('@') > -1) { name = name.substring(0, name.indexOf('@')); if (name.indexOf('_') == 0) { name = name.slice(1, -6); } name += "_formatted"; } else if (name.indexOf('_') == 0) { name = name.slice(1, -6); } if (name.indexOf('_x002e_') > -1) { var obj = name.substring(0, name.indexOf('_x002e_')); name = name.substring(name.indexOf('_x002e_') + 7); if (!row[obj]) { row[obj] = {}; } row[obj][name] = item[key]; } else { row[name] = item[key]; } } items.push(row); } } return items; } function request(url, method, body, headers) { return fetch(url, { method: method, headers: Object.assign({ 'Content-Type': 'application/json; charset=utf-8' }, DynamicsHeaders, headers), body: body }) .then(response => response.json()) .then(data => formatDynamicsResponse(data)); } function trimId(id) { return (id || '').replace(/{|}/g, ''); }