1

我有一个手动调用的过程,它与帐户实体相关联。这个过程有许多步骤。第一步是创建一个任务并将其分配给某人。预计此人将添加一些注释并完成任务。

在这个过程中,我有一个步骤来创建服务案例。创建完成后,我想将上面任务中的注释复制到新创建的服务案例中。

我创建了一个自定义工作流活动来尝试完成此操作。我已经在我的流程中部署并使用它而没有任何错误,它确实将内容复制到服务案例的注释字段中,但是它复制了任务的标题,而不是注释内容,我不能找出原因。

public class CopyNotes : CodeActivity
{
    protected override void Execute(CodeActivityContext executionContext)
    {
        //Create the context
        IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();
        IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
        IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

        //get the notes associated with the source entity
        Guid copyFromId = CopyFrom.Get(executionContext).Id;
        Guid copyToId = CopyTo.Get(executionContext).Id;

        EntityCollection copyFromNotes = RetrieveNotes(service, copyFromId);

        if (copyFromNotes.Entities.Any())
        {
            foreach (Entity e in copyFromNotes.Entities)
            {
                Entity newNote = new Entity("annotation");
                newNote.Attributes["subject"] = e.Attributes["subject"];
                newNote.Attributes["notetext"] = e.Attributes["notetext"];
                newNote.Attributes["objectid"] = new EntityReference() { Id = copyToId, LogicalName = CopyTo.Get(executionContext).LogicalName };
            }
        }
    }

    private EntityCollection RetrieveNotes(IOrganizationService service, Guid relatedObject)
    {

        ConditionExpression condition = new ConditionExpression();
        condition.AttributeName = "objectid";
        condition.Operator = ConditionOperator.Equal;
        condition.Values.Add(relatedObject.ToString());

        ColumnSet columns = new ColumnSet("subject", "notetext");

        QueryExpression query = new QueryExpression();
        query.ColumnSet = columns;
        query.EntityName = "annotation";
        query.Criteria.AddCondition(condition);

        EntityCollection results = service.RetrieveMultiple(query);

        return results;

    }

    [RequiredArgument]
    [ReferenceTarget("task")]
    [Input("Copy notes from item")]
    public InArgument<EntityReference> CopyFrom { get; set; }

    [RequiredArgument]
    [ReferenceTarget("incident")]
    [Input("Copy notes to item")]
    public InArgument<EntityReference> CopyTo { get; set; }
}
4

2 回答 2

3

我认为您需要在定义 newNote 之后实际创建它。

foreach (Entity e in copyFromNotes.Entities)
{
     Entity newNote = new Entity("annotation");
     newNote.Attributes["subject"] = e.Attributes["subject"];
     newNote.Attributes["notetext"] = e.Attributes["notetext"];
     newNote.Attributes["objectid"] = new EntityReference() { Id = copyToId, LogicalName = CopyTo.Get(executionContext).LogicalName };
     service.Create(newNote);
}

一旦我这样做了,您的代码就可以很好地创建一个带有标题和注释文本的新注释。

于 2012-06-02T05:56:46.857 回答
0

如果异步创建速度足够快,您可以使用标准工作流程执行此操作。

安德烈亚斯

于 2012-06-06T11:20:10.130 回答