标签: dynamics-crm-2011

如何在Microsoft Dynamics CRM 2011中没有ExecutionContext.CallerOrigin的情况下阻止无限循环?

在Microsoft Dynamics CRM 4.0中创建插件时,您可以使用以下内容检查导致插件触发的事件的来源.

public void Execute(IPluginExecutionContext context)
    {
        if (context.CallerOrigin.GetType() == CallerOrigin.WebServiceApi.GetType())
        {
            return;
        }
        plugin code here...
     }
Run Code Online (Sandbox Code Playgroud)

这将允许您检查操作是由表单中的用户,Web服务还是工作流等引起的...

我有一个同步应用程序,它通过WCF创建和更新实体,并且不希望插件在发生这种情况时执行,只有当用户编辑实体时(以防止同步过程中出现无限循环).

IExecutionContext.CallerOrigin已在MS Dynamics CRM 2011中删除,那么新的方法是什么?

我当时认为可能有一种方法可以设置IExecutionContext.CorrelationIdWCF调用,然后检查插件中的特定Guid,但我还没有运气.

c# wcf dynamics-crm infinite-loop dynamics-crm-2011

6
推荐指数
2
解决办法
8968
查看次数

CRM检索实体 - 错误:无法将"Microsoft.Xrm.Sdk.Entity"类型的对象强制转换为"CRMEntities.List"

我从CRM生成实体,如下所示:

CrmSvcUtil.exe /url:http://<servername>/<organizationname>/XRMServices/2011/Organization.svc
    /out:<outputfilename>.cs /username:<username> /password:<password> /domain:<domainname>
    /namespace:CRMEntities /serviceContextName:XrmServiceContext
Run Code Online (Sandbox Code Playgroud)

对于serviceContextName,我设置了XrmServiceContext.我想使用下一个代码从CRM中检索一些实体:

var context = new XrmServiceContext(myorgserv);
var marketingList = context.ListSet.Where(item => item.Id == new Guid("SOME GUID"));
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Message "Unable to cast object of type 'Microsoft.Xrm.Sdk.Entity' to type 'CRMEntities.List'."
Run Code Online (Sandbox Code Playgroud)

在"添加到监视"之后,我看到上下文中的每组实体都有相同的消息.我错过了什么?

c# early-binding dynamics-crm-2011

6
推荐指数
1
解决办法
1万
查看次数

CRM 2011高级查找 - 获取XML - 导入修订后的查找

有没有办法从CRM"高级查找"编辑XML文件,然后将其重新更改?

当我在一个字段类型上插入大量值时,我已经厌倦了使用高级查找(例如,zipcode = 45211),并且想要一种加速过程的方法,而不会将其交给写入它的人. SQL.

所以我的想法是使用"Advance Find"创建查询的开头,然后使用Download Fetch XML导出该查询,然后修改XML文件,(不确定如何或是否可以完成下一部分>>)然后导入该XML将文件重新导入CRM以用于我的新查询或替换相关的XML文件,无论它位于何处.

对XML的示例更改:

    <filter type="or">
        <condition attribute="address1_postalcode" operator="like" value="45211%" />
        <condition attribute="address1_postalcode" operator="like" value="45213%" />
        <condition attribute="address1_postalcode" operator="like" value="45219%" />
        etc…
    </filter>
Run Code Online (Sandbox Code Playgroud)

xml dynamics-crm-2011

6
推荐指数
1
解决办法
5035
查看次数

如何在CRM Dynamics中使用别名属性时从fetchedXML访问值?

我正在提取营销列表清单.正如我这样做,根据我使用intellisense的检查,这似乎是一次成功的操作.当我寻找时,...Entities[0].Attributes["nick"]我得到一个对象(在其中的某个地方有正确的数据).但是我不能以编程方式访问它(相反,我必须像猴子一样点击,通过优点来折叠好东西).

事实上,我得到的实体应该使用下面的代码.问题是它们不Strings符合计算机.它们属于类型Microsoft.Xrm.Sdk.AliasedValue,我不知道如何访问其中的实际缺口.

new Contact
{
  Name = element.Attributes["nick"] as String,
  Mail = element.Attributes["mail"] as String
}
Run Code Online (Sandbox Code Playgroud)

Intellisense说Value它就在那里(而且它也是正确的值)但是我无法通过输入来访问它.Value.我怀疑我需要使用"as"或类似的东西,但此刻我被卡住了.任何提示?AsString应该起作用,它给了我null......

我已经读过这篇文章以及其他几个喜欢它和我看到它的方式,我应该能够访问那里所有有趣的东西.我不能......

我注意到下面的代码得到我的数据,我这么拼命试图让,但这个不能成为一个专业的语法,可以吗?!说真的,它看起来像一个患有多动症和宿醉的高中生试图这样做......

new Contact
{
  Name = ((Microsoft.Xrm.Sdk.AliasedValue)result.Entities[0].Attributes["nick"]).Value,
  Mail = ((Microsoft.Xrm.Sdk.AliasedValue)result.Entities[0].Attributes["mail"]).Value
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,认真 - 这是一段丑陋的代码......必须有一个更好的方法!但是,我担心没有,因为这个讨论似乎也在使用这种语法......

c# dynamics-crm dynamics-crm-2011

6
推荐指数
1
解决办法
7889
查看次数

代表Dynamics CRM 2011中的大量数字

我试图在Dynamics CRM 2011中表示大于100,000,000,000(Decimal数据类型的最大值)的数字.看起来这样做的唯一方法是使用Currency字段或使用文本字段.这些选项都不是很吸引人.

在Dynamics CRM中表示大数字的最佳方法是什么?

dynamics-crm dynamics-crm-2011

6
推荐指数
1
解决办法
1089
查看次数

用于登录Dynamics CRM插件的生产的策略

CRM 2011在前提下.

我有一个用C#编写的插件.它可能会抛出异常或在生产中表现不佳.

当发生这种情况时,我想捕获有关状态和最近代码执行的信息,以帮助我分析问题.

理想情况下,我想要以下内容:

  1. 如果代码决定我应该知道一个问题,那么我希望它能够告诉我尽快出现问题,而我没有看到问题是否已经发生.

  2. 我希望能够轻松获取有关该问题的信息.我不想让RDP到另一台机器并搜索文件.

  3. 我不希望日志记录对性能产生太大影响.

我想我正在寻找这样的东西:

  • 在内存中保留最后n行日志.
  • 单个函数调用以向日志添加一行.
  • 单个函数调用导致记录错误.
  • 如果出现错误,请发邮件给我说有问题.这包含摘要信息.
  • 该电子邮件包含指向网页的链接,向我显示完整的错误详细信息.堆栈跟踪,错误消息,日期,时间,用户等,最后n行日志.
  • 如果还有一个网页显示我所有错误,过滤,排序等等,那就太好了.

我对CRM很新,但我以前开发过这样的系统.由于CRM已经存在多年,我希望它可以用于它.

dynamics-crm dynamics-crm-2011

6
推荐指数
1
解决办法
3653
查看次数

从插件中调用ExecuteMultipleRequest是否有益?

我知道从CRM外部执行批量更新时,ExecuteMultipleRequest是一个巨大的性能助推器.我不知道的是从CRM插件中调用它是否有益.

我目前的理解是,使用ExecuteMultipleRequest获得的主要性能是实际的SOAP消息传递成本.因此(用于更新5000条记录)而不是发送5000条单独的Soap消息(每条消息必须被序列化,验证,传输等),所有这些都必须发送到服务器,您只能发送一条包含5000条记录的消息.但是当从插件调用时,您已经在服务器上,因此不必进行SOAP调用,因此使用它没有任何好处.

我还没有看到其他一些潜在的好处吗?

dynamics-crm-2011 dynamics-crm-2013 dynamics-crm-2015

6
推荐指数
1
解决办法
1658
查看次数

在哪个表中存储MS CRM系统视图?

我正在寻找包含MS Dynamics CRM系统视图或保存的高级查找视图的条件记录的表.每个保存的视图(系统视图或自定义视图)都有一些用于过滤结果的条件.我想在数据库中找到包含此条件的表作为记录.

sql-server dynamics-crm-2011

6
推荐指数
1
解决办法
8861
查看次数

当字段已由 JavaScript 设置时,CRM 2011 onChange 事件处理程序不会触发

我正在向 CRM 2011 表单添加一些 JavaScript,但我看到了我不明白的行为。(我已经从根本上简化了这个例子来解决问题的核心。)

我有一个名为“new_myfield”的字段,它是单选按钮,我正在触发一个 JavaScript 函数 OnChange 将其设置为 false。如果我使用以下脚本,一切正常,我可以一次又一次地运行脚本,并且每次将字段设置回 false:

var myField = Xrm.Page.getAttribute("new_myfield");
myField.setValue(false);
Run Code Online (Sandbox Code Playgroud)

当然,实际发生的情况是脚本触发了两次,因为当该字段设置为 false 时,这将再次触发脚本,而脚本又将其设置为 false。我已经通过在脚本中放置警报来验证这一点。

但实际上我只想在用户将该字段设置为“true”时运行此脚本,因此我将其更改为:

var myField = Xrm.Page.getAttribute("new_myfield");
if (myField.getValue() == true) {
    myField.setValue(false);
}
Run Code Online (Sandbox Code Playgroud)

该脚本按预期运行一次并将字段设置为“false”,但是下次我手动将单选按钮设置为“true”时,脚本不会运行。它甚至不火。就像 onchange 事件处理程序没有识别出任何事情发生一样。只有当我手动将按钮设置回“false”时,脚本才能按预期再次运行。

就好像脚本需要运行两次(如第一个示例中所示)才能使其工作。

有人知道为什么会这样吗?

javascript onchange event-handling dynamics-crm-2011

6
推荐指数
1
解决办法
1651
查看次数

如何将过滤器选项从ODataQueryOptions映射到RestRequest

我需要能够从ODataQueryOptions转换为RestRequest,以便能够使用指定的过滤器发出RestRequest,并创建了以下帮助程序类:

public static class ODataQueryFilterToRestClient
{
    public static RestRequest Map(ODataQueryOptions odataQuery)
    {
        var restRequest = new RestRequest();

        if (odataQuery.Filter != null)
        {
            restRequest.AddQueryParameter(@"$filter", odataQuery.Filter.RawValue);
        }

        if (odataQuery.Top != null)
        {
            restRequest.AddQueryParameter(@"$top", odataQuery.Top.RawValue);
        }

        if (odataQuery.Skip != null)
        {
            restRequest.AddQueryParameter(@"$skip", odataQuery.Skip.RawValue);
        }

        if (odataQuery.OrderBy != null)
        {
            restRequest.AddQueryParameter(@"$orderby", odataQuery.OrderBy.RawValue);
        }
        //etc
        return restRequest;
    }
}
Run Code Online (Sandbox Code Playgroud)

鉴于OdataQueryOptions支持以下内容:

在此输入图像描述

有没有更简单的方法在ODataQueryOptions与RestClient或其他其他客户端代理之间进行转换?

另外,我不知道是否有更好的方法通过控制器接受参数而不是ODataQueryOptions?

c# dynamics-crm odata dynamics-crm-2011 dynamics-crm-2016

6
推荐指数
1
解决办法
845
查看次数