我正在使用SDK for CRM,并在我们的一个实体的一堆实例上打印出PK.我用数据库的过滤视图重复了它,得到了相同的答案:
1a6c691d-391a-de11-8b0e-0050568407cb
bd7b0ff0-391a-de11-8b0e-0050568407cb
ed272bfe-391a-de11-8b0e-0050568407cb
... and so on ...
这些似乎不是有效的GUID.首先,他们看错了 - 它们几乎完全相同,这是自从旧版本1和2 GUID基于MAC地址和时钟时间以来GUID没有的属性.而且,事实上GUID中的某个半字节表示GUID的版本 - 这里的半字节不正确.(第三部分的第一个半字节,即:1a6c691d-391a - **d**e11-8b0e-0050568407cb) - 有效值为1-5)(使用MS的GUID生成器生成GUID - 该插槽始终为4.(至少对于我的版本.))
这些GUID,还是ID,我怎么知道?
有没有人完成了MS CRM 4.0和SharePoint集成.任何指针?我是CRM和SharePoint的新手.
经过一番研究,我想改进我的问题.我基本上想要使用IFRAME添加一个SharePoint选项卡,该选项卡将显示我创建的SharePoint页面.有关如何做到这一点的任何提示?
另外,我如何访问SharePoint中的CRM数据字段.即如果我在SharePoint中添加文件,我希望它拥有CRM属性页面中的所有元数据.
在Dynamics CRM中,我经常从业务用户那里获得创建报告的要求.业务用户了解并谈论实体显示名称和属性标签.要编写查询,我需要将它们映射到实体名称和属性名称.我想用一个查询来查看.
我将如何加入dbo.LocalizedLabelView视图以获取以下查询中的AttributeLabel列?我无法弄清楚ObjectId应该引用什么.(如果你能告诉我你是如何找到答案我会特别感激的!)
select
[EntityName] = entityNames.Name,
[EntityDisplayName] = entityDisplayNames.Label,
[AttributeName] = attributeNames.PhysicalName,
[AttributeDisplayName] = attributeDisplayNames.Label
--[AttributeLabel] = attributeLabels.Label
from
dbo.EntityView entityNames
inner join dbo.LocalizedLabelView entityDisplayNames
on entityDisplayNames.ObjectId = entityNames.EntityId
and entityDisplayNames.ObjectColumnName = 'LocalizedName'
left outer join dbo.AttributeView attributeNames
on attributeNames.EntityID = entityNames.EntityID
inner join dbo.LocalizedLabelView attributeDisplayNames
on attributeDisplayNames.ObjectId = attributeNames.AttributeID
and attributeDisplayNames.ObjectColumnName = 'DisplayName'
and attributeDisplayNames.LanguageID = entityDisplayNames.LanguageID
--inner join dbo.LocalizedLabelView attributeLabels
-- on attributeLabels.ObjectId = ?????
-- and attributeLabels.LanguageID = …Run Code Online (Sandbox Code Playgroud) 我应该从一开始就添加 - 这是在Microsoft Dynamics CRM 2011中
我很了解CRM,但我无法解释当前部署的行为.
请阅读我的场景概要,以帮助我理解我的哪些假设/理解是错误的(因此导致此错误的原因).这与我的期望不符.
此工作流作业已取消,因为启动它的工作流包含无限循环.更正工作流逻辑,然后重试.有关工作流逻辑的信息,请参阅帮助.
首先,我认为在这种情况下忽略插件代码的内容是非常安全的.它工作正常,它是原子的,几乎不接触CRM(很明显,它是一个运行远程Web服务的事件前插件,等待响应,然后在我的Trigger记录上设置"完成日期"日期/时间属性,然后通过目标实体回到管道中).只要创建了一个Trigger记录,该代码就会运行并执行它应有的操作.
打了插件的内容后,可能会有一个问题,我不喜欢在实体的预创建步骤中注册插件...
这就离开了工作流程本身.这是一个简单的.它如此运行:
通过这种设置,我手动创建一个新的Trigger记录,并且该过程很好地实现了动作.向前滚动1小时58分钟(基于我运行的最后一个循环 - 记住我的插件代码可能需要一分钟才能完成运行),经过7个成功的执行周期(即创建并完成新的工作流程作业)后,第8个失败了上述错误.
默认情况下,递归深度设置为8.如果工作流/插件自身调用8次,则会检测到无限循环.
递归深度每隔一小时重置一次(或10分钟 - 请参阅链接博客中的"警告"?)
可以在内部部署中使用部署Web服务 通过PowerShell或SDK代码设置递归深度设置(通过Set-CrmSetting Cmdlet)
"更改递归深度设置"
我无法更改部署递归深度设置,因为这不是在线方案中的选项 - 最终我也将部署到CRM Online.
" 延长工作流程的超时时间 "
这也不是一个选项 - 重新索引需要每15分钟发生一次,理想情况下更快.
@Boone在下面建议递归深度超时在60分钟不活动后重置,而不是每60分钟重置一次.这是第一个误解.
在与@alex讨论时,我建议在通过工作流创建实体和产生最终产生的工作流之间可能存在一些持久性的CorrelationId ......好吧.插件和工作流中的CorrelationId相同,并且该线程的任何记录都是相同的.我现在正在研究如何从实体和工作流中分离CorrelationId(或者可能是创建记录).
我自己进入了服务器,我已经检索了(希望)正确的数据集.然后,我尝试通过以下代码列出所有公司.
EntityCollection result = proxy.RetrieveMultiple(expression);
foreach (var entity in result.Entities)
{
String output = String.Empty;
if (entity.Attributes.Contains("account"))
output = entity.Attributes["account"].ToString();
}
Run Code Online (Sandbox Code Playgroud)
但是,运行一个遍历所有可用属性的内部循环会很不错result.Entities.我应该使用entity.Attributes.Keys还是有更好的方法?
我正在尝试执行此查询以检索特定实体类型的审核项目
public List<Audit> GetAuditChangesSince(DateTime since, string entityType)
{
return (from a in OrgContext.CreateQuery<Audit>()
where
a.ObjectId != null && a.ObjectId.LogicalName == entityType &&
a.CreatedOn > since
select a).ToList();
}
Run Code Online (Sandbox Code Playgroud)
该a.ObjectId!= NULL && a.ObjectId.LogicalName ==的EntityType &&条款导致的问题.我知道.Equals()可能会导致问题(因此==)并且LINQ提供程序存在以下限制:
子句的左侧必须是属性名称,子句的右侧必须是值
左侧是属性,右侧是常量.是.ObjectId.LogicalName导致问题吗?
上下文
我想针对CRM 2016 CodeActivity和Plugin类将使用的类编写一些单元测试.最终的程序集将以沙箱隔离模式注册.
我想确定在运行单元测试时测试用例是否为绿色,在CRM中注册和运行时,沙箱隔离安全限制不会受到更多限制.
题
有没有办法在运行单元测试时模拟沙箱隔离?
我正在使用WatiN(.Net中的Web应用程序测试)在Dynamics CRM 4.0网站上进行集成测试.CRM使用大量弹出窗口 - 例如,单击列表中的联系人会打开一个带有联系人详细信息的新浏览器窗口.
我想测试一下:
所以我需要抓住弹出的窗口.怎么样?
谢谢.
我正在使用FetchXml来查询CRM 4.0.我们有一个特殊情况需要在CRM entites之间进行复合连接.所述FetchXml模式表示的多个链路实体元件是允许的,并且它也表明,多个过滤器/条件的元素可以被添加到链路的实体.我面临的问题是条件元素的value属性似乎不允许实体/列名称.它期望明确声明的值.
例如,FetchXml允许您指定:
<link-entity name='myentity' from='column1' to='column2'/>
Run Code Online (Sandbox Code Playgroud)
...这与T-SQL相当:
JOIN myentity on column1 = column2
Run Code Online (Sandbox Code Playgroud)
它可以让你指定:
<link-entity name='myentity' from='column1' to='column2'>
<filter type='and'>
<condition attribute='column3' operator='eq' value='myvalue' />
</filter>
</link>
Run Code Online (Sandbox Code Playgroud)
...这是T-SQL的等价物:
JOIN myentity on column1 = column2 AND column3 = 'myvalue'
Run Code Online (Sandbox Code Playgroud)
但是,FetchXml不会出现以下内容:
JOIN myentity on column1 = column2 AND column3 = column4
Run Code Online (Sandbox Code Playgroud)
注意区别.FetchXml提供了连接中的条件,但它似乎提供了复合连接,即跨多个列的连接.
有没有人在网络空间中能够使用CRM 4.0中的FetchXml执行复合连接?谢谢!
更多信息:
我正在寻找一个使用FetchXml来完成此任务的答案 - 而不是SQL或QueryExpression语法.上面的SQL只是为了解释这个概念.
我有一个名为new_trexmail的实体,其中包含一个名为new_contextline的字符串属性.
我正在尝试获取一个实体列表,其中new_contextlineis在定义的列表中.
以下代码失败并显示错误: NotSupportedException: Invalid 'where' condition. An entity member is invoking an invalid property or method.
string[] test = new[]{"aaa", "hhh"};
var query = from n in New_trexmailSet
where test.Contains(n.New_contextline)
select n;
Run Code Online (Sandbox Code Playgroud)
我理解为什么会抛出这个错误,但我想知道是否可以使用XRM进行IN子句的等效.
如果可能的话,我该如何让XRM执行SELECT * FROM new_trexmail WHERE new_contextline in ('aaa', 'hhh')?
谢谢,
大卫
dynamics-crm ×10
crm ×3
linq ×2
c# ×1
fetchxml ×1
guid ×1
label ×1
reporting ×1
sharepoint ×1
sql ×1
unit-testing ×1
watin ×1