我参与开发沙盒式Microsoft Dynamics CRM 2011 Online插件并拥有一组测试,我可以从本地计算机上的xUnit前端驱动,因为我右键单击Package并选择Deploy选项(并求助于当不起作用时使用插件加载器示例).
我希望能够在我的CI装备上自动运行我的测试,我需要它在每次运行时上传一个新的二进制文件.
我们已经看过http://pluginregcrm2011.codeplex.com/,但它有阻止它在网上工作的错误,简而言之,它不再被维护,我不想热衷于拥有应该是什么平台/生态系统应该拥有的工具.
是否有人以非交互方式使用该工具或其他插件上传器?我错过了什么吗?
continuous-integration acceptance-testing dynamics-crm dynamics-crm-2011 dynamics-crm-online
我正在进行一些CRM 2011在线定制,我需要使用javascript获取实体.
我需要的实体将基于另一个字段(联系人实体)的ID值 - 这个联系人ID我可以很好.
我想要的实体是一个自定义实体.根据联系人ID可能有多个匹配项,所以我只想获取列表中的第一个匹配项(顺序并不重要)
到目前为止,我已经研究了几种方法来做到这一点......
OData - 关于我可以创建哪些查询表达式,我找不到足够的示例,我也不知道是否/如何使这个工作适用于自定义实体
FetchXML - 我也可以使用内置的"高级查找"创建一个很好的FetchXML查询,如果有人可以提供帮助,我很乐意通过javascript调用它吗?我在这里找到了一个有希望的答案,但我看不出"结果"如何设置返回数据(Service.Fetch函数)
SOAP请求 - 我尝试的第一件事是我在CRM 4中可以做的类似方法,但这似乎不起作用.虽然请求执行,但我的结果数据似乎是空的.这就是我所有的代码所以,如果任何人可以发现下面的代码的问题,那将是伟大的.
编辑:我发现了一些冗余的查询数据(我已经删除了链接开始标记,但留下了结束标记) - 因为删除这个我现在获取XML结果数据...但是,where子句似乎不适用(只需获取所有列表)实体)
var xml = "<?xml version='1.0' encoding='utf-8'?>" +
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
GenerateAuthenticationHeader() +
"<soap:Body>" +
"<RetrieveMultiple xmlns=\"http://schemas.microsoft.com/crm/2007/WebServices\">" +
"<query xmlns:q1=\"http://schemas.microsoft.com/crm/2006/Query\" xsi:type=\"q1:QueryExpression\">" +
"<q1:EntityName>new_vehicle</q1:EntityName>" +
"<q1:ColumnSet xsi:type='q1:ColumnSet'>" +
"<q1:Attributes>" +
"<q1:Attribute>new_vehicleid</q1:Attribute>" +
"<q1:Attribute>new_primarydriver</q1:Attribute>" +
"<q1:Attribute>statuscode</q1:Attribute>" +
"<q1:Attribute>new_registration</q1:Attribute>" +
"</q1:Attributes>" +
"</q1:ColumnSet>" +
"<q1:Distinct>false</q1:Distinct>" +
"<q1:Conditions>" +
"<q1:Condition>" +
"<q1:AttributeName>new_primarydriver</q1:AttributeName>" +
"<q1:Operator>Equal</q1:Operator>" +
"<q1:Values>" +
"<q1:Value …Run Code Online (Sandbox Code Playgroud) json dynamics-crm odata dynamics-crm-2011 dynamics-crm-online
在Dynamics 365 9.0中,关于如何访问表单属性和控件(而不是Xrm.Page命名空间)有很大的变化,我们应该传递executionContext给函数并formContext使用getFormContext()函数.这工作正常,我使用这种方法从来没有问题.
但是我还没想出如何正确访问formContext从Ribbon调用的函数.文档说这应该是非常简单的:
function myFunction(executionContext) {
var formContext = executionContext.getFormContext();
var focusFieldValue = formContext.ui.controls.get(PrimaryControlId).getAttribute().getValue();
}
Run Code Online (Sandbox Code Playgroud)
但它没有说如何传递executionContext给Ribbon功能.在普通函数中有一个复选框"将执行上下文作为第一个参数"但是功能区呢?我们可以将这些参数传递给这些函数,但它们只是所选记录的GUID,或所选记录的类型,甚至是对象列表,但如果参数等于,我在文档中找不到executionContext.有人已经解决了这个问题吗?
另外我知道我可以使用Xrm.Page并且它可以工作(至少现在......)但是我想知道如何使用版本9.0中的最新指南来完成它
更新1:
根据Scott的建议和本文,我将PrimaryControl传递给我的Ribbon命令但不幸的是,参数是类型的Mscrm.FormControlLite,它没有getAttribute函数或任何允许访问formContext的函数(至少我没有看到任何有用的东西).Developer工具的一些截图:

因此它看起来像某种形式的表单,但可能与formContext无关(我假设如果从记录列表中调用Ribbon,则此项可以是网格类型或类似的东西)
我需要在实体上单击功能区按钮执行一些代码,该实体可以从CRM Online 2011更新一些相关数据.我宁愿不必在JScript中编写所有这些逻辑.有没有办法从JScript调用C#代码?我查看了Microsoft在功能区中使用的JScript文件,它看起来像这样:
Mscrm.Campaign.copyCampaign = function (campaignId, saveAsTemplate) {
var $v_0 = new RemoteCommand("MarketingAutomation", "CopyCampaign", null);
$v_0.SetParameter("campaignId", campaignId);
$v_0.SetParameter("saveAsTemplate", saveAsTemplate.toString());
var $v_1 = $v_0.Execute(),
$v_2 = $v_1.ReturnValue;
openObj(Mscrm.EntityTypeCode.Campaign, $v_2, null, null, Mscrm.NavigationMode.NavigationModeInline, null);
Mscrm.Utilities.refreshParentGrid(Mscrm.EntityTypeCode.Campaign, campaignId)
};
Run Code Online (Sandbox Code Playgroud)
我看到正在放置一个RemoteCommand调用,我假设它正在回到一些Web服务功能.我希望能做到这样的事情.我可以添加自己的Web服务功能吗?
我能够从JScript调用为实体发送"分配"消息,就像测试一样.这可能适用于插件,但为执行事件发送消息似乎很奇怪,实际上并不只是为了运行一些C#代码("分配","更新"等)而且我不喜欢看到创建自己的消息的方法.
javascript c# dynamics-crm dynamics-crm-2011 dynamics-crm-online
我正在开发一个Windows应用商店应用程序,它使用Azure Active Directory进行身份验证,与Dynamics CRM Online进行通信.
该应用程序使用此CRM 2013 SDK示例: SampleCode\CS\ModernAndMobileApps\ModernSoapApp
并引用此nuget包进行身份验证:
Microsoft.Preview.WindowsAzure.ActiveDirectory.Authentication
我能够正确验证,主线是这样的:
AuthenticationResult result = await _authenticationContext.AcquireTokenAsync("Microsoft.CRM", ClientID, redirectUrl, string.Empty, string.Empty);
Run Code Online (Sandbox Code Playgroud)
问题是我需要添加一个注销功能,我无法摆脱持久性令牌.
我尝试使用以下行注销:
(AuthenticationContext.TokenCache as DefaultTokenCache).Clear();
Run Code Online (Sandbox Code Playgroud)
但是当我再次调用AcquireTokenAsync方法而不是显示用于输入凭据的页面时,应用程序能够自己获得有效的令牌.
执行完全注销时我缺少什么?
authentication azure dynamics-crm-online dynamics-crm-2013 azure-active-directory
从版本5.0.13开始,CRM 2011 SDK中没有插件注册工具的源代码(可执行文件位于bin文件夹中)
由于Microsoft仅托管最新版本,因此源代码不再可用.
有人有下载SDK 5.0.12的链接吗?
我在StackOverflow上问了这个问题,因为该源代码是CRM 2011平台可用的一些消息的一个很好的例子.
我从我的控制台应用程序查询MS Dynamics CRM Online:
public EntityCollection GetEntities(string entityName)
{
IOrganizationService proxy = ServerConnection.GetOrganizationProxy();
string request = string.Format("<fetch mapping ='logical'><entity name = '{0}'></entity></fetch>", entityName);
FetchExpression expression = new FetchExpression(request);
var mult = proxy.RetrieveMultiple(expression);
return mult;
}
Run Code Online (Sandbox Code Playgroud)
此代码仅返回最多5000个元素mult.Entities.我知道CRM中有更多实体.
如何检索所有的entites?
我在使用Dynamics CRM在线获取要导入的记录集时出现问题.我现在已将问题减少到一个字段.
我有一个名为"描述"的字段,这是一个文本字段,正在填补作品.当我尝试在没有该字段的情况下在线导入CRM时,导入就可以了.但是在包含该字段的情况下,我收到此消息:

我原本以为在这个领域的结果中有一个角色为了导入而抛弃了东西.所以我经历了为期一天的很多工作REPLACES,RTRIM(ing)和CAST.没有任何效果.
然后我想,"如果它不是一个奇怪的角色怎么办?" 并做了LEFT一个RTRIM函数,让我只有一个字符来测试导入.这是我导入时的最终陈述:
RTRIM(LEFT(CAST(lntmu11.matter.memo AS varchar(1)), 1)) AS Description
Run Code Online (Sandbox Code Playgroud)
所以现在,我只为此专栏返回一个字符.我仔细检查了Excel中的输出,并验证没有标点符号或奇怪的数据.我仍然得到错误.
我从SQL导出,原始字段是TEXT数据类型字段.
导入时有人遇到类似的问题吗?我的另一个想法是,当我在导出中包含"描述"字段时,我超过了CRM中的最大个人记录大小.(因为某些记录将包含500个字符或更多).但是现在我只输出1个字符,这不是问题.
有什么想法吗?
有谁能在这里暗示我做错了什么?
我使用此示例创建了自定义工作流活动创建自定义工作流活动.但这并没有在插件注册工具中显示为插件/活动类型.见下图:

我的活动示例代码如下:
代码更新
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Activities;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Workflow;
namespace TestCustomWorkflowActivity
{
public class SampleCustomActivity : CodeActivity
{
protected override void Execute(CodeActivityContext executionContext)
{
//Create the tracing service
ITracingService tracingService = executionContext.GetExtension<ITracingService>();
//Create the context
IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Platform
Dynamics CRM 2013 On Premises v 6.1.2.112(已安装SP1 UR2)
Dynamics CRM 2015 Online
.NET Framework
4.0 版
c# dynamics-crm workflow-foundation workflow-foundation-4 dynamics-crm-online
目的:添加具有SubArea的组(打开WebResource),可以在托管解决方案中添加.安装前和卸载后的站点地图状态应相同.
我理解Dynamics中的合并是如何工作的,这对我来说不是问题
customizations.xml中的通用站点地图如下所示
<SiteMap>
<SiteMap IntroducedVersion="7.0.0.0">
<Area Id="MA" ResourceId="Area_Marketing"
DescriptionResourceId="Marketing_Description"
Icon="/_imgs/marketing_24x24.gif"
ShowGroups="true" IntroducedVersion="7.0.0.0">
<Group Id="Test Group" Title="Test Group" IsProfile="false">
<SubArea Icon="$webresource:te_/assets/images/logo.png"
Id="te_survey"
Url="WebResources/te_/index.html"
Title="Test WebResource"
AvailableOffline="true"
PassParams="false"/>
</Group>
</Area>
</SiteMap>
</SiteMap>
Run Code Online (Sandbox Code Playgroud)
但是,当我使用它时,我在SiteMap中看不到任何条目.
我找到了一个直接解决我的问题的帖子.它要求在SubArea/Group元素中使用solutionaction属性,这样可以让CRM在托管解决方案的安装和卸载过程中合并站点地图.
遗憾的是,这在Dynamics365中不起作用.我尝试使用它时丢失了整个站点地图.
我认为这是一个相对受欢迎的场景.
PS:
我在Dynamics365(v8.2)上,所以我不能破解后面的代码,也不喜欢它.
我试过如何删除Dynamics CRM站点地图自定义? ,但它在Dynamics365中不起作用