Dynamics CRM - доступ к свойству в рабочем процессе на вновь созданной сущности - PullRequest
1 голос
/ 09 февраля 2010

Я создаю сборку рабочего процесса Dynamics CRM, которая будет выполняться при создании новой заметки для другой записи любого типа.Мне нужно иметь доступ к свойству Prop1 в этой недавно созданной сущности Note для выполнения других задач.

Ранее я получал доступ только к значениям, которые были введены из поля или от пользователя, но никогда не использовались для свойства вновь созданного объекта.Будем благодарны за любые рекомендации.

ОБНОВЛЕНИЕ: Это касается CRM 4.0.

Дополнительная информация пока я жду: В конечном итоге эта сборка рабочего процессасоздайте электронное письмо, содержащее ссылку на родительский объект вновь созданной записи заметки.Свойство, которое мне нужно получить - это AnnotationId.После создания записи заметки я получу ObjectId и ObjectTypeCode на основе AnnotationId недавно созданной заметки.(Если вам было любопытно)

1 Ответ

4 голосов
/ 09 февраля 2010

Хорошо, так что если вы используете пользовательские рабочие процессы 4.0, а не выноски 3.0, вам нужно добавить сборку рабочего процесса и использовать службу контекста и контекст выполнения вашего рабочего процесса, чтобы извлечь значения из новой заметки.

См.В приведенном ниже примере показано, как получить доступ к записи с использованием службы контекста и идентификатора текущего контекста выполнения (это должно быть вашим примечанием).

    /// <summary>
    /// The Execute method is called by the workflow runtime to execute an activity.
    /// </summary>
    /// <param name="executionContext"> The context for the activity</param>
    /// <returns></returns>
    protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext)
    {

        // Get the context service.
        IContextService contextService = (IContextService)executionContext.GetService(typeof(IContextService));
        IWorkflowContext context = contextService.Context;

        // Use the context service to create an instance of CrmService.
        ICrmService crmService = context.CreateCrmService(true);
        BusinessEntity newNote = GetNote(crmService, context.PrimaryEntityId);

        string noteAttrib;

         noteAttrib = newNote.Properties.Contains("AnnotationId") ? ((Lookup)newNote.Properties["annotationid"]).name.ToString() : null;

        return ActivityExecutionStatus.Closed;
    }

Метод GetNotes будет стандартным запросом для заметок по идентификатору черезвызов службы CRM, вот пример, слегка измененный из MSDN для возврата примечания:

private BusinessEntity getNote(ICrmService service, guid noteid)
{
  // Create the column set object that indicates the fields to be retrieved.
  ColumnSet cols = new ColumnSet();

  // Set the columns to retrieve, you can use allColumns but its good practice to specify:
  cols.Attributes = new string [] {"name"};

  // Create the target object for the request.
  TargetRetrieveAnnotation target = new TargetRetrieveAnnotation();

  // Set the properties of the target object.
  // EntityId is the GUID of the record being retrieved.
  target.EntityId = noteid;

  // Create the request object.
  RetrieveRequest retrieve = new RetrieveRequest();

  // Set the properties of the request object.
  retrieve.Target = target;
  retrieve.ColumnSet = cols;

  // Execute the request.
  RetrieveResponse retrieved = (RetrieveResponse)service.Execute(retrieve);
  return RetrieveResponse;
}
...