【问题标题】:Programmatically creating an article in Dynamics CRM 2011以编程方式在 Dynamics CRM 2011 中创建文章
【发布时间】:2012-08-21 13:27:44
【问题描述】:

我有一个能够更新 CRM 中的案例的插件,但我现在希望它创建一个新的知识库文章,因为我不相信使用工作流可以自动执行此操作。该插件由解决案例时执行的工作流触发。

这是我目前所拥有的,但它不起作用:

Entity article = new Entity("kbarticle");
article["title"] = articleTitle;
article["subject"] = articleSubject;

service.Create(article);

Guid articleGUID = service.Create(article);

ColumnSet attributes = new ColumnSet(new string[] { "description" });

article = service.Retrieve(article.LogicalName, articleGUID, attributes);

article["description"] = articleDescription;

service.Update(article);

【问题讨论】:

  • 什么特别不起作用?
  • 我不确定,因为 CRM 不提供任何调试信息。我只能说没有创建新文章,工作流程也没有完成,抱歉!
  • 工作流是否卡在等待状态?如果是这样,那么它可能出错了,请检查工作流记录本身的 Crm 日志。
  • 是的,它只是停留在等待状态,工作流记录上的插件作业旁边有错误
  • 错误说明了什么?

标签: c# plugins dynamics-crm dynamics-crm-2011


【解决方案1】:

一些事情......

无效属性

article["subject"] = articleSubject;

subject 不是kbarticle 实体的有效属性。 subjectid ,但必须是有效主题记录的Lookup。我无法从你的 sn-p 中判断是不是。

缺少属性

根据SDK,还需要指定一个知识库模板:

创建知识库文章时,必须将其与知识库模板和主题相关联...

[剪辑]

要将文章与模板关联,请使用 KbArticle。 KbArticleTemplateId 属性。将文章放在特定的 通过指定主题类别,使用 KbArticle.SubjectId 属性。

冗余代码

另外,可能不是您的错误的来源,但您的代码尝试创建文章两次。你这里的第一行代码是多余的:

service.Create(article);

Guid articleGUID = service.Create(article);

除此之外,我们确实需要知道您的代码引发的错误(尽管我怀疑这将是我的第一点)。

【讨论】:

  • 谢谢你,是的,你是对的,它是subjectid而不是subject。由于这是一个查找,我需要使用我的回答中描述的实体引用。我会投票,但我还没有足够的代表!干杯
【解决方案2】:

感谢您的回答,他们都帮助我朝着正确的方向寻求解决方案。主要问题是我需要为 subjectid 和模板使用实体引用:

Entity kbarticle = new Entity("kbarticle");

kbarticle["title"] = title;
kbarticle["subjectid"] = new EntityReference(subject_LogicalName, subject_Guid);
kbarticle["kbarticletemplateid"] = new EntityReference(template_LogicalName, template_Guid);

service.Create(kbarticle);

【讨论】:

    【解决方案3】:

    应该是这样的

            KbArticle a = new KbArticle();
            a.Title = articleTitle;
            a.SubjectId = new Xrm.Sdk.EntityReference(Subject.EntityLogicalName, subjectGuid);
            service.Create(a);
    

    【讨论】:

    • 我很确定在此之后会有更多步骤,如我链接的 MSDN 文章中所述。
    • @paramosh 感谢您的帮助
    【解决方案4】:

    您是否看过这篇MSDN 文章,它不是代码示例,而是描述了创建文章的步骤。

    编辑:

    您需要向我们提供更多调试信息。要么;

    • 按照here 的描述启用跟踪或使用这个方便的tool。重现问题并发布日志。
    • 从工作流本身发布错误,如图here
    • 附加调试器并找出发生了什么。

    您可能会发现在 Visual Studio 中针对单元测试开发文章创建代码更容易,然后您可以稍后将其连接到工作流活动。

    【讨论】:

    • 感谢您的帮助。这篇文章很有用,并帮助我最终得到了答案(如果 MS 提供了一些示例代码会很好)。 CRM 插件的调试有点像噩梦,所以感谢您提供的信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多