2010-02-09 5 views
1

Je crée un ensemble de flux de travail Dynamics CRM à exécuter lorsqu'une nouvelle note est créée sur un autre enregistrement de tout type. Je dois pouvoir accéder à une propriété Prop1 sur cette entité Note nouvellement créée pour accomplir d'autres tâches.Dynamics CRM - Accéder à la propriété dans un workflow sur une entité nouvellement créée

Auparavant, je n'avais accédé qu'aux valeurs entrées d'un champ ou de l'utilisateur, mais jamais sur une propriété d'une entité nouvellement créée. Toute orientation serait appréciée.

MISE À JOUR: Ceci concerne CRM 4.0.

Plus d'informations alors que j'attends: En fin de compte, cet ensemble de flux de travail va créer un e-mail qui contient un lien vers l'entité mère du nouveau enregistrement Note. La propriété que je dois obtenir est l'AnnotationId. Une fois l'enregistrement de note créé, je récupérerai l'ObjectId et l'ObjectTypeCode en fonction de l'AnnotationId de la note nouvellement créée. (Dans le cas où vous étiez curieux)

+0

Pouvez-vous préciser quelle version de CRM votre travail avec? Il y a des différences entre 3.0 et 4.0 pour cela. –

+0

4.0, dernier rollup. Merci! – splatto

+0

Hey, avez-vous déjà consulté le code supplémentaire GetNotes? Est-ce que cela fonctionnait pour vous? –

Répondre

4

Ok, donc si vous utilisez des workflows personnalisés 4.0 et non des légendes 3.0, vous devez ajouter un assembly de workflow et utiliser le service Context et le contexte d'exécution de votre flux de travail pour extraire les valeurs du nouveau Remarque.

Voir l'exemple ci-dessous sur la façon d'accéder à un enregistrement en utilisant le service de contexte et l'ID de votre contexte actuel d'exécution (qui devrait être votre note)

/// <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; 
    } 

méthode de getNotes serait une requête standard pour les notes par Id par un appel de service CRM, est ici un exemple légèrement modifié de MSDN pour retourner une note:

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; 
} 
+0

Je tiens à vous remercier pour cet exemple de code, je l'apprécie vraiment. J'ai une autre question. Je ne suis pas sûr comment faire une requête pour un BusinessEntity tel que des notes. Je n'ai jamais écrit de flux de travail comme celui-ci avant. Pouvez-vous me donner un indice concernant l'intérieur de GetNotes()? Merci encore. – splatto

+0

Ok, j'ai édité le code pour montrer la fonction GetNotes(), espérons que cela vous aide. Les assemblages de flux de travail sont l'une de mes fonctionnalités préférées du MSCRM sdk. –

+0

Excellent exemple de code, m'a beaucoup aidé – armannvg

Questions connexes