2010-11-30 21 views
0

Je crée une activité de flux de travail personnalisée dans VS2010 ciblant .NET 3.5. La DLL est actuellement utilisée dans un flux de travail personnalisé Microsoft System Center Service Manager, mais je ne pense pas que ce soit mon problème.Erreurs d'activité de workflow personnalisées 'La valeur ne peut pas être nulle'

J'ai une propriété de chaîne publique, que l'utilisateur tape dans la chaîne de ce que l'activité doit utiliser. Cependant, lorsque la WF s'exécute, elle ne peut pas être "nulle". Je veux cibler si c'est mon code ou quelque chose d'autre.

Lorsque nous déplaçons mon activité personnalisée sur le concepteur, je suis en mesure de taper le texte de la chaîne sur le concepteur pour cette propriété.

public static DependencyProperty ChangeRequestStageProperty = DependencyProperty.Register("ChangeRequestStage", typeof(String), typeof(UpdateChangeRequestStage)); 

    [DescriptionAttribute("The value to set the ChangeRequestStage Property in the ChangeRequest Extension class.")] 
    [CategoryAttribute("Change Request Extension")] 
    [BrowsableAttribute(true)] 
    [DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Visible)] 
    public String Stage 
    { 
     get { return ((String)(base.GetValue(UpdateChangeRequestStage.ChangeRequestStageProperty))); } 
     set { base.SetValue(UpdateChangeRequestStage.ChangeRequestStageProperty, value); } 
    } 

    protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) 
    { 
     EnterpriseManagementGroup emg = CreateEMG(); 

     //System.WorkItem.ChangeRequest Extension - ClassExtension_928bec0a_cac4_4a0a_bd89_7146c9052fbe 
     ManagementPackClass mpcChangeRequest = emg.EntityTypes.GetClass(new Guid("8c6c6057-56ad-3862-47ec-dc0dde80a071")); 

     //System.WorkItemContainsActivity Relationship Class 
     ManagementPackRelationship workItemContainsActivityRelationship = emg.EntityTypes.GetRelationshipClass(new Guid("2DA498BE-0485-B2B2-D520-6EBD1698E61B")); 

     EnterpriseManagementObject changeRequest = null; 

     //Loop thru each emo (Change Request in this case), and assign it. There will never be more than 1 emo returned 
     foreach (EnterpriseManagementObject obj in emg.EntityObjects.GetRelatedObjects<EnterpriseManagementObject>(executionContext.ContextGuid, workItemContainsActivityRelationship, TraversalDepth.OneLevel, ObjectQueryOptions.Default)) 
     { changeRequest = obj; } 

     EnterpriseManagementObjectProjection emop = new EnterpriseManagementObjectProjection(changeRequest); 

     if (emop != null) 
     { emop.Object[mpcChangeRequest, "ChangeRequestStage"].Value = Stage; } 

     emop.Commit(); 

     return base.Execute(executionContext); 
    } 

Comme il devient une erreur « valeur ne peut pas être nulle », je devine qu'il est sur cette ligne:

emop.Object[mpcChangeRequest, "ChangeRequestStage"].Value = Stage; 

Je vais tester et voir si hardcoding une des œuvres de valeur ou ne pas. Des idées? Entrez le code ici

+0

pour le moment, je ne crois pas que ce soit un problème de code. Je pense que c'est un problème de SCSM. J'ai essayé une valeur codée en dur "TEST VALUE" au lieu de regarder la variable Stage. –

+0

Le problème est lié au SDK Gestionnaire de service, pas le WF lui-même. –

Répondre

0

Je ne voulais pas laisser cette question ouverte, donc je le mettre à jour à la façon dont je résolus cela (il y a longtemps). Plutôt que de travailler avec un EnterpriseManagementObjectProjection (emop), j'ai travaillé avec un EnterpriseManagementObject standard (emo). De là, j'ai pu suivre un format similaire de dessus:

ManagementPackClass mpcChangeRequest = emg.EntityTypes.GetClass(new Guid("8c246fc5-4e5e-0605-dc23-91f7a362615b")); 
changeRequest[mpcChangeRequest, "ChangeRequestStage"].Value = this.Stage; 
changeRequest.Commit(); 
0

essayer

if (emop != null && emop.Object[mpcChangeRequest, "ChangeRequestStage"] != null) 
    emop.Object[mpcChangeRequest, "ChangeRequestStage"].Value = Stage 
+0

Cela ne fonctionnera pas. Il y aura des moments où l'activité change la valeur de null ou de quelque chose, à quelque chose d'autre. –

+0

Mais si l'objet est nul, vous ne pouvez pas accéder à sa valeur. –

+0

L'objet sera toujours là. Sa valeur peut être nulle. –