以编程方式在Dynamics CRM 2011中创建文章

时间:2012-08-21 13:27:45

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

我有一个能够在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);

4 个答案:

答案 0 :(得分:2)

一些事情......

无效属性

article["subject"] = articleSubject;

subject不是kbarticle实体的有效属性。 subjectid ,但需要是有效主题记录的Lookup。我不知道你的片段是否存在。

缺少属性

根据SDK,您还需要指定KB模板:

  

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

[剪断]

  

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

冗余代码

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

service.Create(article);

Guid articleGUID = service.Create(article);

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

答案 1 :(得分:1)

感谢您的回答,他们都帮助我找到了正确的解决方案。主要问题是我需要为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);

答案 2 :(得分:0)

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

编辑:

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

  • 按照here所述启用跟踪或使用此方便的tool。重现问题并发布日志。
  • 从工作流程本身发布错误,如here所示。
  • 附上调试器,了解最新情况。

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

答案 3 :(得分:0)

应该看起来像

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