2012-07-30 4 views
5

Questa è la mia prima WF personalizzata per CRM 2011, e questo doveva essere un EF generico per qualsiasi entità, mi piacerebbe sapere come ottenere l'entità di esecuzione dal contesto o se non possibile, qualsiasi idea sarebbe molto bella.Flusso di lavoro personalizzato come ottenere l'entità di esecuzione

avvio il WF in questo modo:

public class WFIntegracao: CodeActivity 
    { 

     protected override void Execute(CodeActivityContext context) 
     { 

      IWorkflowContext contexto = context.GetExtension<IWorkflowContext>(); 


     } 
    } 

risposta

0

io non ho fatto un flusso di lavoro per gli enti di tipo non specificato prima, però si potrebbe essere in grado di modificare il codice di farlo; questo è per un riferimento contatto:

[RequiredArgument] 
[Input("Contact")] 
[ReferenceTarget("contact")] 
public InArgument<EntityReference> Contact { get; set; } 

protected override void Execute(CodeActivityContext context) 
{ 
    ContactReference = Contact.Get(context); 
    if (ContactReference == null) 
     throw new InvalidPluginExecutionException("Contact reference is null."); 

    DoSomething(); 
} 

Nota che ho esplicitamente dichiarato che il tipo di ingresso previsto con essere un riferimento un'entità contatto. Potresti essere in grado di escludere l'attributo ReferenceTarget per rimuovere questa restrizione. Si potrebbe determinare il tipo in seguito semplicemente guardando il membro LogicalName del risultato del .Get(), quindi nell'esempio sarebbe:

string entityType = ContactReference.LogicalName; 
+0

Se l'InArgument è , è richiesto l'attributo ReferenceTarget – Mac

4

IWorkflowContext deve contenere le informazioni necessarie.

IWorkflowContext contexto = context.GetExtension<IWorkflowContext>(); 
String entityName = contexto.PrimaryEntityName; 
Guid entityId = contexto.PrimaryEntityId; 

MSDN IWorkflowContext