Personalizzati errori di attività del flusso di lavoro 'Il valore non può essere nullo'

StackOverflow https://stackoverflow.com/questions/4315008

  •  29-09-2019
  •  | 
  •  

Domanda

Sto creando un'attività di flusso di lavoro personalizzato in VS2010 mira .NET 3.5. La DLL viene effettivamente utilizzato in un flusso di lavoro personalizzato di Microsoft System Center Service Manager, ma non credo che sia il mio problema.

ho una proprietà stringa pubblica, che l'utente digita la stringa di ciò che l'attività deve utilizzare. Tuttavia, quando le piste WF, esso errori fuori 'il valore non può essere null'. Voglio target, se è il mio codice o qualcosa d'altro.

Quando ci trasciniamo la mia attività personalizzato nella finestra di progettazione, sono in grado di digitare il testo della stringa sul progettista per quella proprietà.

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

Dal momento che si sta facendo un 'valore non può essere nullo' errore, sto cercando di indovinare che è su questa linea:

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

ho intenzione di prova e vedere se hardcoding un valore funziona o meno. Qualche idea?     inserire il codice qui

È stato utile?

Soluzione 2

Non volevo lasciare questa domanda aperta, quindi sto aggiornarlo su come ho risolto questo (molto tempo fa).

Invece di lavorare con un EnterpriseManagementObjectProjection (EMOP), ho lavorato con un EnterpriseManagementObject standard (emo). Da lì, sono stato in grado di seguire un formato simile dall'alto:

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

Altri suggerimenti

Prova questo

if (emop != null && emop.Object[mpcChangeRequest, "ChangeRequestStage"] != null)
   emop.Object[mpcChangeRequest, "ChangeRequestStage"].Value = Stage
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top