如何从Dynamics 365中按ID提取> 130个实体的列表?

时间:2019-08-14 17:03:56

标签: soap dynamics-crm dynamics-crm-webapi

我有一个需要从Dynamics提取到我的应用程序中的实体ID的列表。使用WebAPI时,查询必须经过URL编码,并作为GET请求传递,该请求将实体数限制为大约130(超出了URL长度限制)

以前,我们可以使用SOAP端点发出单个POST请求,但这是在不赞成使用的路径上。

那么现在进行此类查询的推荐方法是什么?

一些选项:

  • 手动分页并运行WebAPI发出并行请求。这不是理想的,尤其是在围绕Dynamics进行抽象时,因为请求可能会失败。

更新

由于@Guido Preite,我能够使用WebAPI batch request。我将在下面发布对邮递员的请求...

发布到class JSLDocumentSymbolProvider implements vscode.DocumentSymbolProvider { public provideDocumentSymbols(document: vscode.TextDocument, token: vscode.CancellationToken): Thenable<vscode.DocumentSymbol[]> { return new Promise((resolve, reject) => { var symbols: vscode.DocumentSymbol[] = []; var depth = 0; for (var i = 0; i < document.lineCount; i++) { var line = document.lineAt(i); var txt = line.text; var ltxt = txt.toLowerCase(); let open_brackets = ltxt.match(/\(/g) || []; let close_brackets = ltxt.match(/\)/g) || []; // console.log(ltxt) // console.log(open_brackets, close_brackets) //console.log(i, open_brackets.length, close_brackets.length) depth += open_brackets.length - close_brackets.length; //console.log(depth); if (ltxt.includes("define class(")) { let sname = txt.trim().substr(14, txt.trim().length - 16); //this is hard coded right now but it's kind of working let detail = "ARGS:x, y returns z"; let start_pos = new vscode.Position(i, 0); let n_bracket = 1; let i_char = 0; //let children: vscode.DocumentSymbol[] = [] let ds = new vscode.DocumentSymbol(sname, detail, vscode.SymbolKind.Class, line.range, line.range); for(var i_line = i; n_bracket > 0; i_line++){ let class_line = document.lineAt(i_line); let mtxt = class_line.text; let ic; if(i == i_line) ic = 16; else ic = 0; for(i_char = ic; i_char < mtxt.length; i_char++){ if(mtxt[i_char] === "(") n_bracket++; else if(mtxt[i_char] === ")") n_bracket--; if(n_bracket === 0) break } if (/(\w[\w\d\s]*)=\s*method\({((?:\s*(?:\w[\w\d\s]*)(?:=[^,]*)?,?\s*)*)},/i.test(mtxt)) { let result = mtxt.match(/(\w[\w\d\s]*)=\s*method\({((?:\s*(?:\w[\w\d\s]*)(?:=[^,]*)?,?\s*)*)},/i)!; let mname = result[1].trim(); let m_details = "" if(result.length == 3){ m_details = result[2].trim(); } ds.children.push(new vscode.DocumentSymbol(mname, m_details, vscode.SymbolKind.Method, class_line.range, class_line.range)); } if(n_bracket === 0) break } let end_pos = new vscode.Position(i_line, i_char); let rng = new vscode.Range(start_pos, end_pos); ds.range = rng; //ds.children = children; symbols.push(ds); } else if (/(\w[\w\d\s]*)=\s*function\({((?:\s*(?:\w[\w\d\s]*)(?:=[^,]*)?,?\s*)*)},/.test(ltxt)) { let result = txt.match(/(\w[\w\d\s]*)=\s*function\({((?:\s*(?:\w[\w\d\s]*)(?:=[^,]*)?,?\s*)*)},/i)!; let sname = result[1].trim(); let detail = ""; if(result.length == 3){ detail = "(" + result[2].trim() + ")"; } symbols.push(new vscode.DocumentSymbol(sname, detail, vscode.SymbolKind.Function, line.range, line.range)); } } resolve(symbols); }); }

标题

{{myDynamicsURL}}/api/data/v9.0/$batch

身体

Authorization:Bearer {{token}}
Content-Type:multipart/mixed;boundary=batch_AAA123 
Accept:application/json
Cache-Control:no-cache
OData-MaxVersion:4.0
OData-Version:4.0
Prefer:odata.maxpagesize=500, odata.include-annotations="*", return=representation

1 个答案:

答案 0 :(得分:2)

您可以使用在POST请求中传递的FetchXML进行查询

https://dreamingincrm.com/2017/01/15/executing-large-fetchxml-with-webapi/