我已经避免使用fetchxml,因为我一直不确定在调用crmService.Fetch(fetchXml)之后处理结果数据的最佳方法.在几种情况下,我使用带有LINQ的XDocument从此数据结构中检索数据,例如:
XDocument resultset = XDocument.Parse(_service.Fetch(fetchXml));
if (resultset.Root == null || !resultset.Root.Elements("result").Any())
{
return;
}
foreach (var displayItem in resultset.Root.Elements("result").Select(item => item.Element(displayAttributeName)).Distinct())
{
if (displayItem!= null && displayItem.Value != null)
{
dropDownList.Items.Add(displayItem.Value);
}
}
Run Code Online (Sandbox Code Playgroud)
处理fetchxml结果数据的最佳方法是什么,以便可以轻松使用.诸如将这些记录传递到ASP.NET数据网格之类的应用程序将非常有用.
我是crm 2011的新手.我找到了有关如何在功能区中添加新按钮的文档.以及如何分组按钮.但我需要功能区中的下拉菜单按钮.我怎样才能做到这一点?我没有找到任何关于此的信息.
谢谢!
我在使用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个字符,这不是问题.
有什么想法吗?
作为要求,我不能使用用"CrmSvcUtil"创建的早期绑定上下文.的问题是,一个新活动phonecall预计两个字段("发件人"和"到"),它们是Entities类型activityparty.标准XRM/CRM命名空间不包含ActivityParty与使用Utility创建的类似的类.
我尝试用EntityCollection填充它,但该字段将为空.接下来,我尝试重新创建一个有效的电话呼叫活动的结构.EntityCollection" activityparty " - >一个Entity" activityparty " - > EntityReference属性" partyid " - >实体引用(例如"联系人"和联系人的ID).但它根本行不通.
如何使用"普通" Entitiy类创建ActivityParty(或更好的电话呼叫活动)?
我们从CRM导出一个包含所有自定义的解决方案,并将其解压缩到单个文件中(使用SolutionPackager.exe)存储在源代码管理中.在我们添加一些计算字段之前,这一直很有效.
使用SolutionPackager.exe重新打包并导入时,我们会收到一条缺少FormulaDefinition文件的错误.果然,Formulas我们的源代码管理中没有任何文件夹.
如果我打开我们导出的解决方案的zip文件,我会看到Formulas文件夹,但神秘地解压缩该解决方案会使Formulas消失.我没有发现任何有用的信息,有没有人以前遇到过这个问题?
在商品屏幕中,我可以添加一个ProductOffer的子网格.我有一个PreCreate ProductOffer插件,它检查一些条件以显示错误消息并停止创建.
所以在这个插件中我添加了:
throw new InvalidPluginExecutionException("My message");
Run Code Online (Sandbox Code Playgroud)
但是没有显示对话框消息,而是在子网格上面显示错误通知,并显示消息:" ISV代码中止了操作 ".
请告诉我为什么我的信息没有显示?以及如何解决这个问题?
非常感谢你.
我正在使用Microsoft aad:adal4j来处理来自Mobile的动态crm登录.实施后我得到以下例外.
我究竟做错了什么?
错误
java.lang.NoSuchMethodError: No static method encodeBase64URLSafeString([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)
java.util.concurrent.ExecutionException: java.lang.NoSuchMethodError: No static method encodeBase64URLSafeString([B)Ljava/lang/String; in class Lorg/apache/commons/codec/binary/Base64; or its super classes (declaration of 'org.apache.commons.codec.binary.Base64' appears in /system/framework/org.apache.http.legacy.boot.jar)
at java.util.concurrent.FutureTask.report(FutureTask.java:94)
at java.util.concurrent.FutureTask.get(FutureTask.java:164)
at com.sampleadal.MainActivity.onCreate(MainActivity.java:33)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NoSuchMethodError: No static method encodeBase64URLSafeString([B)Ljava/lang/String; in …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Dynamics CRM Online 2016和BizTalk 2013 R2实现服务器到服务器的集成.我使用WebHttpBinding来调用CRM Web API,这需要一个作为http头提供的持有者令牌:
Authorization: Bearer [base64string]
我编写了一个客户端消息检查器,它使用ADAL调用Azure AD来获取访问令牌.这是通过客户端断言证书保护的,该证书已分配给AD租户中的已注册应用程序:
var token = context.AcquireTokenAsync(this.ResourceUri, assertionCert).Result;
ResourceUri 是 https://[myorganisation].crm4.dynamics.comassertionCert 是使用应用程序注册应用程序ID和机器证书存储区中的x509证书创建的ClientAssertionCertificate,该证书存储区作为KeyCredential注册到应用程序这"有用",因为它返回一个令牌,我可以解码这个令牌来检查声明 - 其中有相当数量,我无法确定这是否是CRM要求的一组声明.
AD应用程序注册配置了对CRM实例的委派权限.
我已将CRM本地用户中的应用程序ID设置为应用程序注册的应用程序ID.
在调用webAPI并提供此令牌时,CRM会响应401 unauthorized.
我在powershell脚本和PostMan中重复了相同的过程,所有这些过程似乎都表现出相同的行为.
我还应该做些什么来让CRM接受我的访问令牌?
编辑#1:尝试硬编码权限URI https://login.windows.net/[my-tenant-id]/oauth2/token而不是动态获取权限的内容AuthenticationParameters- 这是相同的值,除了以/ authorization而不是/ token结尾.这是零差异.
编辑#2:我正在使用的管理员向我指出,我期望使用的应用程序用户没有分配用户角色 - 这已被修改为具有允许API访问的角色,但这也没有区别.
编辑#3:oauth2AllowImplicitFlow在应用注册的清单中设置为true.这没有任何区别.
编辑#4:通过创建新的应用注册取得了一些进展,这次是作为Native应用而不是Web应用.我设法使用客户端密钥获取令牌,这被接受了 - 但是在将证书分配给应用程序并像以前一样呈现ClientAssertionCertificate时,我从权威机构获得响应:
Error validating credentials. AADSTS50012: Client is public so a client_assertion' should not be presented.
为什么?"客户公开"是什么意思?只是工作!
我已经编写了以下代码来获取CRM的令牌.
class Program
{
private const string username = "richa@azuretraining112.onmicrosoft.com";
private const string password = "Pa$$w0rd";
private const string serviceURL = "https://azuretraining112.crm8.dynamics.com";
private const string applicationID = "89a70b76-3a71-481f-8755-a7aa97c59c35";
private const string redirectURL = "https://localhost1";
private const string authorityURI = "https://login.microsoftonline.com/1d54ea41-cd25-488f-812c-c078e6114065/oauth2/authorize";
private static AuthenticationResult authResult = null;
private static void Main(string[] args)
{
var credentials = new UserPasswordCredential(username, password);
var context = new AuthenticationContext(authorityURI);
authResult = context.AcquireTokenAsync(serviceURL, applicationID, credentials).Result;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,在运行代码时,我在尝试使用AcquireTokenAsync获取令牌时收到以下错误.
我不知道我错过了什么.请帮忙!
我尝试了租户未授权的解决方案,但没有任何效果.
谢谢!
我需要能够从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?