我正在努力寻找一种方法来使用ExecuteMultipleRequest来创建记录并同时将其与其他记录相关联.到目前为止,我只是成功地首先创建了记录,然后在另一个请求中建立了我的关联.
使用此代码,它会抛出一个异常,它需要一个目标(需要先提交以创建记录并获取ID)
private AssociateRequest GetConfigurationRequest(VariableDataRequestModel receivedRequest)
{
var configurationRelationship = new Relationship(ConfigurationRelationshipName);
var configurationEntities = new EntityReferenceCollection(new EntityReference[]{new EntityReference(ConfigurationEntityLogicalName,new Guid(receivedRequest.ConfigurationId))});
var rtn = new AssociateRequest() { RelatedEntities = configurationEntities, Relationship = configurationRelationship };
return rtn;
}
Run Code Online (Sandbox Code Playgroud) Microsoft CRM高级开发人员扩展程序让我对他们对CRM的Web服务调用的早期绑定有点不满.
我正在写一个插件,我想访问前映像中定义的属性.所有示例都将preimage转换为Microsoft.Xrm.Sdk.Entity,它使用后期绑定来访问它的属性.我不喜欢将属性名称的所有字符串硬编码到我的插件中,并希望找到一种通过使用早期绑定来避免它的方法.
这是一个演员的例子
var preMessageImage = (Microsoft.Xrm.Sdk.Entity)context.PreEntityImages["MyPreImage"];
Run Code Online (Sandbox Code Playgroud)
但我必须使用后期绑定来访问属性
var myProperty = preMessageImate.Properties["MyProperty"];
Run Code Online (Sandbox Code Playgroud)
有没有办法将这个preimage转换为具有使用早期绑定定义的所有属性的xrm对象,所以我不必硬编码所有的属性名称?
我正在开发一个项目,在这个项目中我需要进行多个JSON调用.一旦我退出该循环,我需要处理我所做的所有调用的结果.我很难理解如何按照我的操作顺序来完成这些调用.在完成对服务的调用之前,始终执行处理结果的代码.我创建了一个jsfiddle来演示并在此处包含代码.
var sourceData = { "fooIndex": "foo",
"barIndex": "bar"
}
var destinationData = {};
for (var sourceIndex in sourceData) {
$.getJSON('http://echo.jsontest.com/' + sourceIndex + '/' + sourceData[sourceIndex] + '?callback=?', null, function (result) {
for (var resultIndex in result) {
alert("Adding " + resultIndex + " : " + result[resultIndex]);
destinationData[resultIndex] = result[resultIndex];
}
});
}
if (Object.keys(destinationData).length == 0) {
alert("Destination not yet populated");
}
else {
alert("Eureka! You did it!");
}
Run Code Online (Sandbox Code Playgroud) 我在CRM 2011表单上有一个HTML Web资源,用户将输入数据.如果用户选择保存主表单,则CRM创建/更新插件将需要此数据,但没有功能要求需要将数据保存到实体上的任何字段.我正在考虑一个可以保存数据的隐藏虚拟字段,但我想知道是否有更优雅的东西来保存从客户端到服务器技术的数据.我已经对"共享变量"进行了一些研究,但还无法确定它们是否满足这种需求.使用JavaScript设置值然后从插件中检索它的任何示例都是有价值的.
编辑:我只是想根据我的测试澄清我收到的回复.虽然CRM具有可用于插件和脚本的"SharedVariables",但是脚本中保存的任何数据都不可用于插件.由一个javascript函数保存到"SharedVariables"的数据将可用于为同一事件注册的其他javascript函数,并且插件保存的数据可用于为同一事件注册的其他插件,但数据不会从脚本持久保存到插件或反之亦然.这会将虚拟字段作为将数据从javascript持久保存到插件的唯一选项.正如NickNow建议的那样,除非你需要将数据保存到数据库,否则在预插件上删除它将是一个好主意.谢谢Nicknow!
我正在设计一个.net核心Web API,它使用了我无法控制的外部API。我在堆栈溢出中找到了一些极好的答案,这些问题使我可以在使用semaphoreslim的同一线程中限制对此外部API的请求。我想知道如何最好地将这种限制扩展到整个应用程序,而不仅仅是限制特定任务列表。我一直在学习HttpMessageHandlers,这似乎是拦截所有传出消息并应用限制的一种可能方法。但是我担心线程安全性和锁定问题,我可能不了解。我包括了当前的限制代码,希望对理解我正在尝试做的事情有所帮助,但是要跨越多个线程,并且不断添加任务而不是预先定义的任务列表。
private static async Task<List<iMISPagedResultResponse>> GetAsyncThrottled(List<int> pages, int throttle, IiMISClient client, string url, int limit)
{
var rtn = new List<PagedResultResponse>();
var allTasks = new List<Task>();
var throttler = new SemaphoreSlim(initialCount: throttle);
foreach (var page in pages)
{
await throttler.WaitAsync();
allTasks.Add(
Task.Run(async () =>
{
try
{
var result = await GetPagedResult(client, url, page);
return result;
}
finally
{
throttler.Release();
}
}));
}
await Task.WhenAll(allTasks);
foreach (var task in allTasks)
{
var result = ((Task<PagedResultResponse>)task).Result;
rtn.Add(result);
}
return rtn; …Run Code Online (Sandbox Code Playgroud)